]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_transformations/tacticAst.ml
merged changes from the svn fork by me and Enrico
[helm.git] / helm / ocaml / cic_transformations / tacticAst.ml
index eae88a14d279ee8852ff13963950f1fd43a69777..809c57dfeec551a0da04f9f9d468341032512007 100644 (file)
@@ -33,52 +33,52 @@ type 'term pattern = [ `Goal | `Everywhere ]
   (* when an 'ident option is None, the default is to apply the tactic
   to the current goal *)
 
-type ('term, 'ident) tactic =
-  | LocatedTactic of CicAst.location * ('term, 'ident) tactic
+type loc = CicAst.location
 
-  | 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
+type ('term, 'ident) tactic =
+  | Absurd of loc * 'term
+  | Apply of loc * 'term
+  | Auto of loc
+  | Assumption of loc
+  | Change of loc * 'term * 'term * 'ident option (* what, with what, where *)
+  | Change_pattern of loc * 'term pattern * 'term * 'ident option
       (* what, with what, where *)
-  | Contradiction
-  | Cut of 'term
-  | Decompose of 'ident * 'ident list (* where, which principles *)
-  | Discriminate of 'ident
-  | Elim of 'term * 'term option (* what to elim, which principle to use *)
-  | ElimType of 'term
-  | Exact of 'term
-  | 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 list * 'term pattern) option
+  | Contradiction of loc
+  | Cut of loc * 'term
+  | Decompose of loc * 'ident * 'ident list (* where, which principles *)
+  | Discriminate of loc * 'ident
+  | Elim of loc * 'term * 'term option (* what to elim, which principle to use *)
+  | ElimType of loc * 'term
+  | Exact of loc * 'term
+  | Exists of loc
+  | Fold of loc * reduction_kind * 'term
+  | Fourier of loc
+  | Goal of loc * int (* change current goal, argument is goal number 1-based *)
+  | Hint of loc
+  | Injection of loc * 'ident
+  | Intros of loc * int option * 'ident list
+  | Left of loc
+  | LetIn of loc * 'term * 'ident
+(*   | Named_intros of loc * 'ident list (* joined with Intros above *) *)
+(*   | Reduce of loc * reduction_kind * 'term pattern * 'ident option (* what, where *) *)
+  | Reduce of loc * 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
+      * otherwise to each occurrence of loc * terms given in list occuring in term
       * pattern *)
-  | Reflexivity
-  | Replace of 'term * 'term (* what, with what *)
-  | Replace_pattern of 'term pattern * 'term
-  | Rewrite of direction * 'term * 'ident option
-  | Right
-  | Ring
-  | Split
-  | Symmetry
-  | Transitivity of 'term
+  | Reflexivity of loc
+  | Replace of loc * 'term * 'term (* what, with what *)
+  | Replace_pattern of loc * 'term pattern * 'term
+  | Rewrite of loc * direction * 'term * 'ident option
+  | Right of loc
+  | Ring of loc
+  | Split of loc
+  | Symmetry of loc
+  | Transitivity of loc * 'term
 
 type thm_flavour =
   [ `Definition
   | `Fact
-  | `Goal
   | `Lemma
   | `Remark
   | `Theorem
@@ -92,46 +92,57 @@ type search_kind = [ `Locate | `Hint | `Match | `Elim ]
 
 type print_kind = [ `Env | `Coer ]
 
+type 'term macro = 
+  | Abort of loc
+  | Print of loc * string
+  | Check of loc * 'term 
+  | Quit of loc
+  | Redo of loc * int option
+  | Undo of loc * int option
+(*   | Print of loc * print_kind *)
+  | Search_pat of loc * search_kind * string  (* searches with string pattern *)
+  | Search_term of loc * search_kind * 'term  (* searches with term pattern *)
+
+type alias_spec =
+  | Ident_alias of string * string        (* identifier, uri *)
+  | Symbol_alias of string * int * string (* name, instance no, description *)
+  | Number_alias of int * string          (* instance no, description *)
+
 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
+  | Set of loc * string * string
+  | Qed of loc
       (** 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
+  | Inductive of loc * (string * 'term) list * 'term inductive_type list
+      (** parameters, list of loc * mutual inductive types *)
+  | Theorem of loc * 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
+  | Coercion of loc * 'term
+  | Alias of loc * alias_spec
 
 type ('term, 'ident) tactical =
-  | LocatedTactical of CicAst.location * ('term, 'ident) tactical
-
-  | Tactic of ('term, 'ident) tactic
-  | Command of 'term command
+  | Tactic of loc * ('term, 'ident) tactic
+  | Fail of loc
+  | Do of loc * int * ('term, 'ident) tactical
+  | IdTac of loc
+  | Repeat of loc * ('term, 'ident) tactical
+  | Seq of loc * ('term, 'ident) tactical list (* sequential composition *)
+  | Then of loc * ('term, 'ident) tactical * ('term, 'ident) tactical list
+  | Tries of loc * ('term, 'ident) tactical list
+      (* try a sequence of loc * tacticals until one succeeds, fail otherwise *)
+  | Try of loc * ('term, 'ident) tactical (* try a tactical and mask failures *)
 
-  | Fail
-  | Do of int * ('term, 'ident) tactical
-  | IdTac
-  | 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 ('term, 'ident) tactical (* try a tactical and mask failures *)
+type ('term, 'ident) statement =
+  | Command of loc * 'term command
+  | Macro of loc * 'term macro 
+      (* Macro are substantially queries, but since we are not the kind of
+       * peolpe that like to push "start" to turn off the computer 
+       * we added this command *)
+  | Tactical of loc * ('term, 'ident) tactical