CS1950Y Lecture 24: Propositional Resolution
April 9th, 2018


Propositional Resolution

What does alloy give us?

Either unsat (with a core) or an example (an instance).
What if, instead of that, we could get a proof that something is unsatisfiable?

When we are talking about proofs today, we are not talking about cs22 style proofs, but rather a formal argument. An instance witnesses satisfiability. A proof witnesses unsatisfiability.

Let's look at the example p => q and p. What else do we know holds true? q! This method of reasoning is called modus ponens.

Let's look at another example, where we know it is raining, it's monday, if it's raining we have an umbrella, and that we don't have an umbrella. Does it hold? No, it's inconsistent. Here is how to reason about it via modus ponens: if raining implies umbrella and it is raining, then, by modus ponens, we have an umbrella. But, in order to get to falsehood (or the empty clause), we need a new rule that takes umbrella and not umbrella and results in the empty clause.

Resolution

Resolution only has one rule, which is sort of a generalization of modus ponens.

If we have p => q and q => r, then we can conclude p => r. Let's rewrite these to be not p or q and not q ∨ r, then not p ∨ r, but wait, we have both q and not q! What does this mean about p and r? If q is false, then not p needs to be true (p is false). If q is true, then r needs to be true.

Let's take a look at another example:

a1 ∨ a2 ∨ ... an ∨ L
b1 ∨ b2 ∨ ... bn ∨ not L
___________
?

not(a1 ∨ ... ∨ an) => L
L => b1 ∨ ... ∨ bn
___________
not(a1 ∨ ... ∨ an) => b1 ∨ ... ∨ bn


This works, because if L is going to be true then one of the b's has to be true, and if L is false, then one of the a's has to be true. This is the resolution rule!

Resolution has the machinery to generate falsehood, but does it have the machinery to generate any consequence?

Tim's question: Give me some constraints, and give me some consequence, such that you cannot get from knowledge and constants to the consequence through resolution. Is resolution capable of manufacturing any formula? Is it complete? Prove it to me!

If we know p is true and q is true, and the consequence is p and q. But resolution can't handle this consequence! Instead, we add the thing we want to prove (the consequence) to our knowledge base, negated.

This is a general rule. If we want to prove a1 ∧ ... ∧ an => c, we just add ∧ not c to our knowledge base. A resolution proof is just witnessing unsatisfiability.

What do we have to be afraid of when using resolution? Exponential blow up of clauses. Not only using exponential time, but also exponential space. So, we could write a sat solver using this, but it would be even slower than your DPLL implementation. But, if you really want to use a proof, you should use a resolution sat solver.

Why might you want a proof system that is incomplete?
It's going to take up a lot less space! If we have enough directed completeness to get us to the empty clause, we don't need to generate all of the possible clauses.

Word of caution: let's say we are applying resolution, and we have these two formulas: not p ∨ not q and p ∨ q. It's going to be really tempting to resolve on both of these literals at the same time, which means we remove both p and q from these formulas and we are left with the empty clause. But - if we have p is true and q is false, this satisfies both formulas! So the formula is satisfiable. If we resolve on just p, we are left with q ∨ not q, which is always satisfiable.

The point is, we have this rule and we can apply it, but we can always think of a proof using resolution as a tree. Think of the clauses as leaves, which ultimately leads to the root (for our case it is traditionally drawn on the bottom) which is a new clause, and if we are doing a refutation it will always be the empty clause.