]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/grafite_parser/grafiteDisambiguate.ml
- Procedural: moved in a directory on its own
[helm.git] / helm / software / components / grafite_parser / grafiteDisambiguate.ml
index 2e7f1224f795a99b46729613cb5ca816a78161cc..7d110e2df6a5e4844d894d4ab96f2afb5ee92691 100644 (file)
@@ -123,13 +123,16 @@ let disambiguate_tactic
     | GrafiteAst.Apply (loc, term) ->
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Apply (loc, cic)
-    | GrafiteAst.ApplyS (loc, term) ->
+    | GrafiteAst.ApplyS (loc, term, params) ->
         let metasenv,cic = disambiguate_term context metasenv term in
-        metasenv,GrafiteAst.ApplyS (loc, cic)
+        metasenv,GrafiteAst.ApplyS (loc, cic, params)
     | GrafiteAst.Assumption loc ->
         metasenv,GrafiteAst.Assumption loc
     | GrafiteAst.Auto (loc,params) ->
         metasenv,GrafiteAst.Auto (loc,params)
+    | GrafiteAst.Cases (loc, what, idents) ->
+        let metasenv,what = disambiguate_term context metasenv what in
+        metasenv,GrafiteAst.Cases (loc, what, idents)
     | GrafiteAst.Change (loc, pattern, with_what) -> 
         let with_what = disambiguate_lazy_term with_what in
         let pattern = disambiguate_pattern pattern in
@@ -157,7 +160,7 @@ let disambiguate_tactic
                     metasenv,(GrafiteAst.Type (uri, tyno) :: types)
                 | _ ->
                   raise (GrafiteDisambiguator.DisambiguationError
-                   (0,[[None,lazy "Decompose works only on inductive types"]])))
+                   (0,[[[],[],None,lazy "Decompose works only on inductive types",true]])))
         in
         let metasenv,types =
          List.fold_left disambiguate (metasenv,[]) types
@@ -165,9 +168,9 @@ let disambiguate_tactic
          metasenv,GrafiteAst.Decompose (loc, types, what, names)
     | GrafiteAst.Demodulate loc ->
         metasenv,GrafiteAst.Demodulate loc
-    | GrafiteAst.Discriminate (loc,term) ->
+    | GrafiteAst.Destruct (loc,term) ->
         let metasenv,term = disambiguate_term context metasenv term in
-        metasenv,GrafiteAst.Discriminate(loc,term)
+        metasenv,GrafiteAst.Destruct(loc,term)
     | GrafiteAst.Exact (loc, term) -> 
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Exact (loc, cic)
@@ -205,9 +208,6 @@ let disambiguate_tactic
         metasenv,GrafiteAst.Goal (loc, g)
     | GrafiteAst.IdTac loc ->
         metasenv,GrafiteAst.IdTac loc
-    | GrafiteAst.Injection (loc, term) ->
-        let metasenv,term = disambiguate_term context metasenv term in
-        metasenv,GrafiteAst.Injection (loc,term)
     | GrafiteAst.Intros (loc, num, names) ->
         metasenv,GrafiteAst.Intros (loc, num, names)
     | GrafiteAst.Inversion (loc, term) ->
@@ -236,16 +236,18 @@ let disambiguate_tactic
         let pattern = disambiguate_pattern pattern in
         let with_what = disambiguate_lazy_term with_what in
         metasenv,GrafiteAst.Replace (loc, pattern, with_what)
-    | GrafiteAst.Rewrite (loc, dir, t, pattern) ->
+    | GrafiteAst.Rewrite (loc, dir, t, pattern, names) ->
         let metasenv,term = disambiguate_term context metasenv t in
         let pattern = disambiguate_pattern pattern in
-        metasenv,GrafiteAst.Rewrite (loc, dir, term, pattern)
+        metasenv,GrafiteAst.Rewrite (loc, dir, term, pattern, names)
     | GrafiteAst.Right loc ->
         metasenv,GrafiteAst.Right loc
     | GrafiteAst.Ring loc ->
         metasenv,GrafiteAst.Ring loc
     | GrafiteAst.Split loc ->
         metasenv,GrafiteAst.Split loc
+    | GrafiteAst.Subst loc ->
+        metasenv, GrafiteAst.Subst loc
     | GrafiteAst.Symmetry loc ->
         metasenv,GrafiteAst.Symmetry loc
     | GrafiteAst.Transitivity (loc, term) -> 
