The definition of the abelian group concludes our discussion of abstract algebraic structures; that is, the structures solely defined by the laws they satisfy.
We looked at three such structures: semigroup, monoid, and group. The semigroup is defined by a binary operation that is closed and associative. The monoid adds to this an identity element so that the operation applied to it and another argument returns the second argument unchanged. The group extends monoids with an invertibility law, stating that for each element there should be another element so that the operation applied on them returns an identity element. If the operation defined by the group is commutative, the group is called abelian.
We provided an example implementation for all these algebraic equations, along with ScalaCheck properties for verifying that our implementations are sane.
Needless to say...