In mathematics, a semigroup is an algebraic structure consisting
of a set together with an associative binary operation. A semigroup
generalizes a monoid in that there might not exist an identity
element. It also (originally) generalized a group (a monoid with
all inverses) to a type where every element did not have to have
an inverse, thus the name semigroup.
