Skip to content

Commit

Permalink
Turn IsInfiniteAbelianizationGroup into a property
Browse files Browse the repository at this point in the history
Also add some implications for it, e.g. finite groups never have infinite
abelianization; all but trivial free groups do have infinite abelianization).
Finally, add some tests.
  • Loading branch information
fingolfin committed Mar 23, 2018
1 parent 9da60a3 commit ecb00ad
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 7 deletions.
7 changes: 4 additions & 3 deletions hpcgap/lib/object.gd
Original file line number Diff line number Diff line change
Expand Up @@ -740,7 +740,8 @@ DeclareOperation( "KnownPropertiesOfObject", [ IsObject ] );
## "IsCompletelyRegularSemigroup", "IsCompletelySimpleSemigroup",
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedGroup", "IsSubsetLocallyFiniteGroup",
## "KnowsHowToDecompose", "IsNilpotentByFinite" ]
## "KnowsHowToDecompose", "IsInfiniteAbelianizationGroup",
## "IsNilpotentByFinite" ]
## gap> Size(g);
## 6
## gap> KnownPropertiesOfObject(g);
Expand All @@ -753,8 +754,8 @@ DeclareOperation( "KnownPropertiesOfObject", [ IsObject ] );
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedGroup", "IsSubsetLocallyFiniteGroup",
## "KnowsHowToDecompose", "IsPerfectGroup", "IsSolvableGroup",
## "IsPolycyclicGroup", "IsNilpotentByFinite", "IsTorsionFree",
## "IsFreeAbelian" ]
## "IsPolycyclicGroup", "IsInfiniteAbelianizationGroup",
## "IsNilpotentByFinite", "IsTorsionFree", "IsFreeAbelian" ]
## gap> KnownTruePropertiesOfObject(g);
## [ "IsNonTrivial", "IsFinite", "CanEasilyCompareElements",
## "CanEasilySortElements", "IsDuplicateFree",
Expand Down
7 changes: 6 additions & 1 deletion lib/grp.gd
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,12 @@ DeclareAttribute( "AbelianInvariants", IsGroup );
## </ManSection>
## <#/GAPDoc>
##
DeclareAttribute( "IsInfiniteAbelianizationGroup", IsGroup );
DeclareProperty( "IsInfiniteAbelianizationGroup", IsGroup );

# finite groups never have infinite abelianization
InstallTrueMethod( HasIsInfiniteAbelianizationGroup, IsGroup and IsFinite );

#InstallTrueMethod( IsInfiniteAbelianizationGroup, IsSolvableGroup and IsTorsionFree );


#############################################################################
Expand Down
4 changes: 4 additions & 0 deletions lib/grpfp.gi
Original file line number Diff line number Diff line change
Expand Up @@ -907,6 +907,10 @@ function(H)

end);

# a free group has infinite abelianization if and only if it is non-trivial
InstallTrueMethod( IsInfiniteAbelianizationGroup, IsFreeGroup and IsNonTrivial );
InstallTrueMethod( HasIsInfiniteAbelianizationGroup, IsFreeGroup and IsTrivial );

#############################################################################
##
#M IsPerfectGroup( <H> )
Expand Down
7 changes: 4 additions & 3 deletions lib/object.gd
Original file line number Diff line number Diff line change
Expand Up @@ -714,7 +714,8 @@ DeclareOperation( "KnownPropertiesOfObject", [ IsObject ] );
## "IsCompletelyRegularSemigroup", "IsCompletelySimpleSemigroup",
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedGroup", "IsSubsetLocallyFiniteGroup",
## "KnowsHowToDecompose", "IsNilpotentByFinite" ]
## "KnowsHowToDecompose", "IsInfiniteAbelianizationGroup",
## "IsNilpotentByFinite" ]
## gap> Size(g);
## 6
## gap> KnownPropertiesOfObject(g);
Expand All @@ -727,8 +728,8 @@ DeclareOperation( "KnownPropertiesOfObject", [ IsObject ] );
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedGroup", "IsSubsetLocallyFiniteGroup",
## "KnowsHowToDecompose", "IsPerfectGroup", "IsSolvableGroup",
## "IsPolycyclicGroup", "IsNilpotentByFinite", "IsTorsionFree",
## "IsFreeAbelian" ]
## "IsPolycyclicGroup", "IsInfiniteAbelianizationGroup",
## "IsNilpotentByFinite", "IsTorsionFree", "IsFreeAbelian" ]
## gap> KnownTruePropertiesOfObject(g);
## [ "IsNonTrivial", "IsFinite", "CanEasilyCompareElements",
## "CanEasilySortElements", "IsDuplicateFree",
Expand Down
49 changes: 49 additions & 0 deletions tst/testinstall/opers/IsInfiniteAbelianizationGroup.g
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
gap> START_TEST("IsInfiniteAbelianizationGroup.tst");

#
# Finite groups never have infinite abelianization
#
gap> G:=SymmetricGroup(3);;
gap> HasIsInfiniteAbelianizationGroup(G);
true
gap> IsInfiniteAbelianizationGroup(G);
false

#
# Free groups have infinite abelianization if and only if they are non-trivial
#
gap> G:=FreeGroup(0);;
gap> HasIsInfiniteAbelianizationGroup(G);
true
gap> IsInfiniteAbelianizationGroup(G);
false

#
gap> G:=FreeGroup(2);;
gap> HasIsInfiniteAbelianizationGroup(G);
true
gap> IsInfiniteAbelianizationGroup(G);
true

#
gap> G:=TrivialSubgroup(G);;
gap> HasIsInfiniteAbelianizationGroup(G);
true
gap> IsInfiniteAbelianizationGroup(G);
false

#
# for fp groups, more work is needed
#
gap> F:=FreeGroup(2);;
gap> H:=F/[F.1^2,F.2^2];; IsInfiniteAbelianizationGroup(H);
false
gap> H:=F/[F.1^2];; IsInfiniteAbelianizationGroup(H);
true
gap> H:=F/[F.1^2,F.2^2,Comm(F.1,F.2)];; IsInfiniteAbelianizationGroup(H);
false
gap> K:=Subgroup(H, [H.1, H.2^2]);; IsInfiniteAbelianizationGroup(K);
false

#
gap> STOP_TEST("IsInfiniteAbelianizationGroup.tst", 1);

0 comments on commit ecb00ad

Please sign in to comment.