@@ -296,6 +298,10 @@ let disambiguate_tactic
                    let metasenv,t = disambiguate_term context metasenv t in
                     metasenv,Some t in
        metasenv,GrafiteAst.By_term_we_proved (loc,cic,cic',id,cic'')
+    | GrafiteAst.We_proceed_by_cases_on (loc, term, term') ->
+        let metasenv,cic = disambiguate_term context metasenv term in
+       let metasenv,cic' = disambiguate_term context metasenv term' in
+       metasenv,GrafiteAst.We_proceed_by_cases_on (loc, cic, cic')
     | GrafiteAst.We_proceed_by_induction_on (loc, term, term') ->
         let metasenv,cic = disambiguate_term context metasenv term in
        let metasenv,cic' = disambiguate_term context metasenv term' in
@@ -306,20 +312,16 @@ let disambiguate_tactic
    | GrafiteAst.Thesisbecomes (loc, term) ->
         let metasenv,cic = disambiguate_term context metasenv term in
        metasenv,GrafiteAst.Thesisbecomes (loc, cic)
-   | GrafiteAst.Let1 (loc, id, term, term1) ->
+   | GrafiteAst.ExistsElim (loc, term, id1, term1, id2, term2) ->
         let metasenv,cic = disambiguate_term context metasenv term in
-       let metasenv,cic'= disambiguate_term context metasenv term1 in
-       metasenv,GrafiteAst.Let1(loc, id, cic, cic')
-   | GrafiteAst.Bywehave (loc, term, term1, id, term2, id1) ->
-        let metasenv,cic = 
-           match term with 
-            None -> metasenv,None
-          | Some t ->
-                let metasenv,t = disambiguate_term context metasenv t in
-                  metasenv,Some t in
+        let metasenv,cic' = disambiguate_term context metasenv term1 in
+       let metasenv,cic''= disambiguate_term context metasenv term2 in
+       metasenv,GrafiteAst.ExistsElim(loc, cic, id1, cic', id2, cic'')
+   | GrafiteAst.AndElim (loc, term, id, term1, id1, term2) ->
+       let metasenv,cic = disambiguate_term context metasenv term in
        let metasenv,cic'= disambiguate_term context metasenv term1 in
        let metasenv,cic''= disambiguate_term context metasenv term2 in
-       metasenv,GrafiteAst.Bywehave(loc, cic, cic', id, cic'', id1)   
+       metasenv,GrafiteAst.AndElim(loc, cic, id, cic', id1, cic'')   
    | GrafiteAst.Case (loc, id, params) ->
         let metasenv,params' =
         List.fold_right
@@ -329,21 +331,21 @@ let disambiguate_tactic
          ) params (metasenv,[])
        in
        metasenv,GrafiteAst.Case(loc, id, params')   
-   | GrafiteAst.RewritingStep (loc, term1, term2, term3) ->
+   | GrafiteAst.RewritingStep (loc, term1, term2, term3, cont) ->
         let metasenv,cic =
         match term1 with
            None -> metasenv,None
-         | Some t -> 
+         | Some (start,t) -> 
             let metasenv,t = disambiguate_term context metasenv t in
-             metasenv,Some t in
+             metasenv,Some (start,t) in
        let metasenv,cic'= disambiguate_term context metasenv term2 in
         let metasenv,cic'' =
         match term3 with
-           None -> metasenv,None
-         | Some t -> 
+           `Auto _ as t -> metasenv,t
+         | `Term t -> 
             let metasenv,t = disambiguate_term context metasenv t in
-             metasenv,Some t in
-       metasenv,GrafiteAst.RewritingStep (loc, cic, cic', cic'')   
+             metasenv,`Term t in
+       metasenv,GrafiteAst.RewritingStep (loc, cic, cic', cic'', cont)   
 
 
 let disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj) =
@@ -367,19 +369,50 @@ let disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj) =
   lexicon_status, metasenv, cic
   
 let disambiguate_command lexicon_status ~baseuri metasenv (text,prefix_len,cmd)=
- match cmd with
-  | GrafiteAst.Coercion _
-  | GrafiteAst.Default _
-  | GrafiteAst.Drop _
-  | GrafiteAst.Print _
-  | GrafiteAst.Include _
-  | GrafiteAst.Qed _
-  | GrafiteAst.Set _ as cmd ->
-      lexicon_status,metasenv,cmd
-  | GrafiteAst.Obj (loc,obj) ->
-      let lexicon_status,metasenv,obj =
-       disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj)in
-      lexicon_status, metasenv, GrafiteAst.Obj (loc,obj)
+  match cmd with
+   | GrafiteAst.Index(loc,key,uri) ->
+       let lexicon_status_ref = ref lexicon_status in 
+       let disambiguate_term =
+        disambiguate_term text prefix_len lexicon_status_ref [] in
+       let disambiguate_term_option metasenv =
+        function
+             None -> metasenv,None
+          | Some t ->
+               let metasenv,t = disambiguate_term metasenv t in
+                metasenv, Some t
+       in
+       let metasenv,key = disambiguate_term_option metasenv key in
+       !lexicon_status_ref, metasenv,GrafiteAst.Index(loc,key,uri)
+   | GrafiteAst.Coercion _
+   | GrafiteAst.Default _
+   | GrafiteAst.Drop _
+   | GrafiteAst.Include _
+   | GrafiteAst.Print _
+   | GrafiteAst.Qed _
+   | GrafiteAst.Set _ as cmd ->
+       lexicon_status,metasenv,cmd
+   | GrafiteAst.Obj (loc,obj) ->
+       let lexicon_status,metasenv,obj =
+        disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj)in
+       lexicon_status, metasenv, GrafiteAst.Obj (loc,obj)
+   | GrafiteAst.Relation (loc,id,a,aeq,refl,sym,trans) ->
+      let lexicon_status_ref = ref lexicon_status in 
+      let disambiguate_term =
+       disambiguate_term text prefix_len lexicon_status_ref [] in
+      let disambiguate_term_option metasenv =
+       function
+          None -> metasenv,None
+       | Some t ->
+          let metasenv,t = disambiguate_term metasenv t in
+           metasenv, Some t
+      in
+      let metasenv,a = disambiguate_term metasenv a in
+      let metasenv,aeq = disambiguate_term metasenv aeq in
+      let metasenv,refl = disambiguate_term_option metasenv refl in
+      let metasenv,sym = disambiguate_term_option metasenv sym in
+      let metasenv,trans = disambiguate_term_option metasenv trans in
+       !lexicon_status_ref, metasenv,
+        GrafiteAst.Relation (loc,id,a,aeq,refl,sym,trans)
 
 let disambiguate_macro 
   lexicon_status_ref metasenv context (text,prefix_len, macro) 
@@ -402,5 +435,6 @@ let disambiguate_macro
       let metasenv,term = disambiguate_term context metasenv term in
        metasenv,GrafiteAst.Check (loc,term)
    | GrafiteAst.Hint _
-   | GrafiteAst.WLocate _ as macro ->
+   | GrafiteAst.WLocate _
+   | GrafiteAst.Inline _ as macro ->
       metasenv,macro