@@ -10,6 +10,7 @@ public import Foundation.Meta.ClProver
1010
1111namespace LO
1212
13+ open LO.Entailment
1314
1415namespace FirstOrder
1516
@@ -22,7 +23,7 @@ namespace ProvabilityAbstraction
2223structure Provability [L.ReferenceableBy L₀] (T₀ : Theory L₀) (T : Theory L) where
2324 prov : Semisentence L₀ 1
2425 /-- Derivability condition `D1` -/
25- prov_def {σ : Sentence L} : T ⊢ σ → T₀ ⊢ prov/[⌜σ⌝]
26+ bew_def {σ : Sentence L} : T ⊢ σ → T₀ ⊢ prov/[⌜σ⌝]
2627
2728namespace Provability
2829
@@ -38,15 +39,17 @@ abbrev dia (𝔅 : Provability T₀ T) (φ : Sentence L) : Sentence L₀ := ∼
3839end Provability
3940
4041
42+ section
43+
44+ namespace Provability
45+
4146section
4247
4348variable
4449 {L₀ L : Language} [L.ReferenceableBy L₀]
4550 {T₀ : Theory L₀} {T : Theory L}
4651
47- lemma D1 {𝔅 : Provability T₀ T} {σ : Sentence L} : T ⊢ σ → T₀ ⊢ 𝔅 σ := fun h ↦ 𝔅.prov_def h
48-
49- namespace Provability
52+ lemma D1 {𝔅 : Provability T₀ T} {σ : Sentence L} : T ⊢ σ → T₀ ⊢ 𝔅 σ := fun h ↦ 𝔅.bew_def h
5053
5154class HBL2 [L.ReferenceableBy L₀] {T₀ : Theory L₀} {T : Theory L} (𝔅 : Provability T₀ T) where
5255 D2 {σ τ : Sentence L} : T₀ ⊢ 𝔅 (σ ➝ τ) ➝ 𝔅 σ ➝ 𝔅 τ
@@ -62,70 +65,56 @@ class HBL extends 𝔅.HBL2, 𝔅.HBL3
6265
6366class Mono [L.ReferenceableBy L₀] {T₀ : Theory L₀} {T : Theory L} (𝔅 : Provability T₀ T) where
6467 mono {σ τ : Sentence L} : T ⊢ σ ➝ τ → T₀ ⊢ 𝔅 σ ➝ 𝔅 τ
68+ export Mono (mono)
6569
66- class Equiv [L.ReferenceableBy L₀] {T₀ : Theory L₀} {T : Theory L} (𝔅 : Provability T₀ T) where
67- equiv {σ τ : Sentence L} : T ⊢ σ ⭤ τ → T₀ ⊢ 𝔅 σ ⭤ 𝔅 τ
68-
69- class L öb where
70- LT {σ : Sentence L} : T ⊢ 𝔅 σ ➝ σ → T ⊢ σ
71- export Löb (LT)
72-
73- class FormalizedL öb where
74- FLT {σ : Sentence L} : T₀ ⊢ 𝔅 (𝔅 σ ➝ σ) ➝ 𝔅 σ
75- export FormalizedLöb (FLT)
70+ class Ext [L.ReferenceableBy L₀] {T₀ : Theory L₀} {T : Theory L} (𝔅 : Provability T₀ T) where
71+ ext {σ τ : Sentence L} : T ⊢ σ ⭤ τ → T₀ ⊢ 𝔅 σ ⭤ 𝔅 τ
72+ export Ext (ext)
7673
7774class Rosser [L.ReferenceableBy L₀] {T₀ : Theory L₀} {T : Theory L} (𝔅 : Provability T₀ T) where
7875 Ros {σ : Sentence L} : T ⊢ ∼σ → T₀ ⊢ ∼𝔅 σ
7976export Rosser (Ros)
8077
8178
8279/--
83- Abstract version of formalized `Γ`-completeness for provability `𝔅`
80+ Abstract version of formalized `Γ`-completeness for provability `𝔅`.
8481
85- example: `[∀ σ ∈ 𝚺₁, 𝔅.FormalizedCompleteOn σ]` for formalized `𝚺₁`-completeness
82+ example: `[∀ σ ∈ 𝚺₁, 𝔅.FormalizedCompleteOn σ]` for formalized `𝚺₁`-completeness.
8683-/
8784class FormalizedCompleteOn (𝔅 : Provability T₀ T) (σ) where
88- formalized_complete_on : T ⊢ σ ➝ 𝔅 σ
85+ formalized_complete_on : T₀ ⊢ σ ➝ 𝔅 σ
8986export FormalizedCompleteOn (formalized_complete_on)
9087attribute [simp, grind .] formalized_complete_on
9188
89+ instance [∀ σ, 𝔅.FormalizedCompleteOn (𝔅 σ)] : 𝔅.HBL3 := ⟨by simp⟩
90+
9291/--
9392 NOTE: Named after [ Vis21 ] .
9493-/
95- class Kreisel [L.ReferenceableBy L] {T₀ T : Theory L} (𝔅 : Provability T₀ T) (σ) where
96- KR : T ⊢ 𝔅 σ → T ⊢ σ
94+ class Kreisel [L.ReferenceableBy L] {T₀ T : Theory L} (𝔅 : Provability T₀ T) where
95+ KR {σ : Sentence L} : T ⊢ 𝔅 σ → T ⊢ σ
9796export Kreisel (KR)
9897attribute [simp, grind .] KR
9998
100- class WeakKreisel [L.ReferenceableBy L] {T₀ T : Theory L} (𝔅 : Provability T₀ T) (σ) where
101- WKR : T₀ ⊢ 𝔅 σ → T ⊢ σ
102- export WeakKreisel (WKR)
103- attribute [simp, grind .] WKR
104-
10599
106100class SoundOn
107101 [L.ReferenceableBy L₀] {T₀ : Theory L₀} {T : Theory L}
108- (𝔅 : Provability T₀ T)
109- (M : outParam Type *) [Nonempty M] [Structure L₀ M]
110- (σ)
102+ (𝔅 : Provability T₀ T) (M : outParam Type *) [Nonempty M] [Structure L₀ M]
111103 where
112- sound_on : M ⊧ₘ 𝔅 σ → T ⊢ σ
104+ sound_on {σ} : M ⊧ₘ 𝔅 σ → T ⊢ σ
113105export SoundOn (sound_on)
114106attribute [simp, grind .] sound_on
115107
116-
117- instance [Nonempty M] [Structure L M] [𝔅.SoundOn M σ] [M ⊧ₘ* T₀] : 𝔅.WeakKreisel σ where
118- WKR h := SoundOn .sound_on $ models_of_provable inferInstance h ;
119-
120- end Provability
121-
108+ lemma syntactical_sound (M) [Nonempty M] [Structure L M] [SoundOn 𝔅 M] [M ⊧ₘ* T₀] : ∀ {σ}, T₀ ⊢ 𝔅 σ → T ⊢ σ := by
109+ intro σ h;
110+ apply 𝔅 .sound_on;
111+ apply models_of_provable (T := T₀);
112+ . infer_instance;
113+ . exact h;
122114
123115end
124116
125117
126- open LO.Entailment
127- open Provability
128-
129118section
130119
131120variable
@@ -134,34 +123,29 @@ variable
134123 {𝔅 : Provability T₀ T}
135124 {σ τ : Sentence L}
136125
137- lemma D2' [𝔅.HBL2] : T₀ ⊢ 𝔅 (σ ➝ τ) → T₀ ⊢ 𝔅 σ ➝ 𝔅 τ := by
138- intro h;
139- exact D2 ⨀ h;
126+ lemma bew_distribute_imply [𝔅.HBL2] (h : T₀ ⊢ 𝔅 (σ ➝ τ)) : T₀ ⊢ 𝔅 σ ➝ 𝔅 τ := D2 ⨀ h
140127
141- lemma prov_distribute_imply [𝔅.HBL2] (h : T ⊢ σ ➝ τ) : T₀ ⊢ 𝔅 σ ➝ 𝔅 τ := D2' $ D1 h
128+ instance [𝔅.HBL2] : 𝔅.Mono := ⟨λ h => bew_distribute_imply $ D1 h⟩
129+ instance [𝔅.HBL2] : 𝔅.Ext := ⟨λ h => E!_intro (mono (K!_left h)) (mono (K!_right h))⟩
142130
143- lemma prov_distribute_iff [𝔅.HBL2] (h : T ⊢ σ ⭤ τ) : T₀ ⊢ 𝔅 σ ⭤ 𝔅 τ := by
144- apply E!_intro;
145- . exact prov_distribute_imply $ K!_left h;
146- . exact prov_distribute_imply $ K!_right h;
147-
148- lemma dia_distribute_imply [L₀.DecidableEq] [L.DecidableEq] [𝔅.HBL2]
149- (h : T ⊢ σ ➝ τ) : T₀ ⊢ 𝔅.dia σ ➝ 𝔅.dia τ := by
150- have : T₀ ⊢ 𝔅 (∼τ) ➝ 𝔅 (∼σ) := prov_distribute_imply $ by cl_prover [h];
151- cl_prover [this ]
152-
153- lemma prov_distribute_and [𝔅.HBL2] [L₀.DecidableEq] : T₀ ⊢ 𝔅 (σ ⋏ τ) ➝ 𝔅 σ ⋏ 𝔅 τ := by
154- have h₁ : T₀ ⊢ 𝔅 (σ ⋏ τ) ➝ 𝔅 σ := D2' $ D1 and₁!;
155- have h₂ : T₀ ⊢ 𝔅 (σ ⋏ τ) ➝ 𝔅 τ := D2' $ D1 and₂!;
131+ lemma bew_distribute_and [𝔅.HBL2] [L₀.DecidableEq] : T₀ ⊢ 𝔅 (σ ⋏ τ) ➝ 𝔅 σ ⋏ 𝔅 τ := by
132+ have h₁ : T₀ ⊢ 𝔅 (σ ⋏ τ) ➝ 𝔅 σ := bew_distribute_imply $ D1 and₁!;
133+ have h₂ : T₀ ⊢ 𝔅 (σ ⋏ τ) ➝ 𝔅 τ := bew_distribute_imply $ D1 and₂!;
156134 cl_prover [h₁, h₂];
157135
158- lemma prov_distribute_and ' [𝔅.HBL2] [L₀.DecidableEq] : T₀ ⊢ 𝔅 (σ ⋏ τ) → T₀ ⊢ 𝔅 σ ⋏ 𝔅 τ := λ h => prov_distribute_and ⨀ h
136+ lemma bew_distribute_and ' [𝔅.HBL2] [L₀.DecidableEq] : T₀ ⊢ 𝔅 (σ ⋏ τ) → T₀ ⊢ 𝔅 σ ⋏ 𝔅 τ := λ h => bew_distribute_and ⨀ h
159137
160- lemma prov_collect_and [𝔅.HBL2] [L₀.DecidableEq] [L.DecidableEq] : T₀ ⊢ 𝔅 σ ⋏ 𝔅 τ ➝ 𝔅 (σ ⋏ τ) := by
161- have h₁ : T₀ ⊢ 𝔅 σ ➝ 𝔅 (τ ➝ σ ⋏ τ) := prov_distribute_imply $ by cl_prover
138+ lemma bew_collect_and [𝔅.HBL2] [L₀.DecidableEq] [L.DecidableEq] : T₀ ⊢ 𝔅 σ ⋏ 𝔅 τ ➝ 𝔅 (σ ⋏ τ) := by
139+ have h₁ : T₀ ⊢ 𝔅 σ ➝ 𝔅 (τ ➝ σ ⋏ τ) := 𝔅.mono $ by cl_prover
162140 have h₂ : T₀ ⊢ 𝔅 (τ ➝ σ ⋏ τ) ➝ 𝔅 τ ➝ 𝔅 (σ ⋏ τ) := D2;
163141 cl_prover [h₁, h₂];
164142
143+
144+ lemma dia_mono [L₀.DecidableEq] [L.DecidableEq] [𝔅.Mono]
145+ (h : T ⊢ σ ➝ τ) : T₀ ⊢ 𝔅.dia σ ➝ 𝔅.dia τ := by
146+ have : T₀ ⊢ 𝔅 (∼τ) ➝ 𝔅 (∼σ) := 𝔅.mono $ by cl_prover [h];
147+ cl_prover [this ]
148+
165149end
166150
167151section
@@ -171,27 +155,17 @@ variable
171155 {𝔅 : Provability T₀ T}
172156 {σ τ : Sentence L}
173157
174- lemma D1_shift : T ⊢ σ → T ⊢ 𝔅 σ := by
175- intro h;
176- apply Entailment.WeakerThan.pbl (𝓢 := T₀);
177- apply D1 h;
158+ lemma mono' [𝔅.Mono] (h : T₀ ⊢ σ ➝ τ) : T₀ ⊢ 𝔅 σ ➝ 𝔅 τ := 𝔅.mono $ WeakerThan.pbl h
159+ lemma ext' [𝔅.Ext] (h : T₀ ⊢ σ ⭤ τ) : T₀ ⊢ 𝔅 σ ⭤ 𝔅 τ := 𝔅.ext $ WeakerThan.pbl h
178160
179- lemma D2_shift [𝔅.HBL2] : T ⊢ 𝔅 (σ ➝ τ) ➝ 𝔅 σ ➝ 𝔅 τ := by
180- apply Entailment.WeakerThan.pbl (𝓢 := T₀) $ D2;
161+ end
181162
182- lemma D3_shift [𝔅.HBL3] : T ⊢ 𝔅 σ ➝ 𝔅 (𝔅 σ) := by
183- apply Entailment.WeakerThan.pbl (𝓢 := T₀) $ D3;
163+ end Provability
184164
185- lemma FLT_shift [𝔅.FormalizedLöb] : T ⊢ 𝔅 (𝔅 σ ➝ σ) ➝ 𝔅 σ := by
186- apply Entailment.WeakerThan.pbl (𝓢 := T₀) $ FLT;
187165
188- lemma prov_distribute_imply' [𝔅.HBL2] (h : T₀ ⊢ σ ➝ τ) : T₀ ⊢ 𝔅 σ ➝ 𝔅 τ :=
189- prov_distribute_imply $ WeakerThan.pbl h
166+ end
190167
191- lemma prov_distribute_imply'' [𝔅.HBL2] (h : T ⊢ σ ➝ τ) : T ⊢ 𝔅 σ ➝ 𝔅 τ :=
192- WeakerThan.pbl $ prov_distribute_imply h
193168
194- end
195169
196170
197171class Diagonalization [L.ReferenceableBy L] (T : Theory L) where
@@ -216,25 +190,25 @@ variable [T₀ ⪯ T] [Consistent T]
216190
217191theorem unprovable_g ödel : T ⊬ (gödel 𝔅) := by
218192 intro h;
219- have h₁ : T ⊢ 𝔅 (gödel 𝔅) := D1_shift h;
193+ have h₁ : T ⊢ 𝔅 (gödel 𝔅) := WeakerThan.pbl $ D1 h;
220194 have h₂ : T ⊢ (gödel 𝔅) ⭤ ∼𝔅 (gödel 𝔅) := WeakerThan.pbl $ gödel_spec;
221195 have : T ⊢ ⊥ := by cl_prover [h₁, h₂, h];
222196 have : ¬Consistent T := not_consistent_iff_inconsistent.mpr <| inconsistent_iff_provable_bot.mpr this ;
223197 contradiction
224198
225- theorem unrefutable_g ödel [𝔅.Kreisel (gödel 𝔅) ] : T ⊬ ∼(gödel 𝔅) := by
199+ theorem unrefutable_g ödel [𝔅.Kreisel] : T ⊬ ∼(gödel 𝔅) := by
226200 intro h₂;
227201 have h₁ : T ⊢ (gödel 𝔅) := WeakerThan.pbl $ 𝔅.KR $ by cl_prover [gödel_spec (T₀ := T₀), h₂];
228202 have : T ⊢ ⊥ := (N!_iff_CO!.mp $ WeakerThan.pbl $ h₂) ⨀ h₁;
229203 have : ¬Consistent T := not_consistent_iff_inconsistent.mpr <| inconsistent_iff_provable_bot.mpr this
230204 contradiction;
231205
232- theorem g ödel_independent [𝔅.Kreisel (gödel 𝔅) ] : Independent T (gödel 𝔅) := by
206+ theorem g ödel_independent [𝔅.Kreisel] : Independent T (gödel 𝔅) := by
233207 constructor
234208 . apply unprovable_gödel
235209 . apply unrefutable_gödel
236210
237- theorem first_incompleteness [𝔅.Kreisel (gödel 𝔅) ] : Incomplete T :=
211+ theorem first_incompleteness [𝔅.Kreisel] : Incomplete T :=
238212 incomplete_def.mpr ⟨(gödel 𝔅), gödel_independent⟩
239213
240214end First
@@ -255,8 +229,7 @@ variable [L.DecidableEq] [T₀ ⪯ T]
255229theorem formalized_unprovable_g ödel : T₀ ⊢ 𝔅.con ➝ ∼𝔅 𝐆 := by
256230 suffices T₀ ⊢ ∼𝔅 ⊥ ➝ ∼𝔅 𝐆 from this
257231 have h₁ : T₀ ⊢ 𝔅 𝐆 ➝ 𝔅 (𝔅 𝐆) := D3
258- have h₂ : T₀ ⊢ 𝔅 𝐆 ➝ 𝔅 (𝔅 𝐆 ➝ ⊥) := prov_distribute_imply $ by
259- cl_prover [gödel_spec (T₀ := T₀)]
232+ have h₂ : T₀ ⊢ 𝔅 𝐆 ➝ 𝔅 (𝔅 𝐆 ➝ ⊥) := 𝔅.mono' $ by cl_prover [gödel_spec (T₀ := T₀)]
260233 have h₃ : T₀ ⊢ 𝔅 (𝔅 𝐆 ➝ ⊥) ➝ 𝔅 (𝔅 𝐆) ➝ 𝔅 ⊥ := D2
261234 cl_prover [h₁, h₂, h₃]
262235
@@ -272,13 +245,13 @@ theorem con_unprovable [Consistent T] : T ⊬ 𝔅.con := by
272245 have : T ⊢ 𝐆 := by cl_prover [h, this ]
273246 exact unprovable_gödel this
274247
275- theorem con_unrefutable [Consistent T] [𝔅.Kreisel (gödel 𝔅) ] : T ⊬ ∼𝔅.con := by
248+ theorem con_unrefutable [Consistent T] [𝔅.Kreisel] : T ⊬ ∼𝔅.con := by
276249 intro h
277- have : T₀ ⊢ 𝐆 ⭤ 𝔅.con := gödel_iff_con
250+ have : T ⊢ 𝐆 ⭤ 𝔅.con := WeakerThan.pbl $ gödel_iff_con;
278251 have : T ⊢ ∼𝐆 := by cl_prover [h, this ]
279252 exact unrefutable_gödel this
280253
281- theorem con_independent [Consistent T] [𝔅.Kreisel (gödel 𝔅) ] : Independent T 𝔅.con := by
254+ theorem con_independent [Consistent T] [𝔅.Kreisel] : Independent T 𝔅.con := by
282255 constructor
283256 . apply con_unprovable
284257 . apply con_unrefutable
@@ -290,6 +263,8 @@ section Löb
290263
291264def kreisel [Diagonalization T₀] (𝔅 : Provability T₀ T) (σ : Sentence L) : Sentence L := fixedpoint T₀ “x. !𝔅.prov x → !σ”
292265
266+ variable {σ : Sentence L}
267+
293268local notation " 𝐊" => kreisel 𝔅
294269
295270lemma kreisel_spec : T₀ ⊢ (𝐊 σ) ⭤ (𝔅 (𝐊 σ) ➝ σ) := by
@@ -306,38 +281,30 @@ variable [L.DecidableEq] [T₀ ⪯ T]
306281
307282theorem l öb_theorem (H : T ⊢ 𝔅 σ ➝ σ) : T ⊢ σ := by
308283 have d₁ : T ⊢ 𝔅 (𝐊 σ) ➝ σ := C!_trans (WeakerThan.pbl kreisel_specAux₁) H;
309- have d₂ : T ⊢ 𝔅 (𝐊 σ) := WeakerThan.pbl (𝓢 := T₀) ( D1 $ WeakerThan.pbl kreisel_specAux₂ ⨀ d₁) ;
284+ have d₂ : T ⊢ 𝔅 (𝐊 σ) := WeakerThan.pbl $ D1 $ WeakerThan.pbl kreisel_specAux₂ ⨀ d₁;
310285 exact d₁ ⨀ d₂;
311286
312- instance : 𝔅.Löb := ⟨löb_theorem⟩
313-
314287theorem formalized_l öb_theorem : T₀ ⊢ 𝔅 (𝔅 σ ➝ σ) ➝ 𝔅 σ := by
315288 have h₁ : T₀ ⊢ 𝔅 (𝐊 σ) ➝ 𝔅 σ := kreisel_specAux₁;
316- have : T₀ ⊢ (𝔅 σ ➝ σ) ➝ (𝔅 (𝐊 σ) ➝ σ) := CCC!_of_C!_left h₁;
317- have : T ⊢ (𝔅 σ ➝ σ) ➝ 𝐊 σ := WeakerThan.pbl (𝓢 := T₀) $ C!_trans this kreisel_specAux₂;
318- exact C!_trans (D2 ⨀ (D1 this )) h₁;
319-
320- instance : 𝔅.FormalizedLöb := ⟨formalized_löb_theorem (T := T)⟩
321-
322- /-
323- lemma unprovable_con_via_löb [Consistent T] [ L.DecidableEq ] [ 𝔅.Löb ] : T ⊬ 𝔅.con := by
324- by_contra hC;
325- have : T ⊢ ⊥ := Löb.LT $ N!_iff_CO!.mp hC;
326- have : ¬Consistent T := not_consistent_iff_inconsistent.mpr $ inconsistent_iff_provable_bot.mpr this
327- contradiction
328- -/
289+ have h₂ : T₀ ⊢ (𝔅 σ ➝ σ) ➝ (𝔅 (𝐊 σ) ➝ σ) := CCC!_of_C!_left h₁;
290+ have h₃ : T ⊢ (𝔅 σ ➝ σ) ➝ 𝐊 σ := WeakerThan.pbl $ C!_trans (CCC!_of_C!_left h₁) kreisel_specAux₂;
291+ exact C!_trans (D2 ⨀ (D1 h₃)) h₁;
329292
330- lemma formalized_unprovable_not_con [Consistent T] [𝔅.Kreisel (gödel 𝔅) ] : T ⊬ 𝔅.con ➝ ∼𝔅 (∼𝔅.con) := by
293+ lemma formalized_unprovable_not_con [Consistent T] [𝔅.Kreisel] : T ⊬ 𝔅.con ➝ ∼𝔅 (∼𝔅.con) := by
331294 by_contra hC;
332- have : T ⊢ ∼𝔅.con := Löb.LT $ CN!_of_CN!_right hC;
295+ have : T ⊢ ∼𝔅.con := löb_theorem $ CN!_of_CN!_right hC;
333296 have : T ⊬ ∼𝔅.con := con_unrefutable;
334297 contradiction;
335298
336- lemma formalized_unrefutable_g ödel [Consistent T] [𝔅.Kreisel (gödel 𝔅) ] : T ⊬ 𝔅.con ➝ ∼𝔅 (∼(gödel 𝔅)) := by
299+ lemma formalized_unrefutable_g ödel [Consistent T] [𝔅.Kreisel] : T ⊬ 𝔅.con ➝ ∼𝔅 (∼(gödel 𝔅)) := by
337300 by_contra hC;
338301 have : T ⊬ 𝔅.con ➝ ∼𝔅 (∼𝔅.con) := formalized_unprovable_not_con;
339- have : T ⊢ 𝔅.con ➝ ∼𝔅 (∼𝔅.con) := C!_trans hC $ WeakerThan.pbl <| K!_left <| ENN!_of_E!
340- <| prov_distribute_iff <| ENN!_of_E! <| WeakerThan.pbl gödel_iff_con;
302+ have : T ⊢ 𝔅.con ➝ ∼𝔅 (∼𝔅.con) := C!_trans hC
303+ $ WeakerThan.pbl
304+ $ K!_left $ ENN!_of_E!
305+ $ 𝔅.ext
306+ $ ENN!_of_E!
307+ $ WeakerThan.pbl gödel_iff_con;
341308 contradiction;
342309
343310end Löb
0 commit comments