Tautologies, contradictions and SAT in first order logic
We saw the importance of tautologies in our investigations into
propositional logic. Recall:
A formula is called a tautology if it is true
under all interpretations.
For propositional logic,
formula F has only a finite number of possible interpretations,
so we had the option of proof by exhaution - explicitly checking
F for every possible interpretation. In the same way, we could
check for F being a contradiction (false for every
interpretation) or SAT solve (find an interpretation satisfying
F) by testing all possible interpretations, one by one.
For first order logic this is not, in general, possible. Why?
Because there are infinitely many possible interpretations.
This leaves us with two options, both of which are big topics:
-
We can rely on deduction to discover new truths.
-
We can restrict the constants, functions, predicates and the
formulas that define their behavior (called axioms)
to some set where more direct ways of SAT solving or
tautology checking are possible. Such a restriction is
called a theory.
Examples of proofs with first-order logic deductions
Now we can prove something a bit more complicated ... like the
fact that the mother of Socrates is mortal. Note that this
requires us to specialize a universally quantified variable
not to a constant, but to the function expression
mother(socrates).
Given: ∀x [IsHuman(x) => IsMortal(x)], ∀y [IsHuman(y) => IsHuman(mother(y))], and IsHuman(socrates)
Prove: IsMortal(mother(socrates))
1: ∀y [IsHuman(y) => IsHuman(mother(y))] [given]
2: IsHuman(socrates) [given]
3: IsHuman(socrates) => IsHuman(mother(socrates)) [specializing y to socrates in 1]
4: IsHuman(mother(socrates)) [modus ponens with 3 and 2]
5: ∀x [IsHuman(x) => IsMortal(x)] [given]
6: IsHuman(mother(socrates)) => IsMortal(mother(socrates)) [specializing x to mother(socrates) in 5]
7: IsMortal(mother(socrates)) [modus ponens with 6 and 4]
Finally, we will look at a proof that has us using existential introduction:
Given: ∀x [∃y [ChildOf(y,x)] => IsWorried(x)], and ChildOf(steve,socrates)
Prove: IsWorried(socrates)
1: ∀x [∃y [ChildOf(y,x)] => IsWorried(x)] [given]
2: ∃y [ChildOf(y,socrates)] => IsWorried(socrates) [specializing x to socrates in 1]
3: ChildOf(steve,socrates) [given]
4: ∃y [ChildOf(y,socrates)] [existential introduction on 3 using y for steve]
5: IsWorried(socrates) [modus ponens on 2 and 4]