(** 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 =
Indexing.demodulation_equality bag eq_uri !maxmeta env table current
in
maxmeta := newmeta;
- if Equality.is_identity env newcurrent then None else Some newcurrent
+ if Equality.is_weak_identity newcurrent then None else Some newcurrent
in
- let rec demod current =
+ let demod current =
if Utils.debug_metas then
ignore (Indexing.check_target bag context current "demod0");
let res = demodulate active_table current in
- if Utils.debug_metas then
- ignore ((function None -> () | Some x ->
- ignore (Indexing.check_target bag context x "demod1");()) res);
+ if Utils.debug_metas then
+ ignore ((function None -> () | Some x ->
+ ignore (Indexing.check_target bag context x "demod1");()) res);
res
in
let res = demod current in
(fun eq ((res,pruned), tbl) ->
if List.mem eq res then
(res, (id_of_eq eq)::pruned),tbl
- else if (Equality.is_identity env eq) || (find eq res) then (
+ else if (Equality.is_weak_identity eq) || (find eq res) then (
(res, (id_of_eq eq)::pruned),tbl
)
else
if Equality.is_weak_identity e then t else Indexing.index t e)
Indexing.empty active
in
- let res = forward_simplify bag eq_uri env e (active, tbl) 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
| hd::tl -> (
match res with
ParamodulationSuccess p
| None ->
*)
+
let active =
let al, tbl = active in
al @ [current], Indexing.index tbl current
let goals =
infer_goal_set_with_current bag env current goals active
in
+
(* FORWARD AND BACKWARD SIMPLIFICATION *)
(* prerr_endline "fwd/back simpl"; *)
let rec simplify new' active passive =
let active, passive, new' =
simplify new' active passive
in
+
(* prerr_endline "simpl goal with new"; *)
let goals =
let a,b,_ = build_table new' in