In this paper we describe two different algorithms for computing the congruences of a finite semigroup or monoid, and compare these to existing algorithms and implementations. The first algorithm is a version of Sims' low index subgroup algorithm for finding the left or right congruences of a monoid. The second algorithm involves determining the distinct principal congruences, and then finding all of their possible joins. Variations of this algorithm have been suggested in numerous contexts by numerous authors. We show how to utilise the theory of relative Green's relations, and a version of Schreier's Lemma for monoids, to reduce the number of principal congruences that must be generated as the first step of this approach. Both of the algorithms described in this paper are implemented in the GAP package Semigroups, and the first algorithm is available in the C++ library libsemigroups and in its python bindings libsemigroups_pybind11.
翻译:本文描述了计算有限半群或幺半群同余的两种不同算法,并将它们与现有算法及实现进行了比较。第一种算法是Sims低指数子群算法的变体,用于寻找幺半群的左同余或右同余。第二种算法涉及确定不同的主同余,然后找出它们所有可能的并运算。众多学者已在多种研究背景下提出过该算法的变体。我们展示了如何利用相对Green关系理论以及幺半群的Schreier引理变体,来减少作为此方法第一步所需生成的主同余数量。本文描述的两种算法均已实现在GAP包Semigroups中,其中第一种算法已收录于C++库libsemigroups及其Python绑定库libsemigroups_pybind11中。