]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/tactics/tacticChaser.ml
debian version 0.6.3-2
[helm.git] / helm / ocaml / tactics / tacticChaser.ml
index e917555ce3e63f87a4052c224321f5416205f4c2..831ccc6f4bedaf2cc4f32d77f4067aa25486948b 100644 (file)
@@ -75,10 +75,10 @@ match list_of_must with
            if 
             let time = Unix.gettimeofday() in
             (try
-             ignore
+             ignore(ProofEngineTypes.apply_tactic 
                (PrimitiveTactics.apply_tac
                  ~term:(MQueryMisc.term_of_cic_textual_parser_uri
-                          (MQueryMisc.cic_textual_parser_uri_of_string uri))
+                          (MQueryMisc.cic_textual_parser_uri_of_string uri)))
                  status);
               let time1 = Unix.gettimeofday() in
                 prerr_endline (Printf.sprintf "%1.3f" (time1 -. time) );
@@ -136,21 +136,17 @@ let matchConclusion2 mqi_handle ?(output_html = (fun _ -> ())) ~choose_must() st
     let len = String.length s in
     let suffix = String.sub s (len-4) 4 in
       not (suffix  = ".var") in
-  let uris = List.filter isvar uris in
+  let uris = List.filter isvar uris in 
   (* delete all not "cic:/Coq" uris *)
   (*
   let uris =
     (* TODO ristretto per ragioni di efficienza *)
     List.filter (fun _,uri -> Pcre.pmatch ~pat:"^cic:/Coq/" uri) uris in
   *)
-  (*
-  let uris =
-    List.filter  (fun _,uri -> not (Pcre.pmatch ~pat:"^cic:/Coq/ring" uri)) uris in
-  *)
   (* concl_cost are the costants in the conclusion of the proof 
      while hyp_const are the constants in the hypothesis *)
-  let (_,concl_const) = NewConstraints.constants_of ty in
-  prerr_endline ("Ne sono rimasti " ^ string_of_int (List.length uris));
+  let (main_concl,concl_const) = NewConstraints.mainandcons ty in
+  prerr_endline ("Ne sono rimasti " ^ string_of_int (List.length uris));
   let hyp t set =
     match t with
       Some (_,Cic.Decl t) -> (NewConstraints.StringSet.union set (NewConstraints.constants_concl t))
@@ -160,7 +156,12 @@ let matchConclusion2 mqi_handle ?(output_html = (fun _ -> ())) ~choose_must() st
     List.fold_right hyp ey NewConstraints.StringSet.empty in
   prerr_endline (NewConstraints.pp_StringSet (NewConstraints.StringSet.union hyp_const concl_const));
   (* uris with new constants in the proof are filtered *)
-  let uris = List.filter (Filter_auto.filter_new_constants conn (NewConstraints.StringSet.union hyp_const concl_const)) uris in 
+  let all_const = NewConstraints.StringSet.union hyp_const concl_const in
+  let uris = 
+    if (List.length uris < (Filter_auto.power 2 (List.length (NewConstraints.StringSet.elements all_const))))
+     then 
+     (prerr_endline("metodo vecchio");List.filter (Filter_auto.filter_new_constants conn all_const) uris)
+    else Filter_auto.filter_uris conn all_const uris main_concl in 
 (*
   let uris =
     (* ristretto all cache *)
@@ -177,20 +178,21 @@ let matchConclusion2 mqi_handle ?(output_html = (fun _ -> ())) ~choose_must() st
       | (m,uri)::tl ->
           let tl' = filter_out tl in
             try
+                  prerr_endline ("STO APPLICANDO " ^ uri);
               (m,
-              (prerr_endline ("STO APPLICANDO " ^ uri);
-               (PrimitiveTactics.apply_tac
+               (ProofEngineTypes.apply_tactic( PrimitiveTactics.apply_tac
                   ~term:(MQueryMisc.term_of_cic_textual_parser_uri
-                           (MQueryMisc.cic_textual_parser_uri_of_string uri))
-                  status)))::tl'
+                           (MQueryMisc.cic_textual_parser_uri_of_string uri)))
+                  status))::tl'
             (* with ProofEngineTypes.Fail _ -> tl' *)
             (* patch to cover CSC's exportation bug *)
             with _ -> tl' 
      in    
-     prerr_endline ("Ne sono rimasti " ^ string_of_int (List.length uris));
+     prerr_endline ("Ne sono rimasti " ^ string_of_int (List.length uris));
      filter_out uris
    in
-     prerr_endline ("Ne sono rimasti " ^ string_of_int (List.length uris'));
+     prerr_endline ("Ne sono rimasti 3 " ^ string_of_int (List.length uris'));
+   
      uris'
 ;;
 
@@ -214,7 +216,6 @@ let choose_must list_of_must only =
      List.nth list_of_must 0 *)
 
 let  searchTheorems mqi_handle (proof,goal) =
-(*prerr_endline "1";*)
   let subproofs =
     matchConclusion2 mqi_handle ~choose_must() (proof, goal) in
  let res =
@@ -229,6 +230,30 @@ let  searchTheorems mqi_handle (proof,goal) =
     subproofs
  in
   (* now we may drop the prefix tag *)
- List.map snd res
+ (*let res' =
+   List.map snd res in*)
+ let order_goal_list proof goal1 goal2 =
+   let _,metasenv,_,_ = proof in
+   let (_, ey1, ty1) = CicUtil.lookup_meta goal1 metasenv in
+   let (_, ey2, ty2) =  CicUtil.lookup_meta goal2 metasenv in
+(*
+   prerr_endline "PRIMA DELLA PRIMA TYPE OF " ;
+*)
+   let ty_sort1 = CicTypeChecker.type_of_aux' metasenv ey1 ty1 in
+(*
+   prerr_endline (Printf.sprintf "PRIMA DELLA SECONDA TYPE OF %s \n### %s @@@%s " (CicMetaSubst.ppmetasenv metasenv []) (CicMetaSubst.ppcontext [] ey2) (CicMetaSubst.ppterm [] ty2));
+*)
+   let ty_sort2 = CicTypeChecker.type_of_aux' metasenv ey2 ty2 in
+(*
+   prerr_endline "DOPO LA SECONDA TYPE OF " ;
+*)
+   let prop1 = if CicReduction.are_convertible 
+                  ey1 (Cic.Sort Cic.Prop) ty_sort1 then 0
+                else 1 in
+   let prop2 = if CicReduction.are_convertible 
+                  ey2 (Cic.Sort Cic.Prop) ty_sort2 then 0
+                else 1 in
+ prop1 - prop2 in
+ List.map (fun (level,(proof,goallist)) -> (proof, (List.stable_sort (order_goal_list proof) goallist))) res  
 ;;