X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=components%2Fgrafite_parser%2FgrafiteDisambiguate.ml;h=3d189983595ec968e62b30a3724e648d13c729d1;hb=93cc0505102768f7d4337907bafa31d1528a7289;hp=26c74e657afe317600598f3fe4e84f8886cf155d;hpb=9a17bf0f4213f5f130326d658ce7ee4b41f6d6f2;p=helm.git diff --git a/components/grafite_parser/grafiteDisambiguate.ml b/components/grafite_parser/grafiteDisambiguate.ml index 26c74e657..3d1899835 100644 --- a/components/grafite_parser/grafiteDisambiguate.ml +++ b/components/grafite_parser/grafiteDisambiguate.ml @@ -27,30 +27,41 @@ 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 @@ -224,7 +248,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,_,_,_)::_) @@ -239,12 +263,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 _ @@ -254,11 +279,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