]> matita.cs.unibo.it Git - helm.git/blobdiff - components/acic_content/cicNotationPt.ml
Wildcard patterns implemented in case analysis. The following term is now
[helm.git] / components / acic_content / cicNotationPt.ml
index f6652f63fd592f5d6393e4a4293bf762a807eed8..d9d92ad6fc5b905cbb9ba0600c441fc95a4d7bf3 100644 (file)
@@ -32,7 +32,7 @@ type induction_kind = [ `Inductive | `CoInductive ]
 type sort_kind = [ `Prop | `Set | `Type of CicUniv.universe | `CProp ]
 type fold_kind = [ `Left | `Right ]
 
-type location = Token.flocation
+type location = Stdpp.location
 let fail floc msg =
   let (x, y) = HExtlib.loc_of_floc floc in
   failwith (Printf.sprintf "Error at characters %d - %d: %s" x y msg)
@@ -59,9 +59,11 @@ type literal =
 
 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 *)
@@ -69,13 +71,13 @@ type term =
   | 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 list * capture_variable * term * int) list * term
+  | 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.
@@ -100,11 +102,12 @@ type term =
   | 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 =
+   Pattern of string * href option * term capture_variable list
+ | Wildcard
 
 and box_kind = H | V | HV | HOV
 and box_spec = box_kind * bool * bool (* kind, spacing, indent *)
@@ -163,10 +166,10 @@ type cic_appl_pattern =
   * true means inductive, false coinductive *)
 type 'term inductive_type = string * bool * 'term * (string * 'term) list
 
-type obj =
-  | Inductive of capture_variable 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
@@ -174,7 +177,7 @@ type obj =
        *   will be given in proof editing mode using the tactical language,
        *   unless the flavour is an Axiom
        *)
-  | Record of capture_variable list * string * term * (string * term * bool * int) list
+  | Record of 'term capture_variable list * string * 'term * (string * 'term * bool * int) list
       (** left parameters, name, type, fields *)
 
 (** {2 Standard precedences} *)