diff --git a/Foundation/FirstOrder/Bootstrapping/DerivabilityCondition.lean b/Foundation/FirstOrder/Bootstrapping/DerivabilityCondition.lean index b4c18c3c7..1e47dc45d 100644 --- a/Foundation/FirstOrder/Bootstrapping/DerivabilityCondition.lean +++ b/Foundation/FirstOrder/Bootstrapping/DerivabilityCondition.lean @@ -35,11 +35,12 @@ theorem provable_D2 {Οƒ Ο€} : π—œπšΊβ‚ ⊒ β–‘(Οƒ ➝ Ο€) ➝ β–‘Οƒ ➝ β–‘Ο€ variable (T) -noncomputable abbrev _root_.LO.FirstOrder.Theory.standardProvability : Provability π—œπšΊβ‚ T := ⟨T.provable⟩ +noncomputable abbrev _root_.LO.FirstOrder.Theory.standardProvability : Provability π—œπšΊβ‚ T where + prov := T.provable + prov_def := provable_D1 variable {T} -instance : T.standardProvability.HBL1 := ⟨provable_D1⟩ instance : T.standardProvability.HBL2 := ⟨provable_D2⟩ lemma standardProvability_def (Οƒ : Sentence L) : T.standardProvability Οƒ = T.provabilityPred Οƒ := rfl diff --git a/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Basic.lean b/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Basic.lean index 3ea65d070..3b8a1a041 100644 --- a/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Basic.lean +++ b/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Basic.lean @@ -21,7 +21,8 @@ namespace ProvabilityAbstraction structure Provability [L.ReferenceableBy Lβ‚€] (Tβ‚€ : Theory Lβ‚€) (T : Theory L) where prov : Semisentence Lβ‚€ 1 - + /-- Derivability condition `D1` -/ + prov_def {Οƒ : Sentence L} : T ⊒ Οƒ β†’ Tβ‚€ ⊒ prov/[βŒœΟƒβŒ] namespace Provability @@ -43,9 +44,7 @@ variable {Lβ‚€ L : Language} [L.ReferenceableBy Lβ‚€] {Tβ‚€ : Theory Lβ‚€} {T : Theory L} -class Provability.HBL1 (𝔅 : Provability Tβ‚€ T) where - D1 {Οƒ : Sentence L} : T ⊒ Οƒ β†’ Tβ‚€ ⊒ 𝔅 Οƒ -export Provability.HBL1 (D1) +lemma D1 {𝔅 : Provability Tβ‚€ T} {Οƒ : Sentence L} : T ⊒ Οƒ β†’ Tβ‚€ ⊒ 𝔅 Οƒ := fun h ↦ 𝔅.prov_def h class Provability.HBL2 [L.ReferenceableBy Lβ‚€] {Tβ‚€ : Theory Lβ‚€} {T : Theory L} (𝔅 : Provability Tβ‚€ T) where D2 {Οƒ Ο„ : Sentence L} : Tβ‚€ ⊒ 𝔅 (Οƒ ➝ Ο„) ➝ 𝔅 Οƒ ➝ 𝔅 Ο„ @@ -55,7 +54,7 @@ class Provability.HBL3 [L.ReferenceableBy L] {Tβ‚€ T : Theory L} (𝔅 : Provabi D3 {Οƒ : Sentence L} : Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 (𝔅 Οƒ) export Provability.HBL3 (D3) -class Provability.HBL [L.ReferenceableBy L] {Tβ‚€ T : Theory L} (𝔅 : Provability Tβ‚€ T) extends 𝔅.HBL1, 𝔅.HBL2, 𝔅.HBL3 +class Provability.HBL [L.ReferenceableBy L] {Tβ‚€ T : Theory L} (𝔅 : Provability Tβ‚€ T) extends 𝔅.HBL2, 𝔅.HBL3 class Provability.LΓΆb [L.ReferenceableBy L] {Tβ‚€ T : Theory L} (𝔅 : Provability Tβ‚€ T) where LT {Οƒ : Sentence L} : T ⊒ 𝔅 Οƒ ➝ Οƒ β†’ T ⊒ Οƒ @@ -101,31 +100,31 @@ lemma D2' [𝔅.HBL2] : Tβ‚€ ⊒ 𝔅 (Οƒ ➝ Ο„) β†’ Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 intro h; exact D2 ⨀ h; -lemma prov_distribute_imply [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ ➝ Ο„) : Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 Ο„ := D2' $ D1 h +lemma prov_distribute_imply [𝔅.HBL2] (h : T ⊒ Οƒ ➝ Ο„) : Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 Ο„ := D2' $ D1 h -lemma prov_distribute_iff [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο„) : Tβ‚€ ⊒ 𝔅 Οƒ β­€ 𝔅 Ο„ := by +lemma prov_distribute_iff [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο„) : Tβ‚€ ⊒ 𝔅 Οƒ β­€ 𝔅 Ο„ := by apply E!_intro; . exact prov_distribute_imply $ K!_left h; . exact prov_distribute_imply $ K!_right h; -lemma dia_distribute_imply [Lβ‚€.DecidableEq] [L.DecidableEq] [𝔅.HBL1] [𝔅.HBL2] +lemma dia_distribute_imply [Lβ‚€.DecidableEq] [L.DecidableEq] [𝔅.HBL2] (h : T ⊒ Οƒ ➝ Ο„) : Tβ‚€ ⊒ 𝔅.dia Οƒ ➝ 𝔅.dia Ο„ := by have : Tβ‚€ ⊒ 𝔅 (βˆΌΟ„) ➝ 𝔅 (βˆΌΟƒ) := prov_distribute_imply $ by cl_prover [h]; cl_prover [this] -lemma prov_distribute_and [𝔅.HBL1] [𝔅.HBL2] [Lβ‚€.DecidableEq] : Tβ‚€ ⊒ 𝔅 (Οƒ ⋏ Ο„) ➝ 𝔅 Οƒ ⋏ 𝔅 Ο„ := by +lemma prov_distribute_and [𝔅.HBL2] [Lβ‚€.DecidableEq] : Tβ‚€ ⊒ 𝔅 (Οƒ ⋏ Ο„) ➝ 𝔅 Οƒ ⋏ 𝔅 Ο„ := by have h₁ : Tβ‚€ ⊒ 𝔅 (Οƒ ⋏ Ο„) ➝ 𝔅 Οƒ := D2' $ D1 and₁!; have hβ‚‚ : Tβ‚€ ⊒ 𝔅 (Οƒ ⋏ Ο„) ➝ 𝔅 Ο„ := D2' $ D1 andβ‚‚!; cl_prover [h₁, hβ‚‚]; -lemma prov_distribute_and' [𝔅.HBL1] [𝔅.HBL2] [Lβ‚€.DecidableEq] : Tβ‚€ ⊒ 𝔅 (Οƒ ⋏ Ο„) β†’ Tβ‚€ ⊒ 𝔅 Οƒ ⋏ 𝔅 Ο„ := Ξ» h => prov_distribute_and ⨀ h +lemma prov_distribute_and' [𝔅.HBL2] [Lβ‚€.DecidableEq] : Tβ‚€ ⊒ 𝔅 (Οƒ ⋏ Ο„) β†’ Tβ‚€ ⊒ 𝔅 Οƒ ⋏ 𝔅 Ο„ := Ξ» h => prov_distribute_and ⨀ h -lemma prov_collect_and [𝔅.HBL1] [𝔅.HBL2] [Lβ‚€.DecidableEq] [L.DecidableEq] : Tβ‚€ ⊒ 𝔅 Οƒ ⋏ 𝔅 Ο„ ➝ 𝔅 (Οƒ ⋏ Ο„) := by +lemma prov_collect_and [𝔅.HBL2] [Lβ‚€.DecidableEq] [L.DecidableEq] : Tβ‚€ ⊒ 𝔅 Οƒ ⋏ 𝔅 Ο„ ➝ 𝔅 (Οƒ ⋏ Ο„) := by have h₁ : Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 (Ο„ ➝ Οƒ ⋏ Ο„) := prov_distribute_imply $ by cl_prover have hβ‚‚ : Tβ‚€ ⊒ 𝔅 (Ο„ ➝ Οƒ ⋏ Ο„) ➝ 𝔅 Ο„ ➝ 𝔅 (Οƒ ⋏ Ο„) := D2; cl_prover [h₁, hβ‚‚]; -lemma sound_iffβ‚€ [𝔅.HBL1] [𝔅.Soundβ‚€] : Tβ‚€ ⊒ 𝔅 Οƒ ↔ T ⊒ Οƒ := ⟨soundβ‚€, D1⟩ +lemma sound_iffβ‚€ [𝔅.Soundβ‚€] : Tβ‚€ ⊒ 𝔅 Οƒ ↔ T ⊒ Οƒ := ⟨soundβ‚€, D1⟩ end @@ -136,7 +135,7 @@ variable {𝔅 : Provability Tβ‚€ T} {Οƒ Ο„ : Sentence L} -lemma D1_shift [𝔅.HBL1] : T ⊒ Οƒ β†’ T ⊒ 𝔅 Οƒ := by +lemma D1_shift : T ⊒ Οƒ β†’ T ⊒ 𝔅 Οƒ := by intro h; apply Entailment.WeakerThan.pbl (𝓒 := Tβ‚€); apply D1 h; @@ -150,13 +149,13 @@ lemma D3_shift [𝔅.HBL3] : T ⊒ 𝔅 Οƒ ➝ 𝔅 (𝔅 Οƒ) := by lemma FLT_shift [𝔅.FormalizedLΓΆb] : T ⊒ 𝔅 (𝔅 Οƒ ➝ Οƒ) ➝ 𝔅 Οƒ := by apply Entailment.WeakerThan.pbl (𝓒 := Tβ‚€) $ FLT; -lemma prov_distribute_imply' [𝔅.HBL1] [𝔅.HBL2] (h : Tβ‚€ ⊒ Οƒ ➝ Ο„) : Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 Ο„ := +lemma prov_distribute_imply' [𝔅.HBL2] (h : Tβ‚€ ⊒ Οƒ ➝ Ο„) : Tβ‚€ ⊒ 𝔅 Οƒ ➝ 𝔅 Ο„ := prov_distribute_imply $ WeakerThan.pbl h -lemma prov_distribute_imply'' [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ ➝ Ο„) : T ⊒ 𝔅 Οƒ ➝ 𝔅 Ο„ := +lemma prov_distribute_imply'' [𝔅.HBL2] (h : T ⊒ Οƒ ➝ Ο„) : T ⊒ 𝔅 Οƒ ➝ 𝔅 Ο„ := WeakerThan.pbl $ prov_distribute_imply h -lemma sound_iff [𝔅.HBL1] [𝔅.Sound] : T ⊒ 𝔅 Οƒ ↔ T ⊒ Οƒ := ⟨sound, fun h ↦ WeakerThan.pbl (D1 h)⟩ +lemma sound_iff [𝔅.Sound] : T ⊒ 𝔅 Οƒ ↔ T ⊒ Οƒ := ⟨sound, fun h ↦ WeakerThan.pbl (D1 h)⟩ end @@ -184,7 +183,7 @@ section First variable [L.DecidableEq] variable [Tβ‚€ βͺ― T] [Consistent T] -theorem unprovable_gΓΆdel [𝔅.HBL1] : T ⊬ (gΓΆdel 𝔅) := by +theorem unprovable_gΓΆdel : T ⊬ (gΓΆdel 𝔅) := by intro h; have h₁ : T ⊒ 𝔅 (gΓΆdel 𝔅) := D1_shift h; have hβ‚‚ : T ⊒ (gΓΆdel 𝔅) β­€ βˆΌπ”… (gΓΆdel 𝔅) := WeakerThan.pbl $ gΓΆdel_spec; @@ -200,12 +199,12 @@ theorem unrefutable_gΓΆdel [GΓΆdelSound 𝔅] : T ⊬ ∼(gΓΆdel 𝔅) := by have : Β¬Consistent T := not_consistent_iff_inconsistent.mpr <| inconsistent_iff_provable_bot.mpr this contradiction; -theorem gΓΆdel_independent [𝔅.HBL1] [GΓΆdelSound 𝔅] : Independent T (gΓΆdel 𝔅) := by +theorem gΓΆdel_independent [GΓΆdelSound 𝔅] : Independent T (gΓΆdel 𝔅) := by constructor . apply unprovable_gΓΆdel . apply unrefutable_gΓΆdel -theorem first_incompleteness [𝔅.HBL1] [GΓΆdelSound 𝔅] : Incomplete T := +theorem first_incompleteness [GΓΆdelSound 𝔅] : Incomplete T := incomplete_def.mpr ⟨(gΓΆdel 𝔅), gΓΆdel_independent⟩ end First @@ -327,12 +326,12 @@ theorem unrefutable_rosser [𝔅.Rosser] : T ⊬ βˆΌπ‘ := by (N!_iff_CO!.mp hnρ) ⨀ hρ; contradiction -theorem rosser_independent [L.DecidableEq] [𝔅.HBL1] [𝔅.Rosser] : Independent T 𝐑 := by +theorem rosser_independent [L.DecidableEq] [𝔅.Rosser] : Independent T 𝐑 := by constructor . apply unprovable_gΓΆdel . apply unrefutable_rosser -theorem rosser_first_incompleteness [L.DecidableEq] (𝔅 : Provability Tβ‚€ T) [𝔅.HBL1] [𝔅.Rosser] : Incomplete T := +theorem rosser_first_incompleteness [L.DecidableEq] (𝔅 : Provability Tβ‚€ T) [𝔅.Rosser] : Incomplete T := incomplete_def.mpr ⟨gΓΆdel 𝔅, rosser_independent⟩ omit [Diagonalization Tβ‚€] [Consistent T] in diff --git a/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Refutability.lean b/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Refutability.lean new file mode 100644 index 000000000..4c64debff --- /dev/null +++ b/Foundation/FirstOrder/Bootstrapping/ProvabilityAbstraction/Refutability.lean @@ -0,0 +1,167 @@ +import Foundation.FirstOrder.Bootstrapping.RosserProvability + +namespace LO.FirstOrder + +namespace Derivation + +variable {𝓒 : SyntacticFormulas L} {Ο† : SyntacticSemiformula L 1} + +def specialize'! (t : SyntacticTerm L) (b : 𝓒 ⊒! βˆ€' Ο†) : 𝓒 ⊒! Ο†/[t] := by simpa using specialize (Ξ“ := []) t b; + +def specialize' (t : SyntacticTerm L) (b : 𝓒 ⊒ βˆ€' Ο†) : 𝓒 ⊒ Ο†/[t] := ⟨specialize'! t b.get⟩ + +end Derivation + + +namespace Theory + +variable {T : Theory L} {Ο† : Semisentence L 1} + +def specialize! (t) (b : T ⊒! βˆ€' Ο†) : T ⊒! (Ο†/[t]) := by + apply ofSyntacticProof; + sorry; + +def specialize (t) (b : T ⊒ βˆ€' Ο†) : T ⊒ (Ο†/[t]) := by + have := Derivation.specialize' t $ provable_def.mp b; + apply provable_def.mpr; + sorry; + +end Theory + + +namespace ProvabilityAbstraction + +open LO.Entailment FirstOrder Diagonalization Provability + +variable {Lβ‚€ L : Language} + +structure Refutability [L.ReferenceableBy Lβ‚€] (Tβ‚€ : Theory Lβ‚€) (T : Theory L) where + refu : Semisentence Lβ‚€ 1 + refu_def {Οƒ : Sentence L} : T ⊒ βˆΌΟƒ β†’ Tβ‚€ ⊒ refu/[βŒœΟƒβŒ] + +namespace Refutability + +variable [L.ReferenceableBy Lβ‚€] {Tβ‚€ : Theory Lβ‚€} {T : Theory L} + +@[coe] def rf (π”š : Refutability Tβ‚€ T) (Οƒ : Sentence L) : Sentence Lβ‚€ := π”š.refu/[βŒœΟƒβŒ] +instance : CoeFun (Refutability Tβ‚€ T) (fun _ ↦ Sentence L β†’ Sentence Lβ‚€) := ⟨rf⟩ + +end Refutability + + +section + +variable + {Lβ‚€ L : Language} [L.ReferenceableBy Lβ‚€] + {Tβ‚€ : Theory Lβ‚€} {T : Theory L} + +lemma R1 {π”š : Refutability Tβ‚€ T} {Οƒ : Sentence L} : T ⊒ βˆΌΟƒ β†’ Tβ‚€ ⊒ π”š Οƒ := fun h ↦ π”š.refu_def h + +lemma R1' {L : Language} [L.ReferenceableBy L] {Tβ‚€ T : Theory L} + {π”š : Refutability Tβ‚€ T} {Οƒ : Sentence L} [Tβ‚€ βͺ― T] : T ⊒ βˆΌΟƒ β†’ T ⊒ π”š Οƒ := fun h ↦ + WeakerThan.pbl $ R1 h + +end + + +section + +variable + [L.ReferenceableBy L] {Tβ‚€ T : Theory L} + [Diagonalization Tβ‚€] + {π”š : Refutability Tβ‚€ T} + +/-- This sentence is refutable. -/ +def jeroslow (π”š : Refutability Tβ‚€ T) [Diagonalization Tβ‚€] : Sentence L := fixedpoint Tβ‚€ π”š.refu + +lemma jeroslow_def : Tβ‚€ ⊒ jeroslow π”š β­€ π”š (jeroslow π”š) := Diagonalization.diag _ + +lemma jeroslow_def' [Tβ‚€ βͺ― T] : T ⊒ jeroslow π”š β­€ π”š (jeroslow π”š) := WeakerThan.pbl $ jeroslow_def + + +/-- Abstraction of formalized `πšΊβ‚`-completeness -/ +class Provability.FormalizedCompleteOn (𝔅 : Provability Tβ‚€ T) (Οƒ : Sentence L) where + formalized_complete_on : T ⊒ Οƒ ➝ 𝔅 Οƒ +alias Provability.formalized_complete_on := Provability.FormalizedCompleteOn.formalized_complete_on + +class Provability.SoundOn (𝔅 : Provability Tβ‚€ T) (Οƒ : Sentence L) where + sound_on : T ⊒ 𝔅 Οƒ β†’ T ⊒ Οƒ +alias Provability.sound_on := Provability.SoundOn.sound_on + +class Refutability.SoundOn (π”š : Refutability Tβ‚€ T) (Οƒ : Sentence L) where + sound_on : T ⊒ π”š Οƒ β†’ T ⊒ βˆΌΟƒ +alias Refutability.sound_on := Refutability.SoundOn.sound_on + +end + + +section + +variable + [L.ReferenceableBy L] {Tβ‚€ T : Theory L} + [Diagonalization Tβ‚€] + {π”š : Refutability Tβ‚€ T} + +lemma unprovable_jeroslow [Tβ‚€ βͺ― T] [Consistent T] [Refutability.SoundOn π”š (jeroslow π”š)] : T ⊬ jeroslow π”š := by + by_contra hC; + apply Entailment.Consistent.not_bot (𝓒 := T); + . infer_instance; + . have : T ⊒ ∼(jeroslow π”š) := Refutability.sound_on $ (Entailment.iff_of_E! $ jeroslow_def') |>.mp hC; + exact (N!_iff_CO!.mp this) ⨀ hC; + +end + + +section + +variable + [L.ReferenceableBy L] {Tβ‚€ T : Theory L} + [Diagonalization Tβ‚€] + {𝔅 : Provability Tβ‚€ T} {π”š : Refutability Tβ‚€ T} + +/-- Formalized Law of Noncontradiction holds on `x` -/ +def safe (𝔅 : Provability Tβ‚€ T) (π”š : Refutability Tβ‚€ T) : Semisentence L 1 := β€œx. Β¬(!𝔅.prov x ∧ !π”š.refu x)” + +/-- Formalized Law of Noncontradiction -/ +def flon (𝔅 : Provability Tβ‚€ T) (π”š : Refutability Tβ‚€ T) : Sentence L := β€œβˆ€ x, !(safe 𝔅 π”š) x” + +end + + +section + +variable + [L.DecidableEq] [L.ReferenceableBy L] {Tβ‚€ T : Theory L} + [Diagonalization Tβ‚€] [Tβ‚€ βͺ― T] + {𝔅 : Provability Tβ‚€ T} {π”š : Refutability Tβ‚€ T} + +local notation "𝐉" => jeroslow π”š + +lemma jeroslow_not_safe [𝔅.FormalizedCompleteOn 𝐉] : T ⊒ 𝐉 ➝ (𝔅 𝐉 ⋏ π”š 𝐉) := by + have h₁ : T ⊒ 𝐉 ➝ 𝔅 𝐉 := Provability.formalized_complete_on; + have hβ‚‚ : T ⊒ 𝐉 β­€ π”š 𝐉 := jeroslow_def'; + cl_prover [h₁, hβ‚‚]; + +/-- + Formalized law of noncontradiction cannot be proved. + Alternative form of GΓΆdel's second incompleteness theorem. +-/ +lemma unprovable_flon [consis : Consistent T] [𝔅.FormalizedCompleteOn 𝐉] : T ⊬ flon 𝔅 π”š := by + contrapose! consis; + replace consis : T ⊒ βˆ€' safe 𝔅 π”š := by simpa [flon] using consis; + have h₁ : T ⊒ ∼(𝔅 𝐉 ⋏ π”š 𝐉) := by simpa [safe] using FirstOrder.Theory.specialize _ $ consis; + have hβ‚‚ : T ⊒ 𝐉 ➝ 𝔅 𝐉 := Provability.formalized_complete_on; + have h₃ : T ⊒ 𝐉 β­€ π”š 𝐉 := jeroslow_def'; + have hβ‚„ : T ⊒ ∼(𝔅 𝐉 ⋏ π”š 𝐉) ➝ βˆΌπ‰ := contra! $ by cl_prover [hβ‚‚, h₃]; + have hβ‚… : T ⊒ βˆΌπ‰ := hβ‚„ ⨀ h₁; + have h₆ : T ⊒ π”š 𝐉 := R1' hβ‚…; + have h₇ : T ⊒ π”š 𝐉 ➝ 𝐉 := by cl_prover [h₃]; + have hβ‚ˆ : T ⊒ 𝐉 := h₇ ⨀ h₆; + exact not_consistent_iff_inconsistent.mpr <| inconsistent_iff_provable_bot.mpr $ (N!_iff_CO!.mp hβ‚…) ⨀ hβ‚ˆ; + +end + + +end ProvabilityAbstraction + +end LO.FirstOrder diff --git a/Foundation/FirstOrder/Bootstrapping/RosserProvability.lean b/Foundation/FirstOrder/Bootstrapping/RosserProvability.lean index db33daf90..0202a4756 100644 --- a/Foundation/FirstOrder/Bootstrapping/RosserProvability.lean +++ b/Foundation/FirstOrder/Bootstrapping/RosserProvability.lean @@ -128,10 +128,9 @@ variable (T) noncomputable abbrev _root_.LO.FirstOrder.Theory.rosserProvability : Provability π—œπšΊβ‚ T where prov := T.rosserProvable + prov_def := rosserProvable_D1 -instance [Entailment.Consistent T] : T.rosserProvability.HBL1 := ⟨rosserProvable_D1⟩ - -instance [Entailment.Consistent T] : T.rosserProvability.Rosser := ⟨rosserProvable_rosser⟩ +instance : T.rosserProvability.Rosser := ⟨rosserProvable_rosser⟩ lemma rosserProvability_def (Οƒ : Sentence L) : T.rosserProvability Οƒ = T.rosserPred Οƒ := rfl diff --git a/Foundation/FirstOrder/Incompleteness/Jeroslow.lean b/Foundation/FirstOrder/Incompleteness/Jeroslow.lean new file mode 100644 index 000000000..697d96613 --- /dev/null +++ b/Foundation/FirstOrder/Incompleteness/Jeroslow.lean @@ -0,0 +1,76 @@ +import Foundation.FirstOrder.Bootstrapping.RosserProvability +import Foundation.FirstOrder.Bootstrapping.ProvabilityAbstraction.Refutability + +namespace LO.FirstOrder + +open FirstOrder Arithmetic +open PeanoMinus ISigma0 ISigma1 Bootstrapping Derivation ProvabilityAbstraction + +namespace Theory + +variable {V : Type*} [ORingStructure V] [V βŠ§β‚˜* π—œπšΊβ‚] +variable {L : Language} [L.Encodable] [L.LORDefinable] + +variable {T U : Theory L} [T.Δ₁] [U.Δ₁] + +def Refutable (T : Theory L) [T.Δ₁] (Ο† : V) : Prop := T.Provable (neg L Ο†) + +lemma Refutable.quote_iff {Οƒ : Sentence L} : T.Refutable (V := V) βŒœΟƒβŒ ↔ T.Provable (V := V) βŒœβˆΌΟƒβŒ := by + simp [Refutable, Sentence.quote_def, Semiformula.quote_def] + +noncomputable def refutable (T : Theory L) [T.Δ₁] : πšΊβ‚.Semisentence 1 := .mkSigma + β€œΟ†. βˆ€ nΟ†, !(negGraph L) nΟ† Ο† β†’ !T.provable nφ” $ by + sorry; + /- + -- apply Hierarchy.all_iff.mpr; + apply Hierarchy.imp_iff.mpr; + constructor; + . apply Hierarchy.strict_mono (Ξ“ := 𝚺) (s := 1) <;> simp; + . apply Hierarchy.strict_mono (Ξ“ := 𝚺) (s := 1) <;> simp; + -/ + +lemma refutable_defined :πšΊβ‚-Predicate[V] T.Refutable via T.refutable := .mk fun v ↦ by + simp [Theory.refutable, Theory.Refutable]; + +noncomputable def standardRefutability (T : ArithmeticTheory) [T.Δ₁] : Refutability π—œπšΊβ‚ T where + refu := T.refutable.val + refu_def {Οƒ} h := by + sorry; + +end Theory + + +open ProvabilityAbstraction + +namespace Arithmetic + +variable {V : Type} [ORingStructure V] [V βŠ§β‚˜* π—œπšΊβ‚] +variable {T U : ArithmeticTheory} [T.Δ₁] -- [π—œπšΊβ‚ βͺ― T] [π—œπšΊβ‚ βͺ― U] + +@[simp] +lemma jeroslow_sigmaOne : Hierarchy 𝚺 1 (jeroslow (Theory.standardRefutability T)) := by + dsimp [jeroslow, Diagonalization, Diagonalization.fixedpoint, fixedpoint]; + sorry; + +instance : T.standardRefutability.SoundOn (jeroslow T.standardRefutability) := by + constructor; + intro h; + simp [Theory.standardRefutability, Refutability.rf] at h; + sorry; + +instance [π—œπšΊβ‚ βͺ― T] : T.standardProvability.FormalizedCompleteOn (jeroslow T.standardRefutability) := by + constructor; + apply Entailment.WeakerThan.pbl (𝓒 := π—œπšΊβ‚); + apply provable_sigma_one_complete; + simp; + +theorem unprovable_jeroslow [π—œπšΊβ‚ βͺ― T] [T.SoundOnHierarchy 𝚺 1] + : T ⊬ jeroslow (T.standardRefutability) := ProvabilityAbstraction.unprovable_jeroslow + +theorem unprovable_formalized_law_of_noncontradiction + [π—œπšΊβ‚ βͺ― T] [T.SoundOnHierarchy 𝚺 1] + : T ⊬ flon (T.standardProvability) (T.standardRefutability) := ProvabilityAbstraction.unprovable_flon + +end Arithmetic + +end LO.FirstOrder diff --git a/Foundation/ProvabilityLogic/GL/Unprovability.lean b/Foundation/ProvabilityLogic/GL/Unprovability.lean index 6d6a884cd..f3a1c3cf8 100644 --- a/Foundation/ProvabilityLogic/GL/Unprovability.lean +++ b/Foundation/ProvabilityLogic/GL/Unprovability.lean @@ -17,7 +17,7 @@ variable {L : Language} [L.ReferenceableBy L] [DecidableEq (Sentence L)] def Provability.indep (𝔅 : Provability Tβ‚€ T) (Οƒ : Sentence L) : Sentence L := ∼(𝔅 Οƒ) ⋏ ∼(𝔅 (βˆΌΟƒ)) -lemma indep_distribute [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : T ⊒ 𝔅.indep Οƒ ➝ 𝔅.indep Ο€ := by +lemma indep_distribute [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : T ⊒ 𝔅.indep Οƒ ➝ 𝔅.indep Ο€ := by apply CKK!_of_C!_of_C!; . apply contra!; apply WeakerThan.pbl (𝓒 := Tβ‚€); @@ -28,14 +28,14 @@ lemma indep_distribute [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : T ⊒ apply prov_distribute_imply; cl_prover [h]; -lemma indep_iff_distribute_inside [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : +lemma indep_iff_distribute_inside [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : T ⊒ 𝔅.indep Οƒ β­€ 𝔅.indep Ο€ := by apply K!_intro . exact indep_distribute $ h; . apply indep_distribute; cl_prover [h]; -lemma indep_iff_distribute [𝔅.HBL1] [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : +lemma indep_iff_distribute [𝔅.HBL2] (h : T ⊒ Οƒ β­€ Ο€) : T ⊒ 𝔅.indep Οƒ ↔ T ⊒ 𝔅.indep Ο€ := by constructor; . intro H; exact K!_left (indep_iff_distribute_inside h) ⨀ H; diff --git a/Foundation/ProvabilityLogic/Grz/Completeness.lean b/Foundation/ProvabilityLogic/Grz/Completeness.lean index c69d6b8a2..66ba1d608 100644 --- a/Foundation/ProvabilityLogic/Grz/Completeness.lean +++ b/Foundation/ProvabilityLogic/Grz/Completeness.lean @@ -36,7 +36,7 @@ variable {L : Language} [L.ReferenceableBy L] [L.DecidableEq] namespace Realization -variable {𝔅 : Provability Tβ‚€ T} [𝔅.HBL1] {f : Realization 𝔅} {A B : Modal.Formula _} +variable {𝔅 : Provability Tβ‚€ T} {f : Realization 𝔅} {A B : Modal.Formula _} def strongInterpret (f : Realization 𝔅) : Formula β„• β†’ Sentence L | .atom a => f a diff --git a/Foundation/ProvabilityLogic/N/Soundness.lean b/Foundation/ProvabilityLogic/N/Soundness.lean index 43e0fad2f..1297ca742 100644 --- a/Foundation/ProvabilityLogic/N/Soundness.lean +++ b/Foundation/ProvabilityLogic/N/Soundness.lean @@ -15,7 +15,7 @@ open FirstOrder.ProvabilityAbstraction variable {L : FirstOrder.Language} [L.ReferenceableBy L] [L.DecidableEq] {T U : FirstOrder.Theory L} [T βͺ― U] - {𝔅 : Provability T U} [𝔅.HBL1] + {𝔅 : Provability T U} lemma N.arithmetical_soundness (h : Modal.N ⊒ A) {f : Realization 𝔅} : U ⊒ f A := by induction h using Hilbert.Normal.rec! with