private void lookForUnitRefutation(OTTERAnswerHandler ansHandler, IndexedClauses idxdClauses, Clause clause, List <Clause> sos, List <Clause> usable) { List <Clause> toCheck = new List <Clause>(); if (ansHandler.isCheckForUnitRefutation(clause)) { foreach (Clause s in sos) { if (s.isUnitClause()) { toCheck.Add(s); } } foreach (Clause u in usable) { if (u.isUnitClause()) { toCheck.Add(u); } } } if (toCheck.Count > 0) { toCheck = infer(clause, toCheck); foreach (Clause t in toCheck) { // * clause <- SIMPLIFY(clause) Clause t2 = getClauseSimplifier().simplify(t); // * discard clause if it is a tautology if (t2.isTautology()) { continue; } // * if clause has no literals then a refutation has been found // or if it just contains the answer literal. if (!ansHandler.isAnswer(t2)) { // * sos <- [clause | sos] // This check ensure duplicate clauses are not // introduced which will cause the // LightestClauseHeuristic to loop continuously // on the same pair of objects. if (!sos.Contains(t2) && !usable.Contains(t2)) { idxdClauses.addClause(t2, sos, usable); } } if (ansHandler.isComplete()) { break; } } } }
private void lookForUnitRefutation(OTTERAnswerHandler ansHandler, IndexedClauses idxdClauses, Clause clause, List<Clause> sos, List<Clause> usable) { List<Clause> toCheck = new List<Clause>(); if (ansHandler.isCheckForUnitRefutation(clause)) { foreach (Clause s in sos) { if (s.isUnitClause()) { toCheck.Add(s); } } foreach (Clause u in usable) { if (u.isUnitClause()) { toCheck.Add(u); } } } if (toCheck.Count > 0) { toCheck = infer(clause, toCheck); foreach (Clause t in toCheck) { // * clause <- SIMPLIFY(clause) Clause t2 = getClauseSimplifier().simplify(t); // * discard clause if it is a tautology if (t2.isTautology()) { continue; } // * if clause has no literals then a refutation has been found // or if it just contains the answer literal. if (!ansHandler.isAnswer(t2)) { // * sos <- [clause | sos] // This check ensure duplicate clauses are not // introduced which will cause the // LightestClauseHeuristic to loop continuously // on the same pair of objects. if (!sos.Contains(t2) && !usable.Contains(t2)) { idxdClauses.addClause(t2, sos, usable); } } if (ansHandler.isComplete()) { break; } } } }