| _ -> false
;;
-
+let no_more_passive_goals = function
+ | _,[] -> true
+ | _ -> false
+;;
+
let size_of_passive ((passive_list, ps), _) = List.length passive_list
(* EqualitySet.cardinal ps *)
;;
;;
let check_if_goal_is_subsumed ((_,ctx,_) as env) table (goalproof,menv,ty) =
-(*
let names = names_of_context ctx in
+(*
Printf.eprintf "check_goal_subsumed: %s\n" (CicPp.pp ty names);
*)
match ty with
match Indexing.unification env table goal_equation with
| Some (subst, equality, swapped ) ->
prerr_endline
- ("GOAL SUBSUMED BY: " ^ Equality.string_of_equality equality);
- prerr_endline ("SUBST:" ^ Subst.ppsubst subst);
+ ("GOAL SUBSUMED IS: " ^ Equality.string_of_equality goal_equation ~env);
+ prerr_endline
+ ("GOAL IS SUBSUMED BY: " ^ Equality.string_of_equality equality ~env);
+ prerr_endline ("SUBST:" ^ Subst.ppsubst ~names subst);
let (_,p,(ty,l,r,_),m,id) = Equality.open_equality equality in
let cicmenv = Subst.apply_subst_metasenv subst (m @ menv) in
let p =
let new_passive_goals =
if Utils.metas_of_term t1 = [] then passive_goals
else
- let new' =
- Indexing.superposition_left env (snd active) selected in
+ let newmaxmeta,new' =
+ Indexing.superposition_left env (snd active) selected
+ !maxmeta
+ in
+ maxmeta := newmaxmeta;
passive_goals @ new'
in
selected::active_goals, new_passive_goals
;;
*)
-let infer_goal_set_with_current env current goals =
+let infer_goal_set_with_current env current goals active =
let active_goals, passive_goals = goals in
- let l,table,_ = build_table [current] in
let active_goals, _ =
- simplify_goal_set env goals (l,table)
+ simplify_goal_set env goals active
in
+ let l,table,_ = build_table [current] in
active_goals,
List.fold_left
(fun acc g ->
- let new' = Indexing.superposition_left env table g in
+ let newmaxmeta, new' = Indexing.superposition_left env table g !maxmeta in
+ maxmeta := newmaxmeta;
acc @ new')
passive_goals active_goals
;;
| None ->
(* SELECTION *)
if passive_is_empty passive then
- ParamodulationFailure "No more passive"(*maybe this is a success! *)
+ if no_more_passive_goals goals then
+ ParamodulationFailure "No more passive equations/goals"
+ (*maybe this is a success! *)
+ else
+ step goals theorems passive active (iterno+1)
else
begin
(* COLLECTION OF GARBAGED EQUALITIES *)
prerr_endline "infer";
let new' = infer eq_uri env current active in
prerr_endline "infer goal";
- let goals = infer_goal_set_with_current env current goals in
+(*
+ match check_if_goals_set_is_solved env active goals with
+ | Some p ->
+ prerr_endline
+ (Printf.sprintf "Found a proof in: %f\n"
+ (Unix.gettimeofday() -. initial_time));
+ ParamodulationSuccess p
+ | None ->
+*)
let active =
let al, tbl = active in
al @ [current], Indexing.index tbl current
in
+ let goals =
+ infer_goal_set_with_current env current goals active
+ in
(* FORWARD AND BACKWARD SIMPLIFICATION *)
prerr_endline "fwd/back simpl";
let rec simplify new' active passive =
*)
let goals = make_goal_set goal in
let max_iterations = 10000 in
- let max_time = Unix.gettimeofday () +. 600. (* minutes *) in
+ let max_time = Unix.gettimeofday () +. 300. (* minutes *) in
given_clause
eq_uri env goals theorems passive active max_iterations max_time
in
prerr_endline
(Equality.pp_proof names goalproof newproof subsumption_subst
subsumption_id type_of_goal);
- prerr_endline (CicMetaSubst.ppmetasenv [] proof_menv);
prerr_endline "ENDOFPROOFS";
(* generation of the CIC proof *)
let side_effects =
Equality.build_goal_proof
eq_uri goalproof initial type_of_goal side_effects
in
+ prerr_endline ("PROOF: " ^ CicPp.pp goal_proof names);
let goal_proof = Subst.apply_subst subsumption_subst goal_proof in
let metas_still_open_in_proof = Utils.metas_of_term goal_proof in
(*prerr_endline (CicPp.pp goal_proof names);*)
*)
;;
-let demodulate_tac ~dbd ~pattern ((proof,goal)(*s initialstatus*)) =
+let demodulate_tac ~dbd ((proof,goal)(*s initialstatus*)) =
let curi,metasenv,pbo,pty = proof in
let metano,context,ty = CicUtil.lookup_meta goal metasenv in
let eq_uri = eq_of_goal ty in
else (* if newty = ty then *)
raise (ProofEngineTypes.Fail (lazy "no progress"))
(*else ProofEngineTypes.apply_tactic
- (ReductionTactics.simpl_tac ~pattern)
- initialstatus*)
+ (ReductionTactics.simpl_tac
+ ~pattern:(ProofEngineTypes.conclusion_pattern None)) initialstatus*)
;;
-let demodulate_tac ~dbd ~pattern =
- ProofEngineTypes.mk_tactic (demodulate_tac ~dbd ~pattern)
-;;
+let demodulate_tac ~dbd = ProofEngineTypes.mk_tactic (demodulate_tac ~dbd);;
let rec find_in_ctx i name = function
| [] -> raise (ProofEngineTypes.Fail (lazy ("Hypothesis not found: " ^ name)))
let t = Equality.term_of_equality eq_uri e in
prerr_endline (CicPp.pp t names))
eql;
+ prerr_endline ("\n result proofs: ");
+ List.iter (fun e ->
+ prerr_endline (let _,p,_,_,_ = Equality.open_equality e in
+ let s = match p with Equality.Exact _ -> Subst.empty_subst | Equality.Step (s,_) -> s in
+ Subst.ppsubst s ^ "\n" ^
+ CicPp.pp (Equality.build_proof_term eq_uri [] 0 p) names)) eql;
if demod_table <> "" then
begin
let demod =