]> matita.cs.unibo.it Git - helm.git/blobdiff - components/grafite_parser/grafiteDisambiguate.ml
added the geniric
[helm.git] / components / grafite_parser / grafiteDisambiguate.ml
index f5ea66f2f6883e06a840744579277817577fe32f..16421efafb386df29236fe77b36e9a9ba05b0cfe 100644 (file)
 
 exception BaseUriNotSetYet
 
+type tactic = 
+ (CicNotationPt.term, CicNotationPt.term, 
+  CicNotationPt.term GrafiteAst.reduction, string) 
+   GrafiteAst.tactic
+   
+type lazy_tactic = 
+  (Cic.term, Cic.lazy_term, Cic.lazy_term GrafiteAst.reduction, string) 
+    GrafiteAst.tactic
+
 let singleton = function
   | [x], _ -> x
   | _ -> assert false
+;;
 
   (** @param term not meaningful when context is given *)
-let disambiguate_term lexicon_status_ref context metasenv term =
+let disambiguate_term text prefix_len lexicon_status_ref context metasenv term =
   let lexicon_status = !lexicon_status_ref in
   let (diff, metasenv, cic, _) =
     singleton
       (GrafiteDisambiguator.disambiguate_term ~dbd:(LibraryDb.instance ())
         ~aliases:lexicon_status.LexiconEngine.aliases
         ~universe:(Some lexicon_status.LexiconEngine.multi_aliases)
-        ~context ~metasenv term)
+        ~context ~metasenv (text,prefix_len,term))
   in
   let lexicon_status = LexiconEngine.set_proof_aliases lexicon_status diff in
   lexicon_status_ref := lexicon_status;
   metasenv,cic
-  
+;;
+
   (** disambiguate_lazy_term (circa): term -> (unit -> status) * lazy_term
    * rationale: lazy_term will be invoked in different context to obtain a term,
    * each invocation will disambiguate the term and can add aliases. Once all
    * disambiguations have been performed, the first returned function can be
    * used to obtain the resulting aliases *)
-let disambiguate_lazy_term lexicon_status_ref term =
+let disambiguate_lazy_term text prefix_len lexicon_status_ref term =
   (fun context metasenv ugraph ->
     let lexicon_status = !lexicon_status_ref in
     let (diff, metasenv, cic, ugraph) =
@@ -59,12 +70,15 @@ let disambiguate_lazy_term lexicon_status_ref term =
           ~initial_ugraph:ugraph ~aliases:lexicon_status.LexiconEngine.aliases
           ~universe:(Some lexicon_status.LexiconEngine.multi_aliases)
           ~context ~metasenv
-          term) in
+          (text,prefix_len,term)) in
     let lexicon_status = LexiconEngine.set_proof_aliases lexicon_status diff in
     lexicon_status_ref := lexicon_status;
     cic, metasenv, ugraph)
+;;
 
-let disambiguate_pattern lexicon_status_ref (wanted, hyp_paths, goal_path) =
+let disambiguate_pattern 
+  text prefix_len lexicon_status_ref (wanted, hyp_paths, goal_path) 
+=
   let interp path = Disambiguate.interpretate_path [] path in
   let goal_path = HExtlib.map_option interp goal_path in
   let hyp_paths = List.map (fun (name, path) -> name, interp path) hyp_paths in
@@ -72,14 +86,17 @@ let disambiguate_pattern lexicon_status_ref (wanted, hyp_paths, goal_path) =
    match wanted with
       None -> None
     | Some wanted ->
-       let wanted = disambiguate_lazy_term lexicon_status_ref wanted in
+       let wanted = 
+         disambiguate_lazy_term text prefix_len lexicon_status_ref wanted 
+       in
        Some wanted
   in
   (wanted, hyp_paths, goal_path)
+;;
 
-let disambiguate_reduction_kind lexicon_status_ref = function
+let disambiguate_reduction_kind text prefix_len lexicon_status_ref = function
   | `Unfold (Some t) ->
-      let t = disambiguate_lazy_term lexicon_status_ref t in
+      let t = disambiguate_lazy_term text prefix_len lexicon_status_ref t in
       `Unfold (Some t)
   | `Demodulate
   | `Normalize
