]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/cic_disambiguation/disambiguateChoices.ml
Inverters/Inversion:
[helm.git] / helm / software / components / cic_disambiguation / disambiguateChoices.ml
index bf14623d7a6943e28839b6d5379237c960594230..f0c7b373ff9da2f8b1082f7a163dfed780c4e453 100644 (file)
@@ -44,9 +44,10 @@ let lookup_num_by_dsc dsc =
     List.find (has_description dsc) !num_choices
   with Not_found -> raise (Choice_not_found (lazy ("Num with dsc " ^  dsc)))
 
-let mk_choice (dsc, args, appl_pattern) =
+let mk_choice  ~mk_appl ~mk_implicit ~term_of_uri ~term_of_nref (dsc, args, appl_pattern)=
   dsc,
-  (fun env _ cic_args ->
+  `Sym_interp
+  (fun cic_args ->
     let env',rest =
       let names =
         List.map (function CicNotationPt.IdentArg (_, name) -> name) args
@@ -66,18 +67,25 @@ let mk_choice (dsc, args, appl_pattern) =
            "The notation " ^ dsc ^ " expects more arguments")))
     in
      let combined =
-      TermAcicContent.instantiate_appl_pattern env' appl_pattern
+      TermAcicContent.instantiate_appl_pattern 
+        ~mk_appl ~mk_implicit ~term_of_uri ~term_of_nref env' appl_pattern
      in
       match rest with
          [] -> combined
-       | _::_ -> Cic.Appl (combined::rest))
+       | _::_ -> mk_appl (combined::rest))
 
-let lookup_symbol_by_dsc symbol dsc =
+let lookup_symbol_by_dsc ~mk_appl ~mk_implicit ~term_of_uri ~term_of_nref symbol dsc =
+  let interpretations = TermAcicContent.lookup_interpretations ~sorted:false symbol in
   try
-    mk_choice
-      (List.find
-        (fun (dsc', _, _) -> dsc = dsc')
-        (TermAcicContent.lookup_interpretations symbol))
+    mk_choice ~mk_appl ~mk_implicit ~term_of_uri ~term_of_nref
+      (List.find (fun (dsc', _, _) -> dsc = dsc') interpretations)
   with TermAcicContent.Interpretation_not_found | Not_found ->
     raise (Choice_not_found (lazy (sprintf "Symbol %s, dsc %s" symbol dsc)))
 
+let cic_lookup_symbol_by_dsc = lookup_symbol_by_dsc
+  ~mk_implicit:(function 
+     | true -> Cic.Implicit (Some `Type)
+     | false -> Cic.Implicit None)
+  ~mk_appl:(function (Cic.Appl l)::tl -> Cic.Appl (l@tl) | l -> Cic.Appl l)
+  ~term_of_uri:CicUtil.term_of_uri ~term_of_nref:(fun _ -> assert false)
+;;