Skip to content

Commit 15c5e00

Browse files
authored
add(FirstOrder): Independence of Yablo Sentences (#514)
1 parent ae5722e commit 15c5e00

File tree

2 files changed

+176
-0
lines changed

2 files changed

+176
-0
lines changed

Foundation.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import Foundation.FirstOrder.Internal.Consistency
7070
import Foundation.FirstOrder.Internal.WitnessComparison
7171
import Foundation.FirstOrder.Internal.RosserProvability
7272

73+
7374
import Foundation.FirstOrder.Incompleteness.First
7475
import Foundation.FirstOrder.Incompleteness.Halting
7576

@@ -78,6 +79,7 @@ import Foundation.FirstOrder.Incompleteness.Second
7879
import Foundation.FirstOrder.Incompleteness.Examples
7980

8081
import Foundation.FirstOrder.Incompleteness.Tarski
82+
import Foundation.FirstOrder.Incompleteness.Yablo
8183

8284
import Foundation.FirstOrder.Hauptsatz
8385

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
/-
2+
Formalizing Yablo's Paradox.
3+
4+
*References*
5+
- C. Cieśliński, R. Urbaniak, "Gödelizing the Yablo Sequence"
6+
-/
7+
8+
import Foundation.FirstOrder.Internal.DerivabilityCondition
9+
10+
namespace LO.PeanoMinus
11+
12+
open ORingStruc
13+
14+
variable {M : Type*} [ORingStruc M] [M ⊧ₘ* 𝐏𝐀⁻]
15+
16+
lemma numeral_lt_of_numeral_succ_lt {n : ℕ} {m : M} : (numeral (n + 1) : M) < m → (numeral n < m) := by
17+
apply PeanoMinus.lt_trans;
18+
simp;
19+
20+
end LO.PeanoMinus
21+
22+
23+
namespace LO.ISigma1.Metamath.InternalArithmetic
24+
25+
open FirstOrder Arithmetic PeanoMinus IOpen ISigma0
26+
27+
variable {V : Type*} [ORingStruc V] [V ⊧ₘ* 𝐈𝚺₁]
28+
29+
lemma substNumeral_app_quote_nat_model (σ : Semisentence ℒₒᵣ 1) (n : ℕ) :
30+
substNumeral ⌜σ⌝ (n : V) = ⌜(σ/[.numeral n] : Sentence ℒₒᵣ)⌝ := by
31+
simp [
32+
substNumeral, Semiformula.empty_quote_def, Semiformula.quote_def,
33+
Rewriting.embedding_substs_eq_substs_coe₁
34+
];
35+
36+
lemma substNumeral_app_quote_nat_Nat (σ : Semisentence ℒₒᵣ 1) (n : ℕ) :
37+
substNumeral ⌜σ⌝ n = ⌜(σ/[.numeral n] : Sentence ℒₒᵣ)⌝ := by
38+
simp [
39+
substNumeral, Semiformula.empty_quote_def, Semiformula.quote_def,
40+
Rewriting.embedding_substs_eq_substs_coe₁
41+
];
42+
43+
end LO.ISigma1.Metamath.InternalArithmetic
44+
45+
46+
47+
48+
49+
namespace LO.FirstOrder
50+
51+
open FirstOrder Arithmetic PeanoMinus IOpen ISigma0 ISigma1 Metamath InternalArithmetic
52+
53+
namespace Theory
54+
55+
variable {V} [ORingStruc V] [V ⊧ₘ* 𝐈𝚺₁]
56+
{T U : ArithmeticTheory} [T.Δ₁]
57+
58+
def YabloSystem (T : ArithmeticTheory) [T.Δ₁] (φ n : V) : Prop := ∀ m, n < m → ¬T.Provable (substNumeral φ m)
59+
60+
def yabloSystem (T : ArithmeticTheory) [T.Δ₁] : 𝚷₁.Semisentence 2 := .mkPi
61+
“φ n. ∀ m, n < m → ∀ nσ, !ssnum nσ φ m → ¬!T.provable (nσ)”
62+
63+
lemma yabloSystem.defined : 𝚷₁-Relation[V] (T.YabloSystem) via T.yabloSystem := by
64+
intro f;
65+
simp [Theory.YabloSystem, Theory.yabloSystem];
66+
67+
@[simp]
68+
lemma yabloSystem.eval (v) : Semiformula.Evalbm V v T.yabloSystem.val ↔ T.YabloSystem (v 0) (v 1) := yabloSystem.defined.df.iff v
69+
70+
instance yabloSystem.definable : 𝚷₁-Relation[V] (T.YabloSystem) := yabloSystem.defined.to_definable
71+
72+
def yablo (T : ArithmeticTheory) [T.Δ₁] : ArithmeticSemisentence 1 := parameterizedFixedpoint (T.yabloSystem)
73+
74+
abbrev yabloPred (T : ArithmeticTheory) [T.Δ₁] (n : ℕ) : ArithmeticSentence := T.yablo/[.numeral n]
75+
76+
end Theory
77+
78+
79+
80+
namespace Arithmetic
81+
82+
variable {T : ArithmeticTheory} [T.Δ₁]
83+
84+
open Theory
85+
86+
-- Lemmata
87+
section
88+
89+
variable {V : Type} [ORingStruc V] [V ⊧ₘ* 𝐈𝚺₁]
90+
variable {U : ArithmeticTheory} [𝐈𝚺₁ ⪯ U]
91+
92+
lemma yablo_diagonal : U ⊢!. ∀' (T.yablo ⭤ (T.yabloSystem)/[⌜T.yablo⌝, #0]) := parameterized_diagonal₁ _
93+
94+
lemma yablo_diagonal_modeled (n : V) : V ⊧/![n] (T.yablo) ↔ ∀ m, n < m → ¬T.Provable (substNumeral ⌜T.yablo⌝ m) := by
95+
have : V ⊧ₘ₀ ∀' (T.yablo ⭤ ↑(T.yabloSystem)/[⌜T.yablo⌝, #0]) := models_of_provable₀ (T := 𝐈𝚺₁) (by assumption) $ yablo_diagonal;
96+
have : ∀ (n : V), V ⊧/![n] (T.yablo) ↔ T.YabloSystem ⌜T.yablo⌝ n := by simpa [models₀_iff, Matrix.comp_vecCons'] using this;
97+
apply this;
98+
99+
lemma yablo_diagonal_neg_modeled (n : V) : ¬V ⊧/![n] (T.yablo) ↔ ∃ m, n < m ∧ T.Provable (substNumeral ⌜T.yablo⌝ m) := by
100+
simpa using yablo_diagonal_modeled n |>.not;
101+
102+
lemma iff_yablo_provable (n : ℕ) : U ⊢!. T.yabloPred n ↔ U ⊢!. “∀ m, ↑n < m → ∀ nσ, !ssnum nσ ⌜T.yablo⌝ m → ¬!T.provable (nσ)” := by
103+
suffices U ⊢!. T.yablo/[n] ⭤ “∀ m, ↑n < m → ∀ nσ, !ssnum nσ ⌜T.yablo⌝ m → ¬!T.provable (nσ)” by
104+
constructor <;> . intro h; cl_prover [h, this];
105+
apply oRing_provable₀_of.{0};
106+
intro V _ _;
107+
haveI : V ⊧ₘ* 𝐈𝚺₁ := ModelsTheory.of_provably_subtheory V 𝐈𝚺₁ U inferInstance;
108+
haveI : V ⊧/![ORingStruc.numeral n] (T.yablo) ↔ T.YabloSystem ⌜T.yablo⌝ (ORingStruc.numeral n) := yablo_diagonal_modeled _;
109+
simpa [models_iff, Matrix.constant_eq_singleton, Matrix.comp_vecCons'] using this;
110+
111+
lemma iff_neg_yablo_provable (n : ℕ) : U ⊢!. ∼(T.yabloPred n) ↔ U ⊢!. “∃ m, ↑n < m ∧ ∃ nσ, !ssnum nσ ⌜T.yablo⌝ m ∧ !T.provable (nσ)” := by
112+
suffices U ⊢!. ∼T.yablo/[n] ⭤ “∃ m, ↑n < m ∧ ∃ nσ, !ssnum nσ ⌜T.yablo⌝ m ∧ !T.provable (nσ)” by
113+
constructor <;> . intro h; cl_prover [h, this];
114+
apply oRing_provable₀_of.{0};
115+
intro V _ _;
116+
haveI : V ⊧ₘ* 𝐈𝚺₁ := ModelsTheory.of_provably_subtheory V 𝐈𝚺₁ U inferInstance;
117+
haveI : ¬V ⊧/![ORingStruc.numeral n] (T.yablo) ↔ ∃ m, ORingStruc.numeral n < m ∧ Provable T (substNumeral ⌜T.yablo⌝ m) := yablo_diagonal_neg_modeled _;
118+
simpa [models_iff, Matrix.constant_eq_singleton, Matrix.comp_vecCons'] using this;
119+
120+
lemma provable_greater_yablo {n m : ℕ} (hnm : n < m) : U ⊢!. T.yabloPred n ➝ T.yabloPred m := by
121+
apply oRing_provable₀_of.{0};
122+
intro V _ _;
123+
haveI : V ⊧ₘ* 𝐈𝚺₁ := ModelsTheory.of_provably_subtheory V 𝐈𝚺₁ U inferInstance;
124+
suffices
125+
(∀ m, ORingStruc.numeral n < m → ¬Provable T (substNumeral ⌜yablo T⌝ m)) →
126+
(∀ k, ORingStruc.numeral m < k → ¬Provable T (substNumeral ⌜yablo T⌝ k))
127+
by simpa [models_iff, Matrix.constant_eq_singleton, Matrix.comp_vecCons', yablo_diagonal_modeled] using this;
128+
intro h k hmk;
129+
apply h;
130+
apply PeanoMinus.lt_trans _ _ _ (by simpa) hmk;
131+
132+
end
133+
134+
135+
-- Main Results
136+
section
137+
138+
variable [𝐈𝚺₁ ⪯ T] {n : ℕ}
139+
140+
theorem yablo_unprovable [Entailment.Consistent T] : T ⊬. (T.yabloPred n) := by
141+
by_contra! hC;
142+
have H₁ : T ⊢!. T.provabilityPred (T.yabloPred (n + 1)) := by
143+
apply Entailment.WeakerThan.pbl $ provable_D1 (T := T) ?_;
144+
apply provable_greater_yablo (show n < n + 1 by omega) ⨀ hC;
145+
have H₂ : T ⊢!. ∼T.provabilityPred (T.yabloPred (n + 1)) := by
146+
apply oRing_provable₀_of.{0};
147+
intro V _ _;
148+
haveI : V ⊧ₘ* 𝐈𝚺₁ := ModelsTheory.of_provably_subtheory V 𝐈𝚺₁ T inferInstance;
149+
suffices ¬T.Provable (substNumeral ⌜T.yablo⌝ (n + 1 : V)) by
150+
simpa [provabilityPred, models_iff, ←substNumeral_app_quote_nat_model];
151+
have : ∀ (x : V), ORingStruc.numeral n < x → ¬T.Provable (substNumeral ⌜T.yablo⌝ x) := by
152+
have : V ⊧ₘ₀ “∀ m, ↑n < m → ∀ nσ, !ssnum nσ ⌜T.yablo⌝ m → ¬!T.provable (nσ)” :=
153+
models_of_provable₀ (T := T) (by assumption) $ (iff_yablo_provable n |>.mp hC);
154+
simpa [models_iff, Matrix.comp_vecCons'] using this;
155+
apply this (n + 1) (by simp [numeral_eq_natCast]);
156+
apply Entailment.Consistent.not_bot (𝓢 := T.toAxiom);
157+
. infer_instance;
158+
. cl_prover [H₁, H₂];
159+
160+
theorem yablo_unrefutable [T.SoundOnHierarchy 𝚺 1] : T ⊬. ∼T.yabloPred n := by
161+
by_contra! hC;
162+
haveI := T.soundOnHierarchy 𝚺 1 (iff_neg_yablo_provable n |>.mp hC) $ by simp;
163+
obtain ⟨k, _, hk⟩ : ∃ k, n < k ∧ Provable T (substNumeral ⌜T.yablo⌝ k) := by simpa [models₀_iff, Matrix.comp_vecCons'] using this;
164+
rw [substNumeral_app_quote_nat_Nat, provable_iff_provable₀ (T := T)] at hk;
165+
exact yablo_unprovable hk;
166+
167+
theorem yablo_independent [T.SoundOnHierarchy 𝚺 1] : Entailment.Independent (T : ArithmeticAxiom) (T.yabloPred n) := ⟨yablo_unprovable, yablo_unrefutable⟩
168+
169+
end
170+
171+
end Arithmetic
172+
173+
174+
end LO.FirstOrder

0 commit comments

Comments
 (0)