Craig interpolation
Proposition
DefinitionAtoms of a proposition#✓fully proved
The atoms of a proposition \(A\) form the finite set of atoms occurring in \(A\): an atom \(x\) has the single atom \(x\), and the atoms of \(B \wedge C\), \(B \vee C\) and \(B \to C\) are the atoms of \(B\) together with the atoms of \(C\).
def atoms : Proposition Atom → Finset Atom
| atom x => {x}
| and A B => A.atoms ∪ B.atoms
| or A B => A.atoms ∪ B.atoms
| imp A B => A.atoms ∪ B.atoms
TheoremThe truth value depends only on the atoms#✓fully proved
If two Boolean valuations \(v\) and \(w\) agree on every atom of a proposition \(A\), then \(A\) has the same truth-table value under \(v\) as under \(w\).
theorem evalBool_congr {A : Proposition Atom} {v w : Atom → Bool}
(h : ∀ x ∈ A.atoms, v x = w x) : A.evalBool v = A.evalBool w
Uses 2 · Used by 1
DefinitionSubstituting a truth value for an atom#✓fully proved
For an atom \(p\), a Boolean \(b\) and a proposition \(A\), the proposition \(A[p := b]\) is obtained from \(A\) by replacing every occurrence of the atom \(p\) by the constant \(\top\), written \(\bot \to \bot\), if \(b\) is true, and by \(\bot\) if \(b\) is false.
def fixAtom (p : Atom) (b : Bool) : Proposition Atom → Proposition Atom
| atom x => if x = p then (if b then (⊥ → ⊥ : Proposition Atom) else ⊥) else atom x
| and A B => and (fixAtom p b A) (fixAtom p b B)
| or A B => or (fixAtom p b A) (fixAtom p b B)
| imp A B => imp (fixAtom p b A) (fixAtom p b B)
DefinitionBoolean quantification over an atom#✓fully proved
For an atom \(p\) and a proposition \(A\), the Boolean quantification \(\exists p.\, A\) is the disjunction \(A[p := \top] \vee A[p := \bot]\), where \(A[p := \top]\) and \(A[p := \bot]\) replace the atom \(p\) in \(A\) by the constant \(\top = (\bot \to \bot)\) and by \(\bot\) respectively.
def elimAtom (p : Atom) (A : Proposition Atom) : Proposition Atom :=
or (A.fixAtom p true) (A.fixAtom p false)
Uses 1 · Used by 2
DefinitionBoolean quantification over a list of atoms#✓fully proved
For a list of atoms \(p_1, \dots, p_n\) and a proposition \(A\), the iterated Boolean quantification \(\exists p_1 \cdots p_n.\, A\) is \(\exists p_1.\, \exists p_2.\, \cdots \exists p_n.\, A\): \(A\) is quantified over \(p_n\) first and over \(p_1\) last, and for the empty list the result is \(A\) itself.
def elimAtoms : List Atom → Proposition Atom → Proposition Atom
| [], A => A
| p :: ps, A => (elimAtoms ps A).elimAtom p
Uses 1 · Used by 2
TheoremTruth of a Boolean quantification over a list of atoms#✓fully proved
Let \(p_1, \dots, p_n\) be a list of atoms that does not contain \(\bot\), let \(A\) be a proposition and let \(v\) be a Boolean valuation with \(v(\bot)\) false. Then the iterated Boolean quantification \(\exists p_1 \cdots p_n.\, A\) is true under \(v\) if and only if \(A\) is true under some valuation \(w\) that agrees with \(v\) on every atom not in the list.
theorem evalBool_elimAtoms {ps : List Atom} (hps : ⊥ ∉ ps) (A : Proposition Atom)
{v : Atom → Bool} (hv : v ⊥ = false) :
(elimAtoms ps A).evalBool v = true ↔
∃ w : Atom → Bool, (∀ x, x ∉ ps → w x = v x) ∧ A.evalBool w = true
def elimAtoms : List Atom → Proposition Atom → Proposition Atom
| [], A => A
| p :: ps, A => (elimAtoms ps A).elimAtom p
CSLibExt/Logics/Propositional/NaturalDeduction/Interpolation.lean:146
Uses 4 · Used by 1
PL
TheoremCraig interpolation, semantic form#✓fully proved
Let \(A\) and \(B\) be propositions such that every Boolean valuation \(v\) with \(v(\bot)\) false that makes \(A\) true also makes \(B\) true. Then there is a proposition \(I\) whose atoms all lie among the atoms common to \(A\) and \(B\) together with \(\bot\), such that every valuation \(v\) with \(v(\bot)\) false that makes \(A\) true makes \(I\) true, and every valuation \(v\) with \(v(\bot)\) false that makes \(I\) true makes \(B\) true.
theorem exists_interpolant {A B : Proposition Atom}
(h : ∀ v : Atom → Bool, v ⊥ = false → A.evalBool v = true → B.evalBool v = true) :
∃ I : Proposition Atom, I.atoms ⊆ insert ⊥ (A.atoms ∩ B.atoms) ∧
(∀ v : Atom → Bool, v ⊥ = false → A.evalBool v = true → I.evalBool v = true) ∧
(∀ v : Atom → Bool, v ⊥ = false → I.evalBool v = true → B.evalBool v = true)
Uses 6 · Used by 1
TheoremCraig interpolation for classical natural deduction#✓fully proved
Let \(A\) and \(B\) be propositions such that \(A \to B\) is derivable without assumptions in classical propositional logic \(\mathrm{CPL}\) (natural deduction with the axioms \(\neg\neg C \to C\)). Then there is a proposition \(I\) whose atoms all lie among the atoms common to \(A\) and \(B\) together with \(\bot\), such that \(A \to I\) and \(I \to B\) are both derivable without assumptions in \(\mathrm{CPL}\).
theorem exists_interpolant_cpl {A B : Proposition Atom}
(h : DerivableIn (CPL Atom) (A → B : Proposition Atom)) :
∃ I : Proposition Atom, I.atoms ⊆ insert ⊥ (A.atoms ∩ B.atoms) ∧
DerivableIn (CPL Atom) (A → I : Proposition Atom) ∧
DerivableIn (CPL Atom) (I → B : Proposition Atom)
Uses 4
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.