@@ -87,12 +104,19 @@ let disambiguate_reduction_kind lexicon_status_ref = function
   | `Simpl
   | `Unfold None
   | `Whd as kind -> kind
-  
-let disambiguate_tactic lexicon_status_ref context metasenv tactic =
-  let disambiguate_term = disambiguate_term lexicon_status_ref in
-  let disambiguate_pattern = disambiguate_pattern lexicon_status_ref in
-  let disambiguate_reduction_kind = disambiguate_reduction_kind lexicon_status_ref in
-  let disambiguate_lazy_term = disambiguate_lazy_term lexicon_status_ref in
+;;
+
+let disambiguate_tactic 
+  lexicon_status_ref context metasenv (text,prefix_len,tactic) 
+=
+  let disambiguate_term = 
+    disambiguate_term text prefix_len lexicon_status_ref in
+  let disambiguate_pattern = 
+    disambiguate_pattern text prefix_len lexicon_status_ref in
+  let disambiguate_reduction_kind = 
+    disambiguate_reduction_kind text prefix_len lexicon_status_ref in
+  let disambiguate_lazy_term = 
+    disambiguate_lazy_term text prefix_len lexicon_status_ref in
    match tactic with
     | GrafiteAst.Absurd (loc, term) -> 
         let metasenv,cic = disambiguate_term context metasenv term in
@@ -100,10 +124,13 @@ let disambiguate_tactic lexicon_status_ref context metasenv tactic =
     | GrafiteAst.Apply (loc, term) ->
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Apply (loc, cic)
+    | GrafiteAst.ApplyS (loc, term) ->
+        let metasenv,cic = disambiguate_term context metasenv term in
+        metasenv,GrafiteAst.ApplyS (loc, cic)
     | GrafiteAst.Assumption loc ->
         metasenv,GrafiteAst.Assumption loc
-    | GrafiteAst.Auto (loc,depth,width,paramodulation,full) ->
-        metasenv,GrafiteAst.Auto (loc,depth,width,paramodulation,full)
+    | GrafiteAst.Auto (loc,params) ->
+        metasenv,GrafiteAst.Auto (loc,params)
     | GrafiteAst.Change (loc, pattern, with_what) -> 
         let with_what = disambiguate_lazy_term with_what in
         let pattern = disambiguate_pattern pattern in
@@ -112,9 +139,6 @@ let disambiguate_tactic lexicon_status_ref context metasenv tactic =
         metasenv,GrafiteAst.Clear (loc,id)
     | GrafiteAst.ClearBody (loc,id) ->
        metasenv,GrafiteAst.ClearBody (loc,id)
-    | GrafiteAst.Compare (loc,term) ->
-        let metasenv,term = disambiguate_term context metasenv term in
-        metasenv,GrafiteAst.Compare (loc,term)
     | GrafiteAst.Constructor (loc,n) ->
         metasenv,GrafiteAst.Constructor (loc,n)
     | GrafiteAst.Contradiction loc ->
@@ -122,8 +146,6 @@ let disambiguate_tactic lexicon_status_ref context metasenv tactic =
     | GrafiteAst.Cut (loc, ident, term) -> 
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Cut (loc, ident, cic)
-    | GrafiteAst.DecideEquality loc ->
-        metasenv,GrafiteAst.DecideEquality loc
     | GrafiteAst.Decompose (loc, types, what, names) ->
         let disambiguate (metasenv,types) = function
            | GrafiteAst.Type _   -> assert false
@@ -229,7 +251,7 @@ let disambiguate_tactic lexicon_status_ref context metasenv tactic =
         let metasenv,cic = disambiguate_term context metasenv term in
         metasenv,GrafiteAst.Transitivity (loc, cic)
 
-let disambiguate_obj lexicon_status ~baseuri metasenv obj =
+let disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj) =
   let uri =
    match obj with
     | CicNotationPt.Inductive (_,(name,_,_,_)::_)
@@ -244,12 +266,13 @@ let disambiguate_obj lexicon_status ~baseuri metasenv obj =
     singleton
       (GrafiteDisambiguator.disambiguate_obj ~dbd:(LibraryDb.instance ())
         ~aliases:lexicon_status.LexiconEngine.aliases
-        ~universe:(Some lexicon_status.LexiconEngine.multi_aliases) ~uri obj) in
+        ~universe:(Some lexicon_status.LexiconEngine.multi_aliases) ~uri 
+        (text,prefix_len,obj)) in
   let lexicon_status = LexiconEngine.set_proof_aliases lexicon_status diff in
   lexicon_status, metasenv, cic
   
-let disambiguate_command lexicon_status ~baseuri metasenv =
- function
+let disambiguate_command lexicon_status ~baseuri metasenv (text,prefix_len,cmd)=
+ match cmd with
   | GrafiteAst.Coercion _
   | GrafiteAst.Default _
   | GrafiteAst.Drop _
@@ -259,11 +282,13 @@ let disambiguate_command lexicon_status ~baseuri metasenv =
       lexicon_status,metasenv,cmd
   | GrafiteAst.Obj (loc,obj) ->
       let lexicon_status,metasenv,obj =
-       disambiguate_obj lexicon_status ~baseuri metasenv obj in
+       disambiguate_obj lexicon_status ~baseuri metasenv (text,prefix_len,obj)in
       lexicon_status, metasenv, GrafiteAst.Obj (loc,obj)
 
-let disambiguate_macro lexicon_status_ref metasenv context macro =
- let disambiguate_term = disambiguate_term lexicon_status_ref in
+let disambiguate_macro 
+  lexicon_status_ref metasenv context (text,prefix_len, macro) 
+=
+ let disambiguate_term = disambiguate_term text prefix_len lexicon_status_ref in
   match macro with
    | GrafiteAst.WMatch (loc,term) ->
       let metasenv,term = disambiguate_term context metasenv term in