module G = MQueryGenerator
(* search arguments on which Apply tactic doesn't fail *)
-let matchConclusion mqi_handle ?(output_html = (fun _ -> ())) ~choose_must() ~status =
+let matchConclusion mqi_handle ?(output_html = (fun _ -> ())) ~choose_must() status =
let ((_, metasenv, _, _), metano) = status in
let (_, ey ,ty) = CicUtil.lookup_meta metano metasenv in
let list_of_must, only = CGMatchConclusion.get_constraints metasenv ey ty in
[] -> []
|_ ->
let must = choose_must list_of_must only in
+ prerr_endline "123";
let result =
I.execute mqi_handle
(G.query_of_constraints
(Some CGMatchConclusion.universe)
(must,[],[]) (Some only,None,None)) in
+ prerr_endline "456";
let uris =
List.map
(function uri,_ ->
prerr_endline "STO FILTRANDO";
List.filter (fun uri -> Pcre.pmatch ~pat:"^cic:/Coq/" uri) uris
in
- prerr_endline "HO FILTRATO";
+ prerr_endline "HO FILTRATO";
let uris',exc =
let rec filter_out =
function
(PrimitiveTactics.apply_tac
~term:(MQueryMisc.term_of_cic_textual_parser_uri
(MQueryMisc.cic_textual_parser_uri_of_string uri))
- ~status);
+ status);
true
with ProofEngineTypes.Fail _ -> false)
then
;;
+(*matchConclusion modificata per evitare una doppia apply*)
+let matchConclusion2 mqi_handle ?(output_html = (fun _ -> ())) ~choose_must() status =
+ let ((_, metasenv, _, _), metano) = status in
+ let (_, ey ,ty) = CicUtil.lookup_meta metano metasenv in
+ let list_of_must, only = CGMatchConclusion.get_constraints metasenv ey ty in
+match list_of_must with
+ [] -> []
+|_ ->
+ let must = choose_must list_of_must only in
+ let result =
+ I.execute mqi_handle
+ (G.query_of_constraints
+ (Some CGMatchConclusion.universe)
+ (must,[],[]) (Some only,None,None)) in
+ let uris =
+ List.map
+ (function uri,_ ->
+ MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' uri
+ ) result
+ in
+ let uris =
+ (* TODO ristretto per ragioni di efficienza *)
+ prerr_endline "STO FILTRANDO2";
+ List.filter (fun uri -> Pcre.pmatch ~pat:"^cic:/Coq/" uri) uris
+ in
+ let isvar s =
+ 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
+ prerr_endline "HO FILTRATO2";
+ let uris' =
+ let rec filter_out =
+ function
+ [] -> []
+ | uri::tl ->
+ let tl' = filter_out tl in
+ try
+ ((PrimitiveTactics.apply_tac
+ ~term:(MQueryMisc.term_of_cic_textual_parser_uri
+ (MQueryMisc.cic_textual_parser_uri_of_string uri))
+ status)::tl')
+ with ProofEngineTypes.Fail _ -> tl'
+ in
+ prerr_endline (string_of_int (List.length uris));
+ filter_out uris
+ in
+ uris'
+;;
+
(*funzione che sceglie il penultimo livello di profondita' dei must*)
(*
(*function taking a status and returning a new status after having searching a theorem to apply ,theorem which *)
(*generate the less number of subgoals*)
-let searchTheorem ~status:(proof,goal) =
+let searchTheorem (proof,goal) =
let mqi_flags = [MQIC.Postgres ; MQIC.Stat ; MQIC.Warn ; MQIC.Log] (* default MathQL interpreter options *)
in
let mqi_handle = MQIC.init mqi_flags prerr_string
in
let uris' =
matchConclusion
- mqi_handle ~choose_must() ~status:(proof, goal)
+ mqi_handle ~choose_must() (proof, goal)
in
let list_of_termin =
List.map
let list_proofgoal =
List.map
(function term ->
- PrimitiveTactics.apply_tac ~term ~status:(proof,goal))
+ PrimitiveTactics.apply_tac ~term (proof,goal))
list_of_termin
in
let (list_of_subgoal: int list list) =
(* modifico la str in modo che sia accettata da apply*)
in*)
- PrimitiveTactics.apply_tac ~term:uri' ~status:(proof,goal)
+ PrimitiveTactics.apply_tac ~term:uri' (proof,goal)
;;
*)
-let searchTheorems mqi_handle ~status:(proof,goal) =
-prerr_endline "1";
+let searchTheorems mqi_handle (proof,goal) =
+(*prerr_endline "1";*)
let uris' =
- matchConclusion mqi_handle ~choose_must() ~status:(proof, goal) in
-prerr_endline "2";
- let list_of_termin =
+ matchConclusion2 mqi_handle ~choose_must() (proof, goal) in
+prerr_endline (string_of_int (List.length uris'));
+(*prerr_endline "2";*)
+(* let list_of_termin =
List.map
(function string ->
(MQueryMisc.term_of_cic_textual_parser_uri
let list_proofgoal =
List.map
(function term ->
- PrimitiveTactics.apply_tac ~term ~status:(proof,goal)) list_of_termin in
-prerr_endline "4";
+ PrimitiveTactics.apply_tac ~term (proof,goal)) list_of_termin in*)
+(*prerr_endline "4";*)
let res =
List.sort
(fun (_,gl1) (_,gl2) ->
Pervasives.compare (List.length gl1) (List.length gl2))
- list_proofgoal
+ uris'
in
-prerr_endline "5";
+(*prerr_endline "5";*)
res
;;