]> matita.cs.unibo.it Git - helm.git/blobdiff - components/grafite_parser/grafiteDisambiguate.ml
New declarative tactic "we proceed by cases on t to prove t'".
[helm.git] / components / grafite_parser / grafiteDisambiguate.ml
index e9dc23328f338fb5b184552638b636bb74e27c3c..2d06942e309d0bc60901469ce4a9b5355ec5831c 100644 (file)
@@ -130,6 +130,9 @@ let disambiguate_tactic
         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
@@ -295,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
@@ -328,16 +335,16 @@ let disambiguate_tactic
         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,`Term t in
        metasenv,GrafiteAst.RewritingStep (loc, cic, cic', cic'', cont)   
 
 
@@ -363,6 +370,19 @@ let disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj) =
   
 let disambiguate_command lexicon_status ~baseuri metasenv (text,prefix_len,cmd)=
   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 _