]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_transformations/tacticAst.ml
rebuilt against ocaml 3.08.3
[helm.git] / helm / ocaml / cic_transformations / tacticAst.ml
index fbb281c49d1467aa2ee753b866f308925111b56b..eae88a14d279ee8852ff13963950f1fd43a69777 100644 (file)
 
 type direction = [ `Left | `Right ]
 type reduction_kind = [ `Reduce | `Simpl | `Whd ]
-type 'term pattern = Pattern of 'term
+(* type 'term pattern = Pattern of 'term *)
+
+  (* everywhere includes goal and hypotheses *)
+type 'term pattern = [ `Goal | `Everywhere ]
 
   (* when an 'ident option is None, the default is to apply the tactic
   to the current goal *)
@@ -33,8 +36,9 @@ type 'term pattern = Pattern of 'term
 type ('term, 'ident) tactic =
   | LocatedTactic of CicAst.location * ('term, 'ident) tactic
 
-  | Absurd
+  | Absurd of 'term
   | Apply of 'term
+  | Auto
   | Assumption
   | Change of 'term * 'term * 'ident option (* what, with what, where *)
   | Change_pattern of 'term pattern * 'term * 'ident option
@@ -49,12 +53,18 @@ type ('term, 'ident) tactic =
   | Exists
   | Fold of reduction_kind * 'term
   | Fourier
+  | Hint
   | Injection of 'ident
   | Intros of int option * 'ident list
   | Left
   | LetIn of 'term * 'ident
 (*   | Named_intros of 'ident list (* joined with Intros above *) *)
-  | Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *)
+(*   | Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *) *)
+  | Reduce of reduction_kind * ('term list * 'term pattern) option
+      (* kind, (what, where)
+      * if second argument is None, reduction is applied to the current goal,
+      * otherwise to each occurrence of terms given in list occuring in term
+      * pattern *)
   | Reflexivity
   | Replace of 'term * 'term (* what, with what *)
   | Replace_pattern of 'term pattern * 'term
@@ -65,17 +75,63 @@ type ('term, 'ident) tactic =
   | Symmetry
   | Transitivity of 'term
 
-type 'tactic tactical =
-  | LocatedTactical of CicAst.location * 'tactic tactical
+type thm_flavour =
+  [ `Definition
+  | `Fact
+  | `Goal
+  | `Lemma
+  | `Remark
+  | `Theorem
+  ]
+
+  (** <name, inductive/coinductive, type, constructor list>
+  * true means inductive, false coinductive *)
+type 'term inductive_type = string * bool * 'term * (string * 'term) list
+
+type search_kind = [ `Locate | `Hint | `Match | `Elim ]
+
+type print_kind = [ `Env | `Coer ]
+
+type 'term command =
+  | Abort
+  | Baseuri of string option (** get/set base uri *)
+  | Basedir of string option (** get/set base dir *)
+  | Check of 'term 
+  | Search_pat of search_kind * string  (* searches with string pattern *)
+  | Search_term of search_kind * 'term  (* searches with term pattern *)
+  | Proof
+  | Qed of string option
+      (** name.
+       * Name is needed when theorem was started without providing a name
+       *)
+  | Quit
+  | Inductive of (string * 'term) list * 'term inductive_type list
+      (** parameters, list of mutual inductive types *)
+  | Theorem of thm_flavour * string option * 'term * 'term option
+      (** flavour, name, type, body
+       * - name is absent when an unnamed theorem is being proved, tipically in
+       *   interactive usage
+       * - body is present when its given along with the command, otherwise it
+       *   will be given in proof editing mode using the tactical language
+       *)
+  | Coercion of 'term
+  | Redo of int option
+  | Undo of int option
+  | Print of print_kind
+
+type ('term, 'ident) tactical =
+  | LocatedTactical of CicAst.location * ('term, 'ident) tactical
+
+  | Tactic of ('term, 'ident) tactic
+  | Command of 'term command
 
   | Fail
-  | Do of int * 'tactic tactical
+  | Do of int * ('term, 'ident) tactical
   | IdTac
-  | Repeat of 'tactic tactical
-  | Seq of 'tactic tactical list (* sequential composition *)
-  | Tactic of 'tactic
-  | Then of 'tactic tactical * 'tactic tactical list
-  | Tries of 'tactic tactical list
+  | Repeat of ('term, 'ident) tactical
+  | Seq of ('term, 'ident) tactical list (* sequential composition *)
+  | Then of ('term, 'ident) tactical * ('term, 'ident) tactical list
+  | Tries of ('term, 'ident) tactical list
       (* try a sequence of tacticals until one succeeds, fail otherwise *)
-  | Try of 'tactic tactical (* try a tactical and mask failures *)
+  | Try of ('term, 'ident) tactical (* try a tactical and mask failures *)