diff --git a/lib/addmagma.gi b/lib/addmagma.gi index 72f692d91b7..ab653cbf46e 100644 --- a/lib/addmagma.gi +++ b/lib/addmagma.gi @@ -175,7 +175,7 @@ InstallGlobalFunction( SubadditiveMagmaNC, function( M, gens ) if IsEmpty( gens ) then K:= NewType( FamilyObj(M), IsAdditiveMagma - and IsTrivial + and IsEmpty and IsAttributeStoringRep ); S:= Objectify( K, rec() ); SetGeneratorsOfAdditiveMagma( S, [] ); diff --git a/lib/magma.gd b/lib/magma.gd index d939bcd6207..e8615ed42b2 100644 --- a/lib/magma.gd +++ b/lib/magma.gd @@ -129,8 +129,13 @@ DeclareCategory( "IsMagmaWithInverses", IsMagmaWithInversesIfNonzero and IsMultiplicativeElementWithInverseCollection ); +# FIXME: this is wrong for empty magmas +# InstallTrueMethod( IsMagmaWithInverses, +# IsFiniteOrderElementCollection and IsMagma ); + InstallTrueMethod( IsMagmaWithInverses, - IsFiniteOrderElementCollection and IsMagma ); + IsFiniteOrderElementCollection and IsMagmaWithOne ); + ############################################################################# ## diff --git a/tst/testbugfix/2018-05-09-submagma.tst b/tst/testbugfix/2018-05-09-submagma.tst new file mode 100644 index 00000000000..4566649ae19 --- /dev/null +++ b/tst/testbugfix/2018-05-09-submagma.tst @@ -0,0 +1,54 @@ +# +# There was a bug where we marked a sub additive magma +# with empty generator list as trivial, even though it is empty. +# +# There was also a wrong implication, from "IsFiniteOrderElementCollection and +# IsMagma" to IsMagmaWithInverses. But a collection with the former filters may +# be empty, and then it isn't a IsMagmaWithInverses. +# +gap> amgm:=AdditiveMagma([0]); + +gap> Size(amgm); +1 +gap> IsTrivial(amgm); +true +gap> IsEmpty(amgm); +false +gap> IsMagmaWithInverses(amgm); +false + +# +gap> asub:=SubadditiveMagma(amgm, []); + +gap> Size(asub); +0 +gap> IsTrivial(asub); +false +gap> IsEmpty(asub); +true +gap> IsMagmaWithInverses(asub); +false + +# +gap> mgm:=Magma( () ); + +gap> Size(mgm); +1 +gap> IsTrivial(mgm); +true +gap> IsEmpty(mgm); +false +gap> IsMagmaWithInverses(mgm); +false + +# +gap> sub:=Submagma(mgm,[]); + +gap> Size(sub); +0 +gap> IsTrivial(sub); +false +gap> IsEmpty(sub); +true +gap> IsMagmaWithInverses(sub); +false