1
$\begingroup$

I have this formula:

F = (¬A ∨ B) ∧ D ∧ (¬D ∨ E ∨ ¬C) ∧ C ∧ (¬C ∨ E ∨ ¬B) ∧ ¬B.

And I converted into a horns formula:

F = (A -> B) ∧ ( 1 -> D) ∧ (D ∧ C -> E) ∧ (1 -> C) ∧ (C ∧ B -> E) ∧ (B -> 0)

I now want to tell if this is satisfiable but I'm not sure how to do that. Any help will be much appreciated. Thanks!

  • 0
    Yes, your reasoning is correct. One may add that in the satisfying assignment all the variables that are not marked may be taken as false.2017-02-01
  • 0
    I would note that the procedure you describe is more or less the bottom up evalutation of a Datalog(/Prolog) program. Indeed, one way to check would be to encode write the Horn clauses in a Datalog interpreter replacing 0 with a (fresh) predicate, say Z, and then just query whether Z holds in the given database.2017-02-01

1 Answers 1

0

One style of reasoning is forward propagation.

Iterate over the clauses, and whenever you find one whose preconditions have been satisfied (in the first iteration, $1\rightarrow D$ would be one) note down its consequent as satisfied and delete the clause.

Then once you reach the end of the list start again from the beginning, until you do a complete iteration in which no further consequences could have been satisfied.

For example, in the first iteration you would deduce $D, C$.

In the second $E$, etc.

Does that make sense to you?