if (n.is(LogOp.Operator.OR)) {
// OR with only LITS
ILogical[] children = n.getChildren();
HashMap<BoolVar, ILogical> lits = new HashMap<BoolVar, ILogical>();
for (int i = 0; i < children.length; i++) {
BoolVar var = extract(children[i])[0];
var = var.isNot() ? var.not() : var;
if (lits.containsKey(var)) {
ILogical prev = lits.get(var);
if (prev.isNot() != children[i].isNot()) {
return solver.ONE;
}
} else {
lits.put(var, children[i]);
}
}
} else if (!n.hasOrChild()) {
// AND with only LITS
ILogical[] children = n.getChildren();
HashMap<BoolVar, ILogical> lits = new HashMap<BoolVar, ILogical>();
for (int i = 0; i < children.length; i++) {
BoolVar var = extract(children[i])[0];
var = var.isNot() ? var.not() : var;
if (lits.containsKey(var)) {
ILogical prev = lits.get(var);
if (prev.isNot() != children[i].isNot()) {
return solver.ZERO;
}