semigroups