Skip to content

Commit 4a196cf

Browse files
committed
no generator for S1
1 parent 4103129 commit 4a196cf

File tree

3 files changed

+46
-21
lines changed

3 files changed

+46
-21
lines changed

src/sage/groups/finitely_presented_named.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,10 @@ def CyclicPresentation(n):
101101
n = Integer(n)
102102
if n < 1:
103103
raise ValueError('finitely presented group order must be positive')
104-
F = FreeGroup( 'a' )
104+
F = FreeGroup('a')
105105
rls = F([1])**n,
106-
return FinitelyPresentedGroup( F, rls )
106+
return FinitelyPresentedGroup(F, rls)
107+
107108

108109
def FinitelyGeneratedAbelianPresentation(int_list):
109110
r"""
@@ -384,6 +385,7 @@ def DiCyclicPresentation(n):
384385
rls = F([1])**(2*n), F([2,2])*F([-1])**n, F([-2,1,2,1])
385386
return FinitelyPresentedGroup(F, rls)
386387

388+
387389
def SymmetricPresentation(n):
388390
r"""
389391
Build the Symmetric group of order `n!` as a finitely presented group.
@@ -422,14 +424,18 @@ def SymmetricPresentation(n):
422424
from sage.groups.free_group import _lexi_gen
423425

424426
n = Integer(n)
427+
if n <= 1:
428+
return FinitelyPresentedGroup(FreeGroup(()), ())
429+
425430
perm_rep = SymmetricGroup(n)
426431
GAP_fp_rep = libgap.Image(libgap.IsomorphismFpGroupByGenerators(perm_rep, perm_rep.gens()))
427432
image_gens = GAP_fp_rep.FreeGeneratorsOfFpGroup()
428-
name_itr = _lexi_gen() # Python generator object for variable names
433+
name_itr = _lexi_gen() # Python generator object for variable names
429434
F = FreeGroup([next(name_itr) for x in perm_rep.gens()])
430435
ret_rls = tuple([F(rel_word.TietzeWordAbstractWord(image_gens).sage())
431-
for rel_word in GAP_fp_rep.RelatorsOfFpGroup()])
432-
return FinitelyPresentedGroup(F,ret_rls)
436+
for rel_word in GAP_fp_rep.RelatorsOfFpGroup()])
437+
return FinitelyPresentedGroup(F, ret_rls)
438+
433439

434440
def QuaternionPresentation():
435441
r"""
@@ -481,9 +487,10 @@ def AlternatingPresentation(n):
481487
sage: A6.as_permutation_group().is_isomorphic(AlternatingGroup(6)), A6.order()
482488
(True, 360)
483489
484-
TESTS::
490+
TESTS:
491+
492+
Even permutation tests::
485493
486-
sage: #even permutation test..
487494
sage: A1 = groups.presentation.Alternating(1); A2 = groups.presentation.Alternating(2)
488495
sage: A1.is_isomorphic(A2), A1.order()
489496
(True, 1)
@@ -496,14 +503,18 @@ def AlternatingPresentation(n):
496503
from sage.groups.free_group import _lexi_gen
497504

498505
n = Integer(n)
506+
if n <= 2:
507+
return FinitelyPresentedGroup(FreeGroup(()), ())
508+
499509
perm_rep = AlternatingGroup(n)
500510
GAP_fp_rep = libgap.Image(libgap.IsomorphismFpGroupByGenerators(perm_rep, perm_rep.gens()))
501511
image_gens = GAP_fp_rep.FreeGeneratorsOfFpGroup()
502-
name_itr = _lexi_gen() # Python generator object for variable names
512+
name_itr = _lexi_gen() # Python generator object for variable names
503513
F = FreeGroup([next(name_itr) for x in perm_rep.gens()])
504514
ret_rls = tuple([F(rel_word.TietzeWordAbstractWord(image_gens).sage())
505-
for rel_word in GAP_fp_rep.RelatorsOfFpGroup()])
506-
return FinitelyPresentedGroup(F,ret_rls)
515+
for rel_word in GAP_fp_rep.RelatorsOfFpGroup()])
516+
return FinitelyPresentedGroup(F, ret_rls)
517+
507518

508519
def KleinFourPresentation():
509520
r"""

src/sage/groups/perm_gps/permgroup.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,7 +1273,7 @@ def gens(self) -> tuple:
12731273
We make sure that the trivial group gets handled correctly::
12741274
12751275
sage: SymmetricGroup(1).gens()
1276-
((),)
1276+
()
12771277
"""
12781278
return self._gens
12791279

@@ -2028,8 +2028,11 @@ def strong_generating_system(self, base_of_group=None, implementation="sage"):
20282028
end;
20292029
return CosetsStabChain(S0);
20302030
end;""")
2031-
G = libgap.Group(self.gens()) # G = libgap(self)
2032-
S = G.StabChain()
2031+
if self._gens:
2032+
G = libgap.Group(self.gens()) # G = libgap(self)
2033+
else:
2034+
G = libgap.SymmetricGroup([])
2035+
S = G.StabChainImmutable()
20332036
cosets = gap_cosets(S)
20342037
one = self.one()
20352038
return [[one._generate_new_GAP(libgap.ListPerm(elt))

src/sage/groups/perm_gps/permgroup_named.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,12 @@ class SymmetricGroup(PermutationGroup_symalt):
244244
245245
sage: groups.permutation.Symmetric(4)
246246
Symmetric group of order 4! as a permutation group
247+
sage: groups.permutation.Symmetric(1).gens()
248+
()
249+
250+
Check for :issue:`36204`::
251+
252+
sage: h = SymmetricGroup(1).hom(SymmetricGroup(2))
247253
"""
248254
def __init__(self, domain=None):
249255
"""
@@ -262,20 +268,24 @@ def __init__(self, domain=None):
262268
# Note that we skip the call to the superclass initializer in order to
263269
# avoid infinite recursion since SymmetricGroup is called by
264270
# PermutationGroupElement
265-
cat = Category.join([FinitePermutationGroups(), FiniteWeylGroups().Irreducible()])
271+
cat = Category.join([FinitePermutationGroups(),
272+
FiniteWeylGroups().Irreducible()])
266273
super(PermutationGroup_generic, self).__init__(category=cat)
267274

268275
self._domain = domain
269-
self._deg = len(self._domain)
276+
self._deg = n = len(self._domain)
270277
self._domain_to_gap = {key: i+1 for i, key in enumerate(self._domain)}
271278
self._domain_from_gap = {i+1: key for i, key in enumerate(self._domain)}
272279

273280
# Create the generators for the symmetric group
274-
gens = [tuple(self._domain)]
275-
if len(self._domain) > 2:
276-
gens.append(tuple(self._domain[:2]))
277-
self._gens = tuple([self.element_class(g, self, check=False)
278-
for g in gens])
281+
if n <= 1:
282+
self._gens = ()
283+
else:
284+
gens = [tuple(self._domain)]
285+
if n > 2:
286+
gens.append(tuple(self._domain[:2]))
287+
self._gens = tuple([self.element_class(g, self, check=False)
288+
for g in gens])
279289

280290
def _gap_init_(self, gap=None):
281291
"""
@@ -3440,6 +3450,7 @@ def codegrees(self):
34403450
ret.append((self._n-1)*self._m - self._n)
34413451
return tuple(sorted(ret, reverse=True))
34423452

3453+
34433454
class SmallPermutationGroup(PermutationGroup_generic):
34443455
r"""
34453456
A GAP SmallGroup, returned as a permutation group.
@@ -3500,7 +3511,7 @@ def __init__(self, order, gap_id):
35003511
"""
35013512
self._n = order
35023513
self._gap_id = gap_id
3503-
self._gap_small_group = libgap.SmallGroup(order,gap_id)
3514+
self._gap_small_group = libgap.SmallGroup(order, gap_id)
35043515
gap_permutation_group = self._gap_small_group.IsomorphismPermGroup().Image(self._gap_small_group)
35053516
PermutationGroup_generic.__init__(self, gap_group=gap_permutation_group)
35063517

0 commit comments

Comments
 (0)