Kleene 98: {∃x:T.((A x) ⇒ B) ⇔ ∀x.T:{A x} ⇒ B}
The extract of the forward direction shows the constructive part of the proof. We can deconstruct the proof to yield {B} as our goal. We will need to keep this squashed until we are able to open the inner squashed term. We can then further decompose the hypotheses so we're left with x: T, f : (A x)⇒B, and {A x}. We then open the squashed hypothesis and apply f to get evidence for B.
The backwards direction can not be proved constructively. We must use classical contradiction in two instances for this proof. The first instance we must use classical contradiction is at the goal {∃x:T.((A x) ⇒ B)}. We need to use classical contradiction here because we need to later apply that instantiated term. However right after we use the classical contradiction, we apply f : ∀x:T.{A x} ⇒ B, which will give use two subgoals, prove the assertion then the implication. To solve the assertion we need to use another classical contradiction on the inner squashed term. Then we can apply our first classical contradiction instantiated term. We ultimately prove this subgoal but applying ¬(A x) to (A x) and by ex falso quodlibet we can prove any goal. The second subgoal falls out without having to use the classical contradiction term. Kleene theorem 99 is similar to this.
{∃x:T.((A x) ⇒ B) ⇒ ∀x:T.{A x} ⇒ B} | by λ(f.____) |
f : ∃x:T.((A x)⇒ B) ⊢ {∀x:T.{A x} ⇒ B} | by λ(g.____) |
f : ∃x:T.((A x)⇒ B), g : ∀x:T.{A x} ⊢ {B} | by spread(f; x,h.___) |
x : T, h : (A x)⇒ B, g : ∀x:T.{A x} ⊢ {B} | by apseq(g;x; ax.____) |
x : T, h : (A x)⇒ B, ax : {A x} ⊢ {B} | by Open {A x} and then {B} |
x : T, h : (A x)⇒ B, ax : A x ⊢ B | by apseq(h;ax;b.b) |
(T ⇒ (∀[A:T → ℙ]. ∀[B: ℙ]. {∀x:T.{A x} ⇒ B ⇒ ∃x:T.((A x) ⇒ B)} | |
t : T ⊢ {∀x:T.{A x} ⇒ B ⇒ ∃x:T.((A x) ⇒ B)} | by λ(f.___) |
t : T, f : ∀x:T.{A x} ⇒ B ⊢ {∃x:T.((A x) ⇒ B)} | by (CC{∃x:T.((A x) ⇒ B);h.____) Classical contradiction |
t : T, f : ∀x:T.{A x} ⇒ B, h : ¬(∃x:T.((A x) ⇒ B) ⊢ {∃x:T.((A x) ⇒ B)} | by apseq(f; slot1 ;b. slot2 ) |
t : T, h : ¬(∃x:T.((A x) ⇒ B) ⊢ ∀x:T.{A x} | by λ(x.___) for slot1 |
t : T, h : ¬(∃x:T.((A x) ⇒ B) ⊢ {A x} | by (CC{A};na.___) Classical contradiction |
t : T, h : ¬(∃x:T.((A x) ⇒ B), na : ¬A ⊢ {A x} | by apseq(h;___;False.any(..)) |
t : T, nax : ¬(A x) ⊢ ∃x:T.((A x) ⇒ B | by pair(x;___) |
t : T, nax : ¬(A x) ⊢ (A x) ⇒ B | by λ(ax.___) |
t : T, nax : ¬(A x), ax : (A x) ⊢ B | by apseq(nax;ax;False.any(..)) |
t : T, b : B, h : ¬(∃x:T.((A x) ⇒ B) ⊢ {∃x:T.((A x) ⇒ B)} | by Rename 't' to 'x' then unsquash goal for slot2 |
x : T, b : B, h : ¬(∃x:T.((A x) ⇒ B) ⊢ ∃x:T.((A x) ⇒ B) | by pair(x;___) |
x : T, b : B, h : ¬(∃x:T.((A x) ⇒ B) ⊢ (A x) ⇒ B | by λ(ax.___) |
x : T, b : B, h : ¬(∃x:T.((A x) ⇒ B), ax : (A x) ⊢ B | by b |
Nuprl Proof
Table of Contents