|
| 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