In gap-system/gap#6097, I am working on disallowing named generators to have the same name in the free object constructors, such as FreeGroup, FreeSemigroup, FreeMonoid, FreeInverseSemigroup, etc. It just doesn't make sense.
On this theme, the Semigroups package has the constructor FreeBand, which also currently allows named generators to have the same name. Unless anyone vigorously objects, I'll change the behaviour of FreeBand in the same way that I'm changing it for the other constructors.
This is how it looks:
gap> S := FreeBand("x", "x");
<free band on the generators [ x, x ]>
gap> gens := GeneratorsOfSemigroup(S);
[ x, x ]
gap> gens[1]; gens[2];
x
x
gap> gens[1] = gens[2];
false
gap> gens[1] in S and gens[2] in S and gens[1] <> gens[2];
true
gap> T := FreeBand(2);
<free band on the generators [ x1, x2 ]>
gap> iso := IsomorphismSemigroups(T, S);;
gap> T.1 ^ iso;
x
gap> T.2 ^ iso;
x
It's just strange.
Also FreeInverseSemigroup lets you specify duplicate generators, and it doesn't throw any of them away, but it also considers generators with the same name to be equal, which is also strange!
gap> U := FreeInverseSemigroup("a", "b", "c", "b");
<free inverse semigroup on the generators [ a, b, c, b ]>
gap> U.2; U.4;
b
b
gap> U.2 = U.4;
true
gap> GeneratorsOfInverseSemigroup(U);
[ a, b, c, b ]
In gap-system/gap#6097, I am working on disallowing named generators to have the same name in the free object constructors, such as
FreeGroup,FreeSemigroup,FreeMonoid,FreeInverseSemigroup, etc. It just doesn't make sense.On this theme, the Semigroups package has the constructor
FreeBand, which also currently allows named generators to have the same name. Unless anyone vigorously objects, I'll change the behaviour ofFreeBandin the same way that I'm changing it for the other constructors.This is how it looks:
It's just strange.
Also
FreeInverseSemigrouplets you specify duplicate generators, and it doesn't throw any of them away, but it also considers generators with the same name to be equal, which is also strange!