Correct the TrueMethods: elt must be associate and have inverses to have quotients

This commit is contained in:
Glen Whitney 2018-09-12 08:34:44 -04:00
parent 1cf79a02c3
commit d7f394f957

View File

@ -19,11 +19,14 @@ DeclareCategory( "IsRightQuotientElement", IsExtLElement);
DeclareCategoryCollections("IsRightQuotientElement"); DeclareCategoryCollections("IsRightQuotientElement");
DeclareCategoryCollections("IsRightQuotientElementCollection"); DeclareCategoryCollections("IsRightQuotientElementCollection");
## Every element with an inverse can form right quotients ## Every associative element with an inverse can form right quotients
## (in fact, in some sense it might be enough to have just a left inverse, ## (in fact, in some sense it might be enough to have just a left inverse,
## but there doesn't seem to be any benefit to delving to that level of ## but there doesn't seem to be any benefit to delving to that level of
## detail at this point.) ## detail at this point.)
InstallTrueMethod(IsRightQuotientElement, IsMultiplicativeElementWithInverse); ## By noting this property, we can create a RightQuasigroup from, e.g., group
## elements
InstallTrueMethod(IsRightQuotientElement,
IsMultiplicativeElementWithInverse and IsAssociativeElement);
## Now what we would like to do is re-declare ## Now what we would like to do is re-declare
## DeclareOperation( "/", [IsExtRElement, IsRightQuotientElement] ); ## DeclareOperation( "/", [IsExtRElement, IsRightQuotientElement] );
@ -37,8 +40,9 @@ DeclareCategory( "IsLeftQuotientElement", IsExtRElement);
DeclareCategoryCollections("IsLeftQuotientElement"); DeclareCategoryCollections("IsLeftQuotientElement");
DeclareCategoryCollections("IsLeftQuotientElementCollection"); DeclareCategoryCollections("IsLeftQuotientElementCollection");
## Every element with an inverse can form left quotients ## Every associative element with an inverse can form left quotients
InstallTrueMethod(IsLeftQuotientElement, IsMultiplicativeElementWithInverse); InstallTrueMethod(IsLeftQuotientElement,
IsMultiplicativeElementWithInverse and IsAssociativeElement);
## Again, ideally (in some sense) we'd like to redeclare ## Again, ideally (in some sense) we'd like to redeclare
## DeclareOperation("LeftQuotient", [IsLeftQuotientElement,IsExtLElement]); ## DeclareOperation("LeftQuotient", [IsLeftQuotientElement,IsExtLElement]);
@ -60,10 +64,28 @@ DeclareRepresentation( "IsLoopElmRep",
DeclareCategory("IsRightQuasigroup", DeclareCategory("IsRightQuasigroup",
IsMagma and IsRightQuotientElementCollection); IsMagma and IsRightQuotientElementCollection);
## Although the following assertion is mathematically correct, unfortunately
## it interferes with method selection for standard group operations
## in GAP. As an example, if it is uncommented, it will no longer be possible
## to construct a CyclicGroup; trying to do so eventually dies in
## GeneratorsOfRightQuasigroup. Those errors could conceivably be corrected by
## delving further into GAP's method selection mechanism and adjusting the
## declarations of various quasigroup operations, but it doesn't seem worth
## the effort as there is unlikely to be much call to consider a group as a
## quasigroup. If it is desirable to do so in a particular case, it should be
## possible to use the elements of the group to form a quasigroup, since they
## will all satisfy IsRightQuotientElement by a TrueMethod installed above.
## InstallTrueMethod(IsRightQuasigroup, IsGroup);
## Left quasigroup ## Left quasigroup
DeclareCategory("IsLeftQuasigroup", DeclareCategory("IsLeftQuasigroup",
IsMagma and IsLeftQuotientElementCollection); IsMagma and IsLeftQuotientElementCollection);
## We forego the following for the reasons outlined above for right quasigroups.
## InstallTrueMethod(IsLeftQuasigroup, IsGroup);
## quasigroup ## quasigroup
DeclareSynonym( "IsQuasigroup", IsRightQuasigroup and IsLeftQuasigroup ); DeclareSynonym( "IsQuasigroup", IsRightQuasigroup and IsLeftQuasigroup );