exception Success of B.t Terms.bag * int * B.t Terms.clause
let debug s = prerr_endline (Lazy.force s);;
- (* let debug _ = ();; *)
+ let debug _ = ();;
let enable = true;;
let rec list_first f = function
let vl = Clauses.vars_of_clause cl in
let cl,maxvar =
if fresh then Clauses.fresh_clause ~subst maxvar (0, nlit, plit, vl, proof)
- else cl,maxvar
+ else (0,nlit,plit,vl,proof),maxvar
in
let bag, cl =
- Terms.add_to_bag (0, nlit, plit, vl, proof) bag
+ Terms.add_to_bag cl bag
in
Some (bag, maxvar, cl, literal)
else
| _ -> false
let fold_build_new_clause bag maxvar id rule filter res clause_ctx =
+ debug (lazy (string_of_int (List.length res)));
let (bag, maxvar), res =
HExtlib.filter_map_acc
(fun (bag, maxvar) (t,subst,id2,pos,dir) ->
let is_subsumed ~unify bag maxvar (id, nlit, plit, vl, _) table =
match nlit,plit with
+ | [Terms.Equation (l,r,ty,_) ,_],[]
| [],[Terms.Equation (l,r,ty,_) ,_]->
(match rewrite_eq ~unify l r ty vl table with
| None -> None
if no_demod then bag, clause else demodulate bag clause table
in
if List.exists (Clauses.are_alpha_eq_cl clause) g_actives then None else
- (debug (lazy (Pp.pp_clause clause));
if (is_goal_trivial clause)
then raise (Success (bag, maxvar, clause))
else
| None -> Some (bag,clause)
| Some (bag,maxvar,cl,subst) ->
prerr_endline "Goal subsumed";
- raise (Success (bag,maxvar,cl)))
+ raise (Success (bag,maxvar,cl))
(*
else match is_subsumed ~unify:true bag maxvar clause table with
| None -> Some (bag, clause)
(* this is OK for both the sup_left and sup_right inference steps *)
let superposition table varlist is_pos subterm pos context =
let cands = IDX.DT.retrieve_unifiables table subterm in
- HExtlib.filter_map
+ let res = HExtlib.filter_map
(fun (dir, is_cand_pos, _, (id,nlit,plit,vl,_ (*as uc*))) ->
match nlit,plit with
| [],[Terms.Equation (l,r,_,o),_] ->
(let side, newside = if dir=Terms.Left2Right then l,r else r,l in
+ debug (lazy (Pp.pp_foterm subterm));
+ debug (lazy (Pp.pp_foterm side));
try
let subst =
Unif.unification (* (varlist@vl)*) [] subterm side
if o <> Terms.Lt && o <> Terms.Eq then
Some (context newside, subst, id, pos, dir)
else
- ((*prerr_endline ("Filtering: " ^
- Pp.pp_foterm side ^ " =(< || =)" ^
- Pp.pp_foterm newside);*)None)
+ (debug (lazy "Filtering out..."); None)
else
Some (context newside, subst, id, pos, dir)
with FoUnif.UnificationFailure _ -> None)
| _ -> assert false)
(IDX.ClauseSet.elements cands)
+ in
+ debug (lazy (string_of_int (List.length (IDX.ClauseSet.elements cands)) ^ " candidates"));
+ debug (lazy (string_of_int (List.length res) ^ " results"));
+ res
;;
(* Superposes selected equation with equalities in table *)
List.fold_left (superpose_literal id vl atable false)
(bag,maxvar,[],List.tl nlit,[]) nlit
in
- debug (lazy "Superposed goal with active clauses");
+ debug (lazy (string_of_int (List.length new_goals) ^ " new goals"));
(* We simplify the new goals with active clauses *)
let bag, new_goals =
List.fold_left