-
Notifications
You must be signed in to change notification settings - Fork 161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FreeMonoid does not always have IsFreeMonoid #673
Comments
I think maybe a useful first step is trying to disentangle the mess that is caused by filter names IsGroup, IsMonoid, and IsSemigroup. I will try to find the time to do so. |
Sounds good! I don't think these things are particularly entangled, I think everything makes sense except that
should be removed from the library. |
This is resolved. |
When we do:
the returned object is the free group with 0 generators, and it does not satisfy
IsFreeMonoid
.What is worse is that if we take a quotient of
F
by the (necessarily empty) list of relations the resulting object is not inIsFpMonoid
and so none of the standard attributes for an fp-monoid, likeRelationsOfFpMonoid
and so on, can be applied to this object. This is bad because it requires a special case in all code using quotients of free monoids that handles this (trivial) case.It would be possible to remove the special case:
in
FreeMonoid
(lines 221 to 230 in lib/monofree.gi) and do the same thing as is done for free groups instead:But unfortunately, every trivial monoid belongs to the category
IsGroup
because of:in line 135 of magma.gd. This is another annoying special case: the only time a monoid (of transformations, for example) that is created using the
Semigroup
orMonoid
functions belongs in the categoryIsGroup
in GAP is when it is trivial. If it is non-trivial, even if it defines a group mathematically, it does not belong to the categoryIsMagmaWithInverses
. It would be better if this was consistent, and that a transformation monoid, for example, created using the functionMonoid
never belongs toIsGroup
. This applies to several other types of semigroups too, but not, for example, to permutations (i.e.Monoid((1,2,3))
returns a group).Supposing that we made the change so that the free monoid of rank 0 is created using
(where
F
is theFreeMonoidElementsFamily
) because the rank of the filterIsFreeGroup
is (much) higher than that ofIsFreeMonoid
the methods for free groups are still selected even though our (new) free monoid of rank 0 is no longer a proper free group (i.e. it does not have the necessary data structuresof a free group in GAP).
I'm not sure how to resolve this.
The text was updated successfully, but these errors were encountered: