The following is a presentation for the Abacus-Jones monoid:
AbacusJonesMonoid := function(n, d)
local fm, x, rels, id, ts, os, t, i, j, diff, o;
fm := FreeMonoid(2 * n - 1);
x := GeneratorsOfMonoid(fm);
id := Identity(fm);
rels := [];
ts := x{[1 .. n - 1]};
os := x{[n .. 2 * n - 1]};
for t in ts do
Add(rels, [t * t, t]);
od;
for i in [1 .. n - 1] do
for j in [1 .. n - 1] do
diff := AbsoluteValue(i - j);
if diff > 1 then
Add(rels, [ts[i] * ts[j], ts[j] * ts[i]]);
elif diff = 1 then
Add(rels, [ts[i] * ts[j] * ts[i], ts[i]]);
fi;
od;
od;
for o in os do
Add(rels, [o ^ d, id]);
od;
for i in [1 .. n - 1] do
for j in [i + 1 .. n] do
Add(rels, [os[i] * os[j], os[j] * os[i]]);
od;
od;
for i in [1 .. n - 1] do
Add(rels, [ts[i] * os[i], ts[i] * os[i + 1]]);
Add(rels, [os[i] * ts[i], os[i + 1] * ts[i]]);
od;
for i in [1 .. n] do
for j in [1 .. n - 1] do
if i <> j and i <> j + 1 then
Add(rels, [os[i] * ts[j], ts[j] * os[i]]);
fi;
od;
od;
for i in [1 .. n - 1] do
for j in [1 .. d - 1] do
Add(rels, [ts[i] * os[i] ^ j * ts[i], ts[i]]);
od;
od;
return fm / rels;
end;
When I construct AbacusJonesMonoid(5, 4) and try to enumerate its elements, GapFroidurePin is used rather than LibsemigroupsFroidurePin. This probably relates to our filters giving the libsemigroups method a priority that is too low.
The following is a presentation for the Abacus-Jones monoid:
When I construct
AbacusJonesMonoid(5, 4)and try to enumerate its elements,GapFroidurePinis used rather thanLibsemigroupsFroidurePin. This probably relates to our filters giving the libsemigroups method a priority that is too low.