]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/components/grafite/grafiteAst.ml
Add last declarative tactics, modify rewriting tactics
[helm.git] / matita / components / grafite / grafiteAst.ml
index 32a29c2158a98e8f1dda73f10191a6a6f6fe3d54..c4ec503c797a2418b66ea0dcfc8c39359f747b80 100644 (file)
@@ -29,34 +29,38 @@ type direction = [ `LeftToRight | `RightToLeft ]
 
 type loc = Stdpp.location
 
+type nterm = NotationPt.term
+
 type npattern = 
- NotationPt.term option * (string * NotationPt.term) list * NotationPt.term option
+ nterm option * (string * nterm) list * nterm option
+
+type auto_params = nterm list option * (string*string) list
 
-type auto_params = NotationPt.term list option * (string*string) list
+type just = [`Term of nterm | `Auto of auto_params]
 
 type ntactic =
-   | NApply of loc * NotationPt.term
-   | NSmartApply of loc * NotationPt.term
-   | NAssert of loc * ((string * [`Decl of NotationPt.term | `Def of NotationPt.term * NotationPt.term]) list * NotationPt.term) list
-   | NCases of loc * NotationPt.term * npattern  
+   | NApply of loc * nterm
+   | NSmartApply of loc * nterm
+   | NAssert of loc * ((string * [`Decl of nterm | `Def of nterm * nterm]) list * nterm) list
+   | NCases of loc * nterm * npattern  
    | NCase1 of loc * string
-   | NChange of loc * npattern * NotationPt.term
+   | NChange of loc * npattern * nterm
    | NClear of loc * string list
-   | NConstructor of loc * int option * NotationPt.term list
-   | NCut of loc * NotationPt.term
-(* | NDiscriminate of loc * NotationPt.term
-   | NSubst of loc * NotationPt.term *)
+   | NConstructor of loc * int option * nterm list
+   | NCut of loc * nterm
+(* | NDiscriminate of loc * nterm
+   | NSubst of loc * nterm *)
    | NDestruct of loc * string list option * string list
-   | NElim of loc * NotationPt.term * npattern  
+   | NElim of loc * nterm * npattern  
    | NGeneralize of loc * npattern
    | NId of loc
    | NIntro of loc * string
    | NIntros of loc * string list
-   | NInversion of loc * NotationPt.term * npattern  
-   | NLApply of loc * NotationPt.term
-   | NLetIn of loc * npattern * NotationPt.term * string
+   | NInversion of loc * nterm * npattern  
+   | NLApply of loc * nterm
+   | NLetIn of loc * npattern * nterm * string
    | NReduce of loc * [ `Normalize of bool | `Whd of bool ] * npattern
-   | NRewrite of loc * direction * NotationPt.term * npattern
+   | NRewrite of loc * direction * nterm * npattern
    | NAuto of loc * auto_params
    | NDot of loc
    | NSemicolon of loc
@@ -73,16 +77,47 @@ type ntactic =
    | NAssumption of loc
    | NRepeat of loc * ntactic
    | NBlock of loc * ntactic list
+   (* Declarative langauge *)
+   (* Not the best idea to use a string directly, an abstract type for identifiers would be better *)
+   | Assume of loc * string * nterm * nterm option (* loc, identifier, type, eqty *)
+   | Suppose of loc * nterm *string * nterm option (* loc, assumption, identifier, eqass *)
+   | By_just_we_proved of loc * just * nterm * string option * nterm option (* loc,
+   justification, conclusion, identifier, eqconcl *)
+   | We_need_to_prove of loc * nterm * string option * nterm option (* loc, newconclusion,
+   identifier, equivnewcon *)
+   | Bydone of loc * just
+   | ExistsElim of loc * just * string * nterm * nterm * string
+   | AndElim of loc * just * nterm * string * nterm * string
+                (*
+   | RewritingStep of
+      loc * (string option * nterm) option * nterm *
+       [ `Term of nterm | `Auto of auto_params
+       | `Proof | `SolveWith of nterm ] *
+       bool (* last step*)
+                   *)
+   | RewritingStep of
+      loc * nterm * [ `Term of nterm | `Auto of auto_params | `Proof | `SolveWith of nterm ] * bool (* last step*)
+   | Obtain of
+      loc * string * nterm
+   | Conclude of
+      loc * nterm
+   | Thesisbecomes of loc * nterm * nterm option
+   | We_proceed_by_induction_on of loc * nterm * nterm
+   | We_proceed_by_cases_on of loc * nterm * nterm
+   | Byinduction of loc * nterm * string
+   | Case of loc * string * (string * nterm) list 
+    (* This is a debug tactic to print the stack to stdout, can be safely removed *)
+   | PrintStack of loc 
 
 type nmacro =
-  | NCheck of loc * NotationPt.term
+  | NCheck of loc * nterm
   | Screenshot of loc * string
   | NAutoInteractive of loc * auto_params
   | NIntroGuess of loc
 
 (** To be increased each time the command type below changes, used for "safe"
  * marshalling *)
-let magic = 35
+let magic = 37
 
 (* composed magic: term + command magics. No need to change this value *)
 let magic = magic + 10000 * NotationPt.magic
@@ -92,25 +127,24 @@ type alias_spec =
   | Symbol_alias of string * int * string (* name, instance no, description *)
   | Number_alias of int * string          (* instance no, description *)
 
-type inclusion_mode = WithPreferences | WithoutPreferences (* aka aliases *)
+type inclusion_mode = WithPreferences | WithoutPreferences | OnlyPreferences (* aka aliases *)
 
 type command =
   | Include of loc * inclusion_mode * string (* _,buri,_,path *)
-  | UnificationHint of loc * NotationPt.term * int (* term, precedence *)
-  | NObj of loc * NotationPt.term NotationPt.obj
-  | NDiscriminator of loc * NotationPt.term
-  | NInverter of loc * string * NotationPt.term * bool list option * NotationPt.term option
-  | NUnivConstraint of loc * NUri.uri * NUri.uri
+  | UnificationHint of loc * nterm * int (* term, precedence *)
+  | NObj of loc * nterm NotationPt.obj * bool
+  | NDiscriminator of loc * nterm
+  | NInverter of loc * string * nterm * bool list option * nterm option
+  | NUnivConstraint of loc * bool * NUri.uri * NUri.uri
   | NCopy of loc * string * NUri.uri * (NUri.uri * NUri.uri) list
-  | NCoercion of loc * string *
-      NotationPt.term * NotationPt.term *
-      (string * NotationPt.term) * NotationPt.term
-  | NQed of loc
+  | NCoercion of loc * string * bool * 
+      (nterm * nterm * (string * nterm) * nterm) option
+  | NQed of loc * bool
   (* ex lexicon commands *)
   | Alias of loc * alias_spec
       (** parameters, name, type, fields *) 
-  | Notation of loc * direction option * NotationPt.term * Gramext.g_assoc *
-      int * NotationPt.term
+  | Notation of loc * direction option * nterm * Gramext.g_assoc *
+      int * nterm
       (* direction, l1 pattern, associativity, precedence, l2 pattern *)
   | Interpretation of loc *
       string * (string * NotationPt.argument_pattern list) *