| Injection of 'ident
| Intros of int option
| Left
- | LetIn of 'term * 'ident
+ | LetIn of 'term * 'ident (* TODO clashes with term below *)
| Named_intros of 'ident list
| Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *)
| Reflexivity
type induction_kind = [ `Inductive | `CoInductive ]
type sort_kind = [ `Prop | `Set | `Type | `CProp ]
-type case_pattern = string list
-
type term =
| LocatedTerm of location * term
| Appl of term list
- | Appl_symbol of string * int * term list (* literal, args, instance *)
- | Binder of binder_kind * Cic.name * term option * term
- (* kind, name, type, body *)
+ | Appl_symbol of string * int * term list (* literal, instance, args *)
+ | Binder of binder_kind * capture_variable * term (* kind, name, body *)
| Case of term * string * term option * (case_pattern * term) list
(* what to match, inductive type, out type, <pattern,action> list *)
- | LetIn of string * term * term (* name, body, where *)
- | LetRec of induction_kind * (string * term * term option * int) list * term
- (* (name, body, type, decreasing argument) list, where *)
+ | LetIn of capture_variable * term * term (* name, body, where *)
+ | LetRec of induction_kind * (capture_variable * term * int) list * term
+ (* (name, body, decreasing argument) list, where *)
| Ident of string * subst list (* literal, substitutions *)
| Meta of int * meta_subst list
| Num of string * int (* literal, instance *)
| Sort of sort_kind
+and capture_variable = Cic.name * term option (* name, type *)
and meta_subst = term option
and subst = string * term
+and case_pattern = string * capture_variable list
(*
type cexpr =