Semigroup Theory