type case_indtype = string * href option
+type 'term capture_variable = 'term * 'term option
+
(** To be increased each time the term type below changes, used for "safe"
* marshalling *)
-let magic = 1
+let magic = 2
type term =
(* CIC AST *)
| AttributedTerm of term_attribute * term
| Appl of term list
- | Binder of binder_kind * capture_variable * term (* kind, name, body *)
+ | Binder of binder_kind * term capture_variable * term (* kind, name, body *)
| Case of term * case_indtype option * term option *
(case_pattern * term) list
(* what to match, inductive type, out type, <pattern,action> list *)
| Cast of term * term
- | 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 *)
+ | LetIn of term capture_variable * term * term (* name, body, where *)
+ | LetRec of induction_kind * (term capture_variable list * term capture_variable * term * int) list * term
+ (* (params, name, body, decreasing arg) list, where *)
| Ident of string * subst list option
(* literal, substitutions.
* Some [] -> user has given an empty explicit substitution list
| Variable of pattern_variable
(* name, type. First component must be Ident or Variable (FreshVar _) *)
-and capture_variable = term * term option
and meta_subst = term option
and subst = string * term
-and case_pattern = string * href option * capture_variable list
+and case_pattern = string * href option * term capture_variable list
and box_kind = H | V | HV | HOV
and box_spec = box_kind * bool * bool (* kind, spacing, indent *)
* true means inductive, false coinductive *)
type 'term inductive_type = string * bool * 'term * (string * 'term) list
-type obj =
- | Inductive of (string * term) list * term inductive_type list
+type 'term obj =
+ | Inductive of 'term capture_variable list * 'term inductive_type list
(** parameters, list of loc * mutual inductive types *)
- | Theorem of Cic.object_flavour * string * term * term option
+ | Theorem of Cic.object_flavour * string * 'term * 'term option
(** flavour, name, type, body
* - name is absent when an unnamed theorem is being proved, tipically in
* interactive usage
* will be given in proof editing mode using the tactical language,
* unless the flavour is an Axiom
*)
- | Record of (string * term) list * string * term * (string * term * bool) list
+ | Record of 'term capture_variable list * string * 'term * (string * 'term * bool * int) list
(** left parameters, name, type, fields *)
(** {2 Standard precedences} *)