// try to find a unit clause
SymbolValuePair svp = findPureSymbolValuePair(clauseList, model,
symbols);
if (svp.notNull()) {
List<Symbol> newSymbols = new ArrayList<Symbol>(symbols);
newSymbols.remove(new Symbol(svp.symbol.getValue()));
Model newModel = model.extend(new Symbol(svp.symbol.getValue()),
svp.value.booleanValue());
return dpll(clauses, newSymbols, newModel);
}
SymbolValuePair svp2 = findUnitClause(clauseList, model, symbols);
if (svp2.notNull()) {
List<Symbol> newSymbols = new ArrayList<Symbol>(symbols);
newSymbols.remove(new Symbol(svp2.symbol.getValue()));
Model newModel = model.extend(new Symbol(svp2.symbol.getValue()),
svp2.value.booleanValue());
return dpll(clauses, newSymbols, newModel);
}
Symbol symbol = (Symbol) symbols.get(0);
// System.out.println("default behaviour selecting " + symbol);
List<Symbol> newSymbols = new ArrayList<Symbol>(symbols);
newSymbols.remove(0);
return (dpll(clauses, newSymbols, model.extend(symbol, true)) || dpll(
clauses, newSymbols, model.extend(symbol, false)));