// 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;
 }