Mathematical concepts in programming language semantics