]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/grafite_parser/grafiteParser.ml
Implementation of ndestruct tactic (including destruction of constructor forms
[helm.git] / helm / software / components / grafite_parser / grafiteParser.ml
index bf34fc283d4790c2ffc50244d0828faaacd5bd83..2914a8906ae47e1670d9b57a89c0d3db1ef7a002 100644 (file)
@@ -95,7 +95,7 @@ let mk_rec_corec ind_kind defs loc =
    else
     `MutualDefinition
   in
-   (loc, N.Theorem(flavour, name, ty, Some (N.LetRec (ind_kind, defs, body))))
+   (loc, N.Theorem(flavour, name, ty, Some (N.LetRec (ind_kind, defs, body)), `Regular))
 
 let nmk_rec_corec ind_kind defs loc = 
  let loc,t = mk_rec_corec ind_kind defs loc in
@@ -257,6 +257,9 @@ EXTEND
         G.NConstructor (loc,
            (match num with None -> None | Some x -> Some (int_of_string x)),l)
     | IDENT "ncut"; t = tactic_term -> G.NCut (loc, t)
+(*  | IDENT "ndiscriminate"; t = tactic_term -> G.NDiscriminate (loc, t)
+    | IDENT "nsubst"; t = tactic_term -> G.NSubst (loc, t) *)
+    | IDENT "ndestruct" -> G.NDestruct loc
     | IDENT "nelim"; what = tactic_term ; where = pattern_spec ->
         G.NElim (loc, what, where)
     | IDENT "ngeneralize"; p=pattern_spec ->
@@ -566,6 +569,7 @@ EXTEND
       | SYMBOL "|" -> G.NShift loc
       | i = LIST1 int SEP SYMBOL ","; SYMBOL ":" -> G.NPos (loc, i)
       | SYMBOL "*"; SYMBOL ":" -> G.NWildcard loc
+      | name = IDENT; SYMBOL ":" -> G.NPosbyname (loc, name)
       | SYMBOL "]" -> G.NMerge loc
       | SYMBOL ";" -> G.NSemicolon loc
       | SYMBOL "." -> G.NDot loc
@@ -660,6 +664,7 @@ EXTEND
 
     nmacro: [
       [ [ IDENT "ncheck" ]; t = term -> G.NCheck (loc,t)
+      | [ IDENT "screenshot"]; fname = QSTRING -> G.Screenshot (loc, fname)
       ]
     ];
     
@@ -796,12 +801,17 @@ EXTEND
       IDENT "nqed" -> G.NQed loc
     | nflavour = ntheorem_flavour; name = IDENT; SYMBOL ":"; typ = term;
       body = OPT [ SYMBOL <:unicode<def>> (* ≝ *); body = term -> body ] ->
-        G.NObj (loc, N.Theorem (nflavour, name, typ, body))
+        G.NObj (loc, N.Theorem (nflavour, name, typ, body,`Regular))
     | nflavour = ntheorem_flavour; name = IDENT; SYMBOL <:unicode<def>> (* ≝ *);
       body = term ->
-        G.NObj (loc, N.Theorem (nflavour, name, N.Implicit `JustOne, Some body))
+        G.NObj (loc, N.Theorem (nflavour, name, N.Implicit `JustOne, Some body,`Regular))
     | IDENT "naxiom"; name = IDENT; SYMBOL ":"; typ = term ->
-        G.NObj (loc, N.Theorem (`Axiom, name, typ, None))
+        G.NObj (loc, N.Theorem (`Axiom, name, typ, None, `Regular))
+    | IDENT "ndiscriminator" ; indty = tactic_term -> G.NDiscriminator (loc,indty)
+    | IDENT "ninverter"; name = IDENT; IDENT "for" ; indty = tactic_term ;
+      paramspec = OPT inverter_param_list ; 
+      outsort = OPT [ SYMBOL ":" ; outsort = term -> outsort ] -> 
+        G.NInverter (loc,name,indty,paramspec,outsort)
     | NLETCOREC ; defs = let_defs -> 
         nmk_rec_corec `CoInductive defs loc
     | NLETREC ; defs = let_defs -> 
@@ -851,16 +861,16 @@ EXTEND
       typ = term; SYMBOL <:unicode<def>> ; newname = IDENT ->
         G.Obj (loc, 
           N.Theorem 
-            (`Variant,name,typ,Some (N.Ident (newname, None))))
+            (`Variant,name,typ,Some (N.Ident (newname, None)), `Regular))
     | flavour = theorem_flavour; name = IDENT; SYMBOL ":"; typ = term;
       body = OPT [ SYMBOL <:unicode<def>> (* ≝ *); body = term -> body ] ->
-        G.Obj (loc, N.Theorem (flavour, name, typ, body))
+        G.Obj (loc, N.Theorem (flavour, name, typ, body,`Regular))
     | flavour = theorem_flavour; name = IDENT; SYMBOL <:unicode<def>> (* ≝ *);
       body = term ->
         G.Obj (loc,
-          N.Theorem (flavour, name, N.Implicit `JustOne, Some body))
+          N.Theorem (flavour, name, N.Implicit `JustOne, Some body,`Regular))
     | IDENT "axiom"; name = IDENT; SYMBOL ":"; typ = term ->
-        G.Obj (loc, N.Theorem (`Axiom, name, typ, None))
+        G.Obj (loc, N.Theorem (`Axiom, name, typ, None, `Regular))
     | LETCOREC ; defs = let_defs -> 
         mk_rec_corec `CoInductive defs loc
     | LETREC ; defs = let_defs ->