1
1
import Foundation.Modal.Logic.Extension
2
2
import Foundation.Modal.Maximal.Unprovability
3
3
import Mathlib.Data.ENat.Basic
4
-
4
+ import Foundation.Modal.Kripke.Logic.GL.Completeness
5
5
6
6
namespace LO.Modal.Axioms
7
7
@@ -15,6 +15,9 @@ protected abbrev BoxBot (n : ℕ∞) : F :=
15
15
@[simp]
16
16
lemma BoxBot.eq_omega : (Axioms.BoxBot ⊤ : F) = ⊤ := rfl
17
17
18
+ @[simp]
19
+ lemma BoxBot.subst {s : Substitution α} : (Axioms.BoxBot n)⟦s⟧ = (Axioms.BoxBot n) := by cases n <;> simp;
20
+
18
21
end LO.Modal.Axioms
19
22
20
23
@@ -34,23 +37,28 @@ instance : Modal.GL ⪯ Modal.GLPlusBoxBot n := by
34
37
dsimp [Modal.GLPlusBoxBot];
35
38
infer_instance;
36
39
37
- lemma Logic.GLPlusBoxBot.boxbot : (Modal.Axioms.BoxBot n) ∈ Modal.GLPlusBoxBot n := by
38
- apply Logic.sumQuasiNormal.mem₂;
40
+ @[simp]
41
+ lemma Logic.GLPlusBoxBot.boxbot : Modal.GLPlusBoxBot n ⊢! (Modal.Axioms.BoxBot n) := by
42
+ apply Logic.sumQuasiNormal.mem₂!;
39
43
tauto;
40
44
41
- @[simp]
42
- lemma GLPlusBoxBot.eq_omega : (Modal.GLPlusBoxBot ⊤ : Logic ℕ) = Modal.GL := by
43
- ext φ;
44
- suffices Modal.GLPlusBoxBot ⊤ ⊢! φ ↔ Modal.GL ⊢! φ by simpa;
45
+ lemma iff_provable_GLBB_provable_GL {n : ℕ∞} {φ} : Modal.GLPlusBoxBot n ⊢! φ ↔ Modal.GL ⊢! (Modal.Axioms.BoxBot n) ➝ φ := by
45
46
constructor;
46
47
. intro h;
47
48
induction h using sumQuasiNormal.rec! with
48
- | mem₁ h => assumption;
49
+ | mem₁ h => cl_prover [h]
49
50
| mem₂ h => simp_all;
50
- | mdp ihφψ ihφ => exact ihφψ ⨀ ihφ;
51
- | subst => apply Logic.subst!; assumption ;
51
+ | mdp ihφψ ihφ => cl_prover [ ihφψ, ihφ] ;
52
+ | subst ihφ => simpa using Logic.subst! _ ihφ ;
52
53
. intro h;
53
- apply sumQuasiNormal.mem₁!;
54
- assumption;
54
+ replace h : Modal.GLPlusBoxBot n ⊢! (Modal.Axioms.BoxBot n) ➝ φ := sumQuasiNormal.mem₁! h;
55
+ exact h ⨀ Logic.GLPlusBoxBot.boxbot;
56
+
57
+ @[simp]
58
+ lemma eq_GLBB_omega_GL : (Modal.GLPlusBoxBot ⊤ : Logic ℕ) = Modal.GL := by
59
+ ext φ;
60
+ suffices Modal.GLPlusBoxBot ⊤ ⊢! φ ↔ Modal.GL ⊢! φ by simpa;
61
+ apply Iff.trans iff_provable_GLBB_provable_GL;
62
+ constructor <;> . intro h; cl_prover [h];
55
63
56
64
end LO.Modal
0 commit comments