def test_literal(): assert literal_symbol(True) is True assert literal_symbol(False) is False assert literal_symbol(A) is A assert literal_symbol(~A) is A pytest.raises(ValueError, lambda: literal_symbol(A + B))
def find_unit_clause(clauses, model): """ A unit clause has only 1 variable that is not bound in the model. >>> from diofant import symbols >>> from diofant.abc import A, B, D >>> from diofant.logic.algorithms.dpll import find_unit_clause >>> find_unit_clause([A | B | D, B | ~D, A | ~B], {A:True}) (B, False) """ for clause in clauses: num_not_in_model = 0 for literal in disjuncts(clause): sym = literal_symbol(literal) if sym not in model: num_not_in_model += 1 P, value = sym, not (literal.func is Not) if num_not_in_model == 1: return P, value return None, None