Semantics of Programming Language
David Walker

  Properties of Typing
    -- Inversion (Proof by induction on the typing rules)
  
    -- Weakending
  
    -- Substitution

Dynamics Semantics
  -- Denotional
  -- Axiomatic
  -- Operational

  Judgment e -> e' (transition)
  Values, Closed values
  Primitive Instructions (e.g. conditional branch, addition, etc)
  Search Rules (to specify the next instruction, evaluation order)
    - left-to-right
    - (right-to-left)
  Properties of Evaluation
    -- Values Irreducible
    -- Determinacy
    -- Determinacy of values
    -- Safety (no Stuck States are reachable from well-typed program)

  Context-based Semantics
    To avoid multiple search rules in small-step semantics
  
    Two parts, Expression, and Redex (the left hand side of rule)

Type Safety
  Strongly typed language always make valid predictions. and weakly
  typed (c, c++) is wrong part of the time.

  - preservation of well-typed property
  - progress
  (can be combined to prove type safety)

  Canonical Form Lemma

