message: Add pattern terms to surface language
  No elaboration rules yet - just syntax
diff: %extend surface.
  + % Patterns
  + pattern : type.
  +
  + name : string -> pattern.
  + record : map string pattern -> pattern.
  + enum : string -> pattern.
  + number : string -> pattern.
  + string : string -> pattern.
  + sequence : list pattern -> pattern.
  +
  +
  % Terms
  term : type.
  % Annotated terms
  ann : term -> term -> term.
  + % Pattern matching
  + match : term -> list (pattern * term) -> term.
  +
  % Functions
  function_type : term -> term -> term. % Also known as: Pi type, Dependent product type
  function_intro : term -> term. % Also known as: Lambda abstraction, anonymous function
  % Enumerations
  enum_type : set string -> term.
  enum_intro : string -> term.
  - enum_elim : map string term -> term.
  % Numeric literals
  number : string -> term.
  % Arrays
  array_type : term -> term -> term.
  - array_intro : list term -> term.
  array_elim : term -> term -> term.
  %end.
  