]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/tactics/metadataQuery.ml
version 0.7.1
[helm.git] / helm / ocaml / tactics / metadataQuery.ml
index fab96475cc93604bc0bcd1dc70a8ef82d1865a47..a01044e8cf15ecc5f8434bec7faa26be5b0d52fe 100644 (file)
@@ -176,65 +176,6 @@ let compare_goal_list proof goal1 goal2 =
   in
   prop1 - prop2
 
-let hint ~(dbd:Mysql.dbd) ?(facts=false) ?signature ((proof, goal) as status) =
-  let (_, metasenv, _, _) = proof in
-  let (_, context, ty) = CicUtil.lookup_meta goal metasenv in
-  let (uris, (main, sig_constants)) =
-    match signature with
-    | Some signature -> (Constr.sigmatch ~dbd ~facts signature, signature)
-    | None -> (Constr.cmatch' ~dbd ~facts ty, Constr.signature_of ty)
-  in
-  let uris = List.filter nonvar (List.map snd uris) in
-  let uris = List.filter Hashtbl_equiv.not_a_duplicate uris in
-  let types_constants =
-    match main with
-    | None -> Constr.UriManagerSet.empty
-    | Some (main, types) ->
-        List.fold_right Constr.UriManagerSet.add (main :: types)
-          Constr.UriManagerSet.empty
-  in
-  let hyp_constants =
-    Constr.UriManagerSet.diff (signature_of_hypothesis context) types_constants
-  in
-(* Constr.UriManagerSet.iter debug_print hyp_constants; *)
-  let other_constants = Constr.UriManagerSet.union sig_constants hyp_constants in
-  let uris = 
-    let pow = 2 ** (Constr.UriManagerSet.cardinal other_constants) in
-    if ((List.length uris < pow) or (pow <= 0))
-    then begin
-(*       debug_print "MetadataQuery: large sig, falling back to old method"; *)
-      filter_uris_forward ~dbd (main, other_constants) uris
-    end else
-      filter_uris_backward ~dbd ~facts (main, other_constants) uris
-  in
-  let rec aux = function
-    | [] -> []
-    | uri :: tl ->
-        (let status' =
-            try
-              let (proof, goal_list) =
-(*                debug_print ("STO APPLICANDO " ^ uri); *)
-               PET.apply_tactic
-                  (PrimitiveTactics.apply_tac
-                   ~term:(CicUtil.term_of_uri uri))
-                  status
-              in
-              let goal_list =
-                List.stable_sort (compare_goal_list proof) goal_list
-              in
-              Some (uri, (proof, goal_list))
-            with ProofEngineTypes.Fail _ -> None
-          in
-          match status' with
-          | None -> aux tl
-          | Some status' ->
-              status' :: aux tl)
-  in
-  List.stable_sort
-    (fun (_, (_, goals1)) (_, (_, goals2)) ->
-      Pervasives.compare (List.length goals1) (List.length goals2))
-    (aux uris)
-
 (* experimental_hint is a version of hint for experimental 
     purposes. It uses auto_tac_verbose instead of auto tac.
     Auto_tac verbose also returns a substitution - for the moment 
@@ -559,8 +500,8 @@ let get_metadata t =
 let debug_metadata = function
    | None                 -> ()
    | Some (outer, inners) -> 
-      let f (n, uri) = Printf.eprintf "%s: %i %s\n" "fwd" n uri in
-      Printf.eprintf "\n%s: %s\n" "fwd" outer;
+      let f (n, uri) = Printf.eprintf "%s: %i %s\n" "fwd" n (UriManager.string_of_uri uri) in
+      Printf.eprintf "\n%s: %s\n" "fwd" (UriManager.string_of_uri outer);
       List.iter f inners; prerr_newline ()
 
 let fwd_simpl ~dbd t =
@@ -584,8 +525,9 @@ let fwd_simpl ~dbd t =
    let compare (_, x) (_, y) = compare x y in
    let filter n (uri, rank) =
       if rank > 0 then Some (UriManager.uri_of_string uri) else None
-   in   
-   match get_metadata t with
+   in
+   let metadata = get_metadata t in debug_metadata metadata;
+   match metadata with
       | None                 -> []
       | Some (outer, inners) ->
          let select = "source, h_inner, h_index" in
@@ -598,4 +540,4 @@ let fwd_simpl ~dbd t =
          let lemmas = Mysql.map result ~f:(map inners) in
         let ranked = List.fold_left rank [] lemmas in
         let ordered = List.rev (List.fast_sort compare ranked) in
-        map_filter filter 0 ordered
+         map_filter filter 0 ordered