(** simplifies current using active and passive *)
let forward_simplify bag eq_uri env current (active_list, active_table) =
- prerr_endline (Equality.string_of_equality ~env current);
let _, context, _ = env in
let demodulate table current =
let newmeta, newcurrent =
let new_pos_set =
List.fold_left
(fun s e ->
- if not (Equality.is_identity env e) then
+ if not (Equality.is_weak_identity e) then
EqualitySet.add e s
else s)
EqualitySet.empty new_pos
active_list (([],pruned), Indexing.empty),
List.fold_right
(fun eq p ->
- if (Equality.is_identity env eq) then p
+ if (Equality.is_weak_identity eq) then p
else eq::p)
newa []
in
Indexing.empty active
in
let res =
- if Equality.is_weak_identity e then None else
forward_simplify bag eq_uri env e (active, tbl)
in
match others with
(let _,context,_ = env in
try
let s,m,_ =
- Inference.unification m m context left right CicUniv.empty_ugraph
+ Founif.unification m m context left right CicUniv.empty_ugraph
in
let reflproof = Equality.Exact (Equality.refl_proof uri eq_ty left) in
let m = Subst.apply_subst_metasenv s m in
(Equality.string_of_equality ~env current)));
let new' = infer bag eq_uri env current active in
let active =
- if Equality.is_identity env current then active
+ if Equality.is_weak_identity (*env*) current then active
else
let al, tbl = active in
al @ [current], Indexing.index tbl current
eq_uri goalproof initial type_of_goal side_effects
context proof_menv
in
-(* prerr_endline ("PROOF: " ^ CicPp.pp goal_proof names); *)
+ (* 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);*)
- (* ?? *)
+ (* prerr_endline (CicPp.pp goal_proof names); *)
let goal_proof = (* Subst.apply_subst subsumption_subst *) goal_proof in
let side_effects_t =
List.map (Subst.apply_subst subsumption_subst) side_effects_t
in
(* replacing fake mets with real ones *)
-(* prerr_endline "replacing metas..."; *)
+ (* prerr_endline "replacing metas..."; *)
let irl=CicMkImplicit.identity_relocation_list_for_metavariable context in
let goal_proof_menv, what, with_what,free_meta =
List.fold_left
(fun (acc1,acc2,acc3,uniq) (i,_,ty) ->
match uniq with
| Some m ->
-(* acc1, (Cic.Meta(i,[]))::acc2, m::acc3, uniq *)
- (i,context,ty)::acc1, (Cic.Meta(i,[]))::acc2, (Cic.Meta(i,irl))::acc3, uniq
+(* acc1, (Cic.Meta(i,[]))::acc2, m::acc3, uniq *)
+ (i,context,ty)::acc1, (Cic.Meta(i,[]))::acc2,
+ (Cic.Meta(i,irl))::acc3, uniq
| None ->
[i,context,ty], (Cic.Meta(i,[]))::acc2,
(Cic.Meta(i,irl)) ::acc3,Some (Cic.Meta(i,irl)))
([],[],[],None)
(List.filter
- (fun (i,_,_) -> List.mem i metas_still_open_in_proof)
+ (fun (i,_,_) ->
+ List.mem i metas_still_open_in_proof
+ (*&& not(List.mem i metas_still_open_in_goal)*))
proof_menv)
in
let replace where =
(ProofEngineHelpers.compare_metasenvs
~oldmetasenv:metasenv ~newmetasenv:goal_proof_menv)
in
-(* prerr_endline ("freemetas: " ^ String.concat "," (List.map string_of_int
- * free_metas) ); *)
+ (* prerr_endline
+ * ("freemetas: " ^
+ * String.concat "," (List.map string_of_int free_metas) ); *)
(* check/refine/... build the new proof *)
let replaced_goal =
ProofEngineReduction.replace
prerr_endline "THE PROOF DOES NOT TYPECHECK!";
raise exn
in
+
+ let metas_of_proof = Utils.metas_of_term goal_proof in
+
let proof, real_metasenv =
ProofEngineHelpers.subst_meta_and_metasenv_in_proof
proof goalno (CicMetaSubst.apply_subst final_subst) real_menv
in
let open_goals =
+ HExtlib.list_uniq (List.sort Pervasives.compare metas_of_proof)
+ in
+(*
match free_meta with Some(Cic.Meta(m,_)) when m<>goalno ->[m] | _ ->[]
in
+*)
(*
Printf.eprintf
"GOALS APERTI: %s\nMETASENV PRIMA:\n%s\nMETASENV DOPO:\n%s\n"
let get_stats () = ""
(*
- <:show<Saturation.>> ^ Indexing.get_stats () ^ Inference.get_stats () ^
+ <:show<Saturation.>> ^ Indexing.get_stats () ^ Founif.get_stats () ^
Equality.get_stats ()
;;
*)