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.