]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/tactics/filter_auto.ml
Modified filtering function
[helm.git] / helm / ocaml / tactics / filter_auto.ml
index a87be6c49bd8408f8c46b443a8505e004fa735e5..b5fa2e2d79df12e44f5c398e699518a88de97620 100644 (file)
@@ -67,7 +67,7 @@ let filter_new_constants (conn:Mysql.dbd) const (_,uri) =
 
 
 
-let rec exec_query (conn:Mysql.dbd) uris k = 
+let rec exec_query (conn:Mysql.dbd) (uris,main) k  = 
   let add_must (n,from,where) uri =
     let refObjn = "refObj" ^ (string_of_int n) in
     let new_must =
@@ -83,14 +83,17 @@ let rec exec_query (conn:Mysql.dbd) uris k =
   let (_,from,where) = 
     List.fold_left add_must (0,[],[]) uris in
   let from,where = 
-    "no_concl_hyp"::from, 
-    ("no=" ^ (string_of_int k))::
-    ("no_concl_hyp.source = refObj0.source")::where
+    ["no_concl_hyp";"refObj as main"]@from, 
+    ["no=" ^ (string_of_int k);
+     "no_concl_hyp.source = refObj0.source";
+     "main.source = refObj0.source";
+     "main.h_occurrence = '" ^ main ^ "'";
+     "main.h_position = " ^ main_conclusion]@where
   in
   let from = String.concat "," from in
   let where = String.concat " and " where in
   let query = "select distinct(refObj0.source) from " ^ from ^ " where " ^ where in
-    (* prerr_endline query;*)
+     (*prerr_endline query;*)
     Mysql.exec conn query
 ;;
 
@@ -127,15 +130,23 @@ List.exists ex list_of_uris
 ;;
     
 
-let filter_uris (conn:Mysql.dbd) const uris =
+let filter_uris (conn:Mysql.dbd) const uris main =
   let subsets_of_consts = 
     setset_to_listlist (powerset const) in
+  let ex u =
+    if u = main then true
+    else false
+  in
+  let subsets_of_consts =
+  List.filter 
+       (fun (_,b) -> (List.exists ex b)) 
+               subsets_of_consts in
   let uris_of_const =
     List.concat
      (List.map 
              (fun (m,s) -> 
                 (let res = 
-                   exec_query conn s m in
+                   exec_query conn (s,main) m in
                  let f a = 
                    match (Array.to_list a) with
                        [Some uri] -> uri