Semigroup theory