Dear all! I have a list of congruences defining a monoid, eg:
a b = b a b c = c b a c b = b a c Some of these congruences may be redundant, in the above example a c b = a b c = b a c where the first equality is from the second, the second equality from the first given congruence. I would like to compute a minimal (or, smaller, since I don't expect to solve the word problem) list of congruences defining the same monoid. I thought that the following might work, but it just gave me the same list: gap> LoadPackage("Semigroups"); gap> S := FreeMonoid(3); gap> G := Generators(S); gap> a := G[1]; b := G[2]; c := G[3]; gap> C := SemigroupCongruence(S, [[a*b, b*a], [b*c, c*b], [b*a*c, a*c*b]]); gap> GeneratingPairsOfSemigroupCongruence(C); [ [ s1*s2, s2*s1 ], [ s1*s3, s3*s1 ], [ s1*s3*s2, s2*s1*s3 ] ] (I expected to get only the first two pairs) Is there a way to achieve an approximate solution? (Background below) All the best, Martin In case anyone is interested in the background: the http://findstat.org database currently determines a list of identities between maps, see, for example http://www.findstat.org/MapsDatabase/Mp00175 and click on "click to show experimental identities" (beware that these identities are only checked for the a few hundred small elements, automatically - there is not proof). While this is nice, it is sometimes hard to find the interesting identities, because there are so many, and very many are just consequences of the previous ones. My goal is to (automatically!) remove identities which are found to be redundant. _______________________________________________ Forum mailing list Forum@gap-system.org https://mail.gap-system.org/mailman/listinfo/forum