Skip to content

Commit 45db355

Browse files
committed
done.
1 parent f6a2d17 commit 45db355

4 files changed

Lines changed: 81 additions & 22 deletions

File tree

VeryWeakSubintuitionistic/Modal/FMT/Basic.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ variable {κ α : Type*} {F : Frame κ α} {M : Model κ α} {A B C : Formula α
8989
@[grind .] lemma frameValid_andElimL : F ⊨ (A ⋏ B) 🡒 A := by grind;
9090
@[grind .] lemma frameValid_andElimR : F ⊨ (A ⋏ B) 🡒 B := by grind;
9191

92+
@[grind .]
93+
lemma frameValid_orElim : F ⊨ (A ⋎ B) 🡒 (A 🡒 C) 🡒 (B 🡒 C) 🡒 C := by
94+
intro V x hAB hAC hBC;
95+
grind;
96+
9297
@[grind =>] lemma frameValid_mdp (hAB : F ⊨ A 🡒 B) (hA : F ⊨ A) : F ⊨ B := by intro V x; exact hAB V x $ hA V x;
9398
@[grind <=] lemma frameValid_nec (hA : F ⊨ A) : F ⊨ □A := by intro V x y Rxy; exact hA V y;
9499

VeryWeakSubintuitionistic/Modal/FMT/Completeness.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ end ProvableN
6969

7070
namespace FinitelyDerivableN
7171

72-
variable [DecidableEq α] {Λ : Axioms α} {X : Finset (Formula α)} {A B C : Formula α}
72+
variable {Λ : Axioms α} {X : Finset (Formula α)} {A B C : Formula α}
7373

7474
lemma complement_lem_elim (hA : X ⊢ᴺ[Λ] A 🡒 C) (hB : X ⊢ᴺ[Λ] A.complement 🡒 C) : X ⊢ᴺ[Λ] C := by
7575
match A with

VeryWeakSubintuitionistic/Modal/Proof/N.lean

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ inductive ProofN (Λ : Axioms α) : Formula α → Type _
1212
| axm {A} : A ∈ Λ → ProofN Λ A
1313
| implyK {A B} : ProofN Λ $ A 🡒 B 🡒 A
1414
| implyS {A B C} : ProofN Λ $ (A 🡒 B 🡒 C) 🡒 (A 🡒 B) 🡒 (A 🡒 C)
15-
| efq {A} : ProofN Λ $ ⊥ 🡒 A
16-
| dne {A} : ProofN Λ $ ∼∼A 🡒 A
15+
| efq {A} : ProofN Λ $ ⊥ 🡒 A
16+
| dne {A} : ProofN Λ $ ∼∼A 🡒 A
1717
| andElimL {A B} : ProofN Λ $ (A ⋏ B) 🡒 A
1818
| andElimR {A B} : ProofN Λ $ (A ⋏ B) 🡒 B
1919
| andIntro {A B} : ProofN Λ $ A 🡒 B 🡒 (A ⋏ B)
20+
| orElim {A B C} : ProofN Λ $ A ⋎ B 🡒 (A 🡒 C) 🡒 (B 🡒 C) 🡒 C
2021
| mdp {A B} : ProofN Λ (A 🡒 B) → ProofN Λ A → ProofN Λ B
2122
| nec {A} : ProofN Λ A → ProofN Λ (□A)
2223
infix:25 " ⊢ᴺ! " => ProofN
@@ -43,6 +44,7 @@ noncomputable def ofSubsetAxm (hsub : Λ₁ ⊆ Λ₂) : Λ₁ ⊢ᴺ! A → Λ
4344
| andElimL => exact andElimL
4445
| andElimR => exact andElimR
4546
| andIntro => exact andIntro
47+
| orElim => exact orElim
4648
| mdp _ _ ihAB ihA => exact mdp ihAB ihA
4749
| nec _ ihA => exact nec ihA
4850

@@ -69,14 +71,23 @@ variable {Λ : Axioms α} {A B C : Formula α}
6971
@[simp, grind .] lemma andElimR : Λ ⊢ᴺ (A ⋏ B) 🡒 B := ⟨ProofN.andElimR⟩
7072
@[simp, grind .] lemma andIntro : Λ ⊢ᴺ A 🡒 B 🡒 (A ⋏ B) := ⟨ProofN.andIntro⟩
7173
@[simp, grind .] lemma impId : Λ ⊢ᴺ A 🡒 A := ⟨ProofN.impId⟩
74+
@[simp, grind .] lemma orElim : Λ ⊢ᴺ A ⋎ B 🡒 (A 🡒 C) 🡒 (B 🡒 C) 🡒 C := ⟨ProofN.orElim⟩
75+
7276
@[grind =>] lemma mdp : Λ ⊢ᴺ A 🡒 B → Λ ⊢ᴺ A → Λ ⊢ᴺ B := λ ⟨h₁⟩ ⟨h₂⟩ => ⟨ProofN.mdp h₁ h₂⟩
77+
@[grind =>] lemma mdp₂ (hABC : Λ ⊢ᴺ A 🡒 B 🡒 C) (hA : Λ ⊢ᴺ A) (hB : Λ ⊢ᴺ B) : Λ ⊢ᴺ C := mdp (mdp hABC hA) hB
78+
@[grind =>] lemma mdp₃ (hABCD : Λ ⊢ᴺ A 🡒 B 🡒 C 🡒 D) (hA : Λ ⊢ᴺ A) (hB : Λ ⊢ᴺ B) (hC : Λ ⊢ᴺ C) : Λ ⊢ᴺ D := mdp (mdp₂ hABCD hA hB) hC
79+
7380
@[grind <=] lemma af : Λ ⊢ᴺ A → Λ ⊢ᴺ B 🡒 A := λ ⟨h⟩ => ⟨ProofN.af h⟩
7481
@[grind <=] lemma nec : Λ ⊢ᴺ A → Λ ⊢ᴺ □A := λ ⟨h⟩ => ⟨ProofN.nec h⟩
7582
@[grind .] lemma lem : Λ ⊢ᴺ A ⋎ ∼A := by simp;
7683

7784
lemma andElimLRule (hAB : Λ ⊢ᴺ A ⋏ B) : Λ ⊢ᴺ A := mdp andElimL hAB
7885
lemma andElimRRule (hAB : Λ ⊢ᴺ A ⋏ B) : Λ ⊢ᴺ B := mdp andElimR hAB
79-
lemma andIntroRule (hA : Λ ⊢ᴺ A) (hB : Λ ⊢ᴺ B) : Λ ⊢ᴺ A ⋏ B := mdp (mdp andIntro hA) hB
86+
lemma andIntroRule (hA : Λ ⊢ᴺ A) (hB : Λ ⊢ᴺ B) : Λ ⊢ᴺ A ⋏ B := mdp₂ andIntro hA hB
87+
88+
-- lemma orIntroLRule (hA : Λ ⊢ᴺ A) : Λ ⊢ᴺ A ⋎ B := mdp orIntroL hA
89+
-- lemma orIntroRRule (hB : Λ ⊢ᴺ B) : Λ ⊢ᴺ A ⋎ B := mdp orIntroR hB
90+
lemma orElimRule (hAB : Λ ⊢ᴺ A ⋎ B) (hAC : Λ ⊢ᴺ A 🡒 C) (hBC : Λ ⊢ᴺ B 🡒 C) : Λ ⊢ᴺ C := mdp₃ orElim hAB hAC hBC
8091

8192
@[simp, grind .] lemma verum : Λ ⊢ᴺ ⊤ := by simp;
8293

@@ -92,9 +103,24 @@ lemma consistent_of_unprovable (h : Λ ⊬ᴺ A) : Λ ⊬ᴺ ⊥ := by
92103

93104
@[grind =>] lemma dneRule (hA : Λ ⊢ᴺ ∼∼A) : Λ ⊢ᴺ A := mdp dne hA
94105

106+
lemma ctx_mdp {B} (hCAB : Λ ⊢ᴺ C 🡒 A 🡒 B) (hCA : Λ ⊢ᴺ C 🡒 A) : Λ ⊢ᴺ C 🡒 B := mdp₂ implyS hCAB hCA
107+
lemma ctx_mdp₂ (hABCD : Λ ⊢ᴺ A 🡒 B 🡒 C 🡒 D) (hABC : Λ ⊢ᴺ A 🡒 B 🡒 C) : Λ ⊢ᴺ A 🡒 B 🡒 D := ctx_mdp (ctx_mdp (af implyS) hABCD) hABC
108+
95109
lemma impTransRule (hAB : Λ ⊢ᴺ A 🡒 B) (hBC : Λ ⊢ᴺ B 🡒 C) : Λ ⊢ᴺ A 🡒 C := by
110+
have : Λ ⊢ᴺ (A 🡒 B 🡒 C) 🡒 (A 🡒 B) 🡒 (A 🡒 C) := implyS;
111+
have : Λ ⊢ᴺ (A 🡒 B) 🡒 (A 🡒 C) := mdp implyS $ mdp₂ implyS (af $ af $ hBC) hAB;
112+
exact mdp this hAB;
113+
114+
lemma imp₃Swap (hABC : Λ ⊢ᴺ A 🡒 B 🡒 C) : Λ ⊢ᴺ B 🡒 A 🡒 C := by
115+
apply ctx_mdp₂;
116+
. apply af hABC;
117+
. apply implyK;
118+
119+
lemma impTrans' : Λ ⊢ᴺ (B 🡒 C) 🡒 (A 🡒 B) 🡒 (A 🡒 C) := impTransRule (imp₃Swap (af impId)) implyS
120+
121+
lemma impTrans : Λ ⊢ᴺ (A 🡒 B) 🡒 (B 🡒 C) 🡒 (A 🡒 C) := by
122+
apply imp₃Swap impTrans';
96123

97-
sorry;
98124

99125
lemma lconjElim {X : List _} (hA : A ∈ X) : Λ ⊢ᴺ ⋀X 🡒 A := by
100126
match X with
@@ -128,13 +154,16 @@ lemma lconjIntro {X : List _} (hA : ∀ A ∈ X, Λ ⊢ᴺ A) : Λ ⊢ᴺ ⋀X :
128154
grind;
129155
lemma fconjIntro {X : Finset _} (hA : ∀ A ∈ X, Λ ⊢ᴺ A) : Λ ⊢ᴺ ⋀X := lconjIntro (X := X.toList) (by simpa)
130156

131-
lemma ctx_mdp {B} (hCAB : Λ ⊢ᴺ C 🡒 A 🡒 B) (hCA : Λ ⊢ᴺ C 🡒 A) : Λ ⊢ᴺ C 🡒 B := mdp (mdp implyS hCAB) hCA
132-
133157
lemma ctx_af {B} (hCA : Λ ⊢ᴺ C 🡒 A) : Λ ⊢ᴺ C 🡒 B 🡒 A := impTransRule hCA implyK
134158

159+
lemma ctx_impTransRule (hAB : Λ ⊢ᴺ C 🡒 A 🡒 B) (hBC : Λ ⊢ᴺ C 🡒 B 🡒 D) : Λ ⊢ᴺ C 🡒 A 🡒 D := ctx_mdp (impTransRule hAB $ impTrans) hBC
160+
135161
lemma ctxAndIntroRule (hA : Λ ⊢ᴺ C 🡒 A) (hB : Λ ⊢ᴺ C 🡒 B) : Λ ⊢ᴺ C 🡒 (A ⋏ B) := by
136162
exact ctx_mdp (impTransRule hA $ andIntro) hB;
137163

164+
lemma ctxOrElimRule (hAB : Λ ⊢ᴺ C 🡒 A ⋎ B) (hAC : Λ ⊢ᴺ C 🡒 A 🡒 D) (hBC : Λ ⊢ᴺ C 🡒 B 🡒 D) : Λ ⊢ᴺ C 🡒 D :=
165+
ctx_mdp (ctx_mdp (impTransRule hAB orElim) hAC) hBC
166+
138167
lemma ctxLconjIntroRule {X : List _} (hA : ∀ A ∈ X, Λ ⊢ᴺ C 🡒 A) : Λ ⊢ᴺ C 🡒 ⋀X := by
139168
match X with
140169
| [] => apply af; simp;
@@ -155,12 +184,12 @@ lemma lconj_subset {X Y : List _} (hsub : X ⊆ Y) : Λ ⊢ᴺ ⋀Y 🡒 ⋀X :=
155184
lemma sconj_subset {X Y : Finset _} (hsub : X ⊆ Y) : Λ ⊢ᴺ ⋀Y 🡒 ⋀X := lconj_subset (X := X.toList) (Y := Y.toList) $ by
156185
grind [Finset.mem_toList];
157186

158-
lemma uncurry {A B} (h : Λ ⊢ᴺ A 🡒 B 🡒 C) : Λ ⊢ᴺ (A ⋏ B) 🡒 C := by
159-
sorry;
160-
161-
lemma curry {A B} (h : Λ ⊢ᴺ (A ⋏ B) 🡒 C) : Λ ⊢ᴺ A 🡒 B 🡒 C := by
187+
lemma uncurry {A B C} (h : Λ ⊢ᴺ A 🡒 B 🡒 C) : Λ ⊢ᴺ (A ⋏ B) 🡒 C := ctx_mdp (impTransRule andElimL h) andElimR
162188

163-
sorry;
189+
lemma curry {A B C} (h : Λ ⊢ᴺ (A ⋏ B) 🡒 C) : Λ ⊢ᴺ A 🡒 B 🡒 C := by
190+
have h₁ : Λ ⊢ᴺ A 🡒 B 🡒 (A ⋏ B) := andIntro;
191+
have h₂ : Λ ⊢ᴺ A 🡒 (A ⋏ B 🡒 C) := af h;
192+
exact ctx_impTransRule h₁ h₂;
164193

165194
@[induction_eliminator]
166195
protected lemma rec
@@ -175,6 +204,7 @@ protected lemma rec
175204
(andElimL : ∀ {A B}, (motive ((A ⋏ B) 🡒 A) andElimL))
176205
(andElimR : ∀ {A B}, (motive ((A ⋏ B) 🡒 B) andElimR))
177206
(andIntro : ∀ {A B}, (motive (A 🡒 B 🡒 (A ⋏ B)) andIntro))
207+
(orElim : ∀ {A B C}, (motive (A ⋎ B 🡒 (A 🡒 C) 🡒 (B 🡒 C) 🡒 C) orElim))
178208
: ∀ {A}, (d : Λ ⊢ᴺ A) → motive A d := by rintro A ⟨d⟩; induction d <;> grind;
179209

180210
end ProvableN
@@ -186,12 +216,10 @@ notation:25 X " ⊢ᴺ[" Λ "] " A => FinitelyDerivableN Λ X A
186216

187217
namespace FinitelyDerivableN
188218

189-
variable [DecidableEq α]
190219
variable {Λ : Axioms α} {X : Finset (Formula α)} {A B C : Formula α}
191220

192221
open ProvableN
193222

194-
omit [DecidableEq α] in
195223
lemma iff_empty_derivable : (Λ ⊢ᴺ A) ↔ (∅ ⊢ᴺ[Λ] A) := by
196224
unfold FinitelyDerivableN;
197225
constructor;
@@ -200,7 +228,7 @@ lemma iff_empty_derivable : (Λ ⊢ᴺ A) ↔ (∅ ⊢ᴺ[Λ] A) := by
200228
. intro h;
201229
exact mdp h (by simp);
202230

203-
lemma to_ctx : (X ⊢ᴺ[Λ] A 🡒 B) → ((insert A X) ⊢ᴺ[Λ] B) := by
231+
lemma to_ctx [DecidableEq α] : (X ⊢ᴺ[Λ] A 🡒 B) → ((insert A X) ⊢ᴺ[Λ] B) := by
204232
unfold FinitelyDerivableN;
205233
intro h;
206234
apply impTransRule;
@@ -212,7 +240,7 @@ lemma to_ctx : (X ⊢ᴺ[Λ] A 🡒 B) → ((insert A X) ⊢ᴺ[Λ] B) := by
212240
grind;
213241
. exact uncurry h;
214242

215-
lemma from_ctx : ((insert A X) ⊢ᴺ[Λ] B) → (X ⊢ᴺ[Λ] A 🡒 B) := by
243+
lemma from_ctx [DecidableEq α] : ((insert A X) ⊢ᴺ[Λ] B) → (X ⊢ᴺ[Λ] A 🡒 B) := by
216244
unfold FinitelyDerivableN;
217245
intro h;
218246
apply curry;
@@ -228,28 +256,23 @@ lemma from_ctx : ((insert A X) ⊢ᴺ[Λ] B) → (X ⊢ᴺ[Λ] A 🡒 B) := by
228256
. exact fconjElim hC;
229257
. exact h;
230258

231-
omit [DecidableEq α] in
232259
lemma of_mem_ctx (hA : A ∈ X) : X ⊢ᴺ[Λ] A := by
233260
unfold FinitelyDerivableN;
234261
apply ProvableN.fconjElim hA;
235262

236-
omit [DecidableEq α] in
237263
lemma mdp (hAB : X ⊢ᴺ[Λ] A 🡒 B) (hA : X ⊢ᴺ[Λ] A) : X ⊢ᴺ[Λ] B := by
238264
unfold FinitelyDerivableN at hAB hA ⊢;
239265
exact ProvableN.ctx_mdp hAB hA;
240266

241-
omit [DecidableEq α] in
242267
lemma weakening (hsub : X ⊆ Y) (hX : X ⊢ᴺ[Λ] A) : Y ⊢ᴺ[Λ] A := by
243268
unfold FinitelyDerivableN at hX ⊢;
244269
apply ProvableN.impTransRule ?_ hX;
245270
apply ProvableN.sconj_subset hsub;
246271

247-
omit [DecidableEq α] in
248272
lemma of_provable (hA : Λ ⊢ᴺ A) : X ⊢ᴺ[Λ] A := by
249273
exact weakening (show ∅ ⊆ X by simp) $ iff_empty_derivable.mp hA;
250274

251-
lemma orElim (hAB : X ⊢ᴺ[Λ] A ⋎ B) (hA : X ⊢ᴺ[Λ] A 🡒 C) (hB : X ⊢ᴺ[Λ] B 🡒 C) : X ⊢ᴺ[Λ] C := by
252-
sorry;
275+
lemma orElim (hAB : X ⊢ᴺ[Λ] A ⋎ B) (hAC : X ⊢ᴺ[Λ] A 🡒 C) (hBC : X ⊢ᴺ[Λ] B 🡒 C) : X ⊢ᴺ[Λ] C := ctxOrElimRule hAB hAC hBC
253276

254277
lemma lem_elim (hA : X ⊢ᴺ[Λ] A 🡒 B) (hNA : X ⊢ᴺ[Λ] ∼A 🡒 B) : X ⊢ᴺ[Λ] B := by
255278
apply orElim (of_provable lem) hA hNA;

VeryWeakSubintuitionistic/ModalCompanion/Basic.lean

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,37 @@ lemma provableVF_of_provableN_star_repeatNeg
275275
apply Modal.FMT.iff_Valid_exists_world_not_Forces.mpr;
276276
use x;
277277

278+
/-- Theorem 6.11 -/
279+
theorem modal_companion [Fact (∀ B ∈ Λ, B.IsClosedNegativeAxiom)] {A : Formula α} {N : Finset ℕ} : List.TFAE [
280+
Λ ⊢ⱽ A,
281+
Λ.star ⊢ᴺ A.corsi,
282+
(Λ.star ∪ N.image (λ n => ∼□(∼^[2 * n]⊥))) ⊢ᴺ A.corsi
283+
] := by
284+
tfae_have 12 := provableN_star_of_provableVF;
285+
tfae_have 23 := provableN_star_repeatNeg_of_provableN_star;
286+
tfae_have 31 := provableVF_of_provableN_star_repeatNeg;
287+
tfae_finish;
288+
289+
290+
/-- Corollary 6.12 -/
291+
theorem modal_companion_VF {A : Formula α} {N : Finset ℕ} : List.TFAE [
292+
∅ ⊢ⱽ A,
293+
∅ ⊢ᴺ A.corsi,
294+
(N.image (λ n => ∼□(∼^[2 * n]⊥))) ⊢ᴺ A.corsi
295+
] := by
296+
have : Fact (∀ B ∈ (∅ : Axioms α), B.IsClosedNegativeAxiom) := ⟨by grind⟩;
297+
simpa [Axioms.star] using modal_companion (Λ := ∅);
298+
299+
/-- Corollary 6.13 -/
300+
theorem modal_companion_VFSer {A : Formula α} {N : Finset ℕ} : List.TFAE [
301+
({(∼∼⊤ : Formula α)}) ⊢ⱽ A,
302+
({(∼□∼□⊤ : Modal.Formula α)}) ⊢ᴺ A.corsi,
303+
(insert (∼□∼□⊤ : Modal.Formula α) (N.image (λ n => ∼□(∼^[2 * n]⊥)))) ⊢ᴺ A.corsi
304+
] := by
305+
have : Fact (∀ B ∈ ({ (∼∼⊤ : Formula α) } : Axioms α), B.IsClosedNegativeAxiom) := ⟨by grind⟩;
306+
simpa [Axioms.star] using modal_companion (Λ := { (∼∼⊤ : Formula α) });
307+
308+
278309
end
279310

280311
end

0 commit comments

Comments
 (0)