let check_bottom_clause a =
let v = a.var.ident.ivalues in
if not (is_bottom a) then None
else begin
assert (Vec.size v > 1);
let size = ref 1 in
let c = ref [a.neg] in
(* eprintf "--check trail--@."; *)
(* for i = 1 to Vec.size v - 1 do *)
(* eprintf "%a : %d@." Debug.atom (fst (Vec.get v i)) (snd (Vec.get v i)); *)
(* done; *)
(* eprintf "%a@." Debug.atom a; *)
(* eprintf "---------------@."; *)
for i = 1 to Vec.size v - 1 do
let b = (fst (Vec.get v i)) in
if b.var.level > 0 then begin
c := b.neg :: !c;
incr size
end
done;
let cl = make_clause (fresh_ename ()) !c !size true [] in
(* printf "check_bottom -> %a@." Debug.clause c; *)
Some cl
end