// remove from clauses the clauses that are subsumed by clauses in pruningSet public CNF pruneWith(Collection<Clause> clauses, Collection<Clause> pruningSet) throws ParseException { CNF result = new CNF(); if (!pruneInDepth) for (Clause cl : clauses) { boolean toKeep = true; for (Clause cl2 : pruningSet) { if (cl2.subsumes(cl)) { toKeep = false; break; } } if (toKeep) result.add(cl); } else { result.addAll( CFSolver.pruneClauseSetFromCons( getEnv(), clauses, pruningSet, true, theory.getDepthLimit(), -1, stats.getSolarCtrList())); } return result; }
public Collection<Clause> computeNewCons(Collection<Clause> newCl) throws ParseException { if (Thread.currentThread().isInterrupted()) return null; CNF result = new CNF(); // prune(newCl); CNF axioms = new CNF(theory.getAxioms()); if (newConsAsAxiom) axioms.addAll(listCsq); else axioms.addAll(receivedCl); CNF prunedTC = pruneWith(newCl, axioms); if (newConsAsAxiom) prunedTC = pruneWith(prunedTC, receivedCl); else prunedTC = pruneWith(prunedTC, listCsq); if (verbose) { System.out.println(this + " receives " + newCl); System.out.println("After pruning " + prunedTC); System.out.println("Input Languages : " + inputLanguages); } if (prunedTC.isEmpty()) return result; // determine pField as LP, Output Language and reduc(newCl, OutputL) PField originalPField = theory.getPField(); PField computationPField = addReduc(outputLanguage, newCl); computationPField = IndepPField.mergeWith( getEnv(), getOptions(), computationPField, originalPField, IndepPField.MRG_UNION_INITFIT); if (Thread.currentThread().isInterrupted()) return null; // compute newcarc SolProblem pb = new SolProblem(getEnv(), getOptions(), axioms, prunedTC, computationPField); pb.setDepthLimit(theory.getDepthLimit()); boolean incremental = false; boolean trueNC = false; CFSolver.solveToClause(pb, -1, stats.getSolarCtrList(), result, incremental, trueNC); if (Thread.currentThread().isInterrupted()) return null; // update receivedCl (after computation in case so that original state is used during it) receivedCl = pruneWith(receivedCl, prunedTC); receivedCl.addAll(prunedTC); return result; }