more writeup on Semigroup