Skip to content

Commit f3833ad

Browse files
authored
add(Modal/Kripke): Makinson's Logic KTMk without Finite Modal Property (#354)
1 parent 98c4c4e commit f3833ad

12 files changed

Lines changed: 461 additions & 7 deletions

File tree

Foundation/Modal/Axioms.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import Foundation.Modal.LogicSymbol
22

3+
-- TODO: move to `LO.Axioms.Modal`
4+
35
namespace LO.Axioms
46

57
variable {F : Type*} [BasicModalLogicalConnective F]
@@ -82,3 +84,13 @@ protected abbrev H := □(□φ ⭤ φ) ➝ □φ
8284
protected abbrev Z := □(□φ ➝ φ) ➝ (◇□φ ➝ □φ)
8385

8486
end LO.Axioms
87+
88+
89+
namespace LO.Axioms.Modal
90+
91+
variable {F : Type*} [BasicModalLogicalConnective F]
92+
variable (φ ψ χ : F)
93+
94+
protected abbrev Mk := □φ ⋏ ψ ➝ ◇(□□φ ⋏ ◇ψ)
95+
96+
end LO.Axioms.Modal

Foundation/Modal/Entailment/Basic.lean

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,34 @@ end
505505

506506
namespace Modal
507507

508+
509+
section HasAxiom
510+
511+
variable {S F : Type*} [BasicModalLogicalConnective F] [Entailment F S]
512+
variable {𝓢 : S} {φ ψ : F}
513+
514+
protected class HasAxiomMk [LogicalConnective F] [Box F](𝓢 : S) where
515+
Mk (φ ψ : F) : 𝓢 ⊢ Axioms.Modal.Mk φ ψ
516+
517+
section
518+
519+
variable [Modal.HasAxiomMk 𝓢]
520+
521+
def axiomMk : 𝓢 ⊢ □φ ⋏ ψ ➝ ◇(□□φ ⋏ ◇ψ) := Modal.HasAxiomMk.Mk _ _
522+
@[simp] lemma axiomMk! : 𝓢 ⊢! □φ ⋏ ψ ➝ ◇(□□φ ⋏ ◇ψ) := ⟨axiomMk⟩
523+
524+
variable [Entailment.Minimal 𝓢]
525+
526+
instance (Γ : FiniteContext F 𝓢) : Modal.HasAxiomMk Γ := ⟨fun _ _ ↦ FiniteContext.of axiomMk⟩
527+
instance (Γ : Context F 𝓢) : Modal.HasAxiomMk Γ := ⟨fun _ _ ↦ Context.of axiomMk⟩
528+
529+
end
530+
531+
end HasAxiom
532+
533+
534+
section
535+
508536
variable (𝓢 : S)
509537

510538
protected class K extends Entailment.Cl 𝓢, Necessitation 𝓢, HasAxiomK 𝓢, HasDiaDuality 𝓢
@@ -575,6 +603,10 @@ protected class GLPoint3 extends Entailment.Modal.GL 𝓢, HasAxiomWeakPoint3
575603

576604
protected class Grz extends Entailment.Modal.K 𝓢, HasAxiomGrz 𝓢
577605

606+
protected class KTMk (𝓢 : S) extends Entailment.Modal.KT 𝓢, Entailment.Modal.HasAxiomMk 𝓢
607+
608+
end
609+
578610
end Modal
579611

580612

Foundation/Modal/Entailment/KT.lean

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace LO.Entailment
66

77
open FiniteContext
88

9-
variable {S F : Type*} [BasicModalLogicalConnective F] [DecidableEq F] [Entailment F S]
9+
variable {S F : Type*} [DecidableEq F] [BasicModalLogicalConnective F] [Entailment F S]
1010
variable {𝓢 : S}
1111

1212
namespace KT
@@ -39,4 +39,19 @@ instance : Entailment.Modal.KD 𝓢 where
3939
end KT'
4040

4141

42+
section
43+
44+
variable [Entailment.Modal.KT 𝓢]
45+
46+
omit [DecidableEq F] in
47+
@[simp] lemma reduce_box_in_CAnt! : 𝓢 ⊢! □^[(i + n)]φ ➝ □^[i]φ := by
48+
induction n with
49+
| zero => simp;
50+
| succ n ih =>
51+
simp only [show (i + (n + 1)) = (i + n) + 1 by omega, Box.multibox_succ];
52+
apply C!_trans ?_ ih;
53+
apply axiomT!;
54+
55+
end
56+
4257
end LO.Entailment

Foundation/Modal/Hilbert/WellKnown.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,21 @@ instance [hM : H.HasM] : Entailment.HasAxiomM H where
241241
. use (λ b => if hM.p = b then φ else (.atom b));
242242
simp;
243243

244+
class HasMk (H : Hilbert α) where
245+
p : α
246+
q : α
247+
ne_pq : p ≠ q := by trivial;
248+
mem_Mk : Axioms.Modal.Mk (.atom p) (.atom q) ∈ H.axioms := by tauto;
249+
250+
instance [H.HasMk] : Entailment.Modal.HasAxiomMk H where
251+
Mk φ ψ := by
252+
apply maxm;
253+
use Axioms.Modal.Mk (.atom $ HasMk.p H) (.atom $ HasMk.q H);
254+
constructor;
255+
. exact HasMk.mem_Mk;
256+
. use (λ b => if b = (HasMk.q H) then ψ else if b = (HasMk.p H) then φ else (.atom b));
257+
simp [HasMk.ne_pq];
258+
244259
end
245260

246261
protected abbrev KT : Hilbert ℕ := ⟨{Axioms.K (.atom 0) (.atom 1), Axioms.T (.atom 0)}⟩
@@ -470,6 +485,12 @@ instance : (Hilbert.KD4Point3Z).HasWeakPoint3 where p := 0; q := 1;
470485
instance : (Hilbert.KD4Point3Z).HasZ where p := 0
471486
instance : Entailment.Modal.KD4Point3Z (Hilbert.KD4Point3Z) where
472487

488+
protected abbrev KTMk : Hilbert ℕ := ⟨{Axioms.K (.atom 0) (.atom 1), Axioms.T (.atom 0), Axioms.Modal.Mk (.atom 0) (.atom 1)}⟩
489+
instance : (Hilbert.KTMk).HasK where p := 0; q := 1;
490+
instance : (Hilbert.KTMk).HasT where p := 0
491+
instance : (Hilbert.KTMk).HasMk where p := 0; q := 1
492+
instance : Entailment.Modal.KTMk (Hilbert.KTMk) where
493+
473494
protected abbrev N : Hilbert ℕ := ⟨{}⟩
474495

475496
end Hilbert
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import Foundation.Modal.Kripke.Completeness
2+
3+
4+
5+
section
6+
7+
variable {α : Type u} (rel : α → α → Prop)
8+
9+
def MakinsonCondition := ∀ x, ∃ y, rel x y ∧ rel y x ∧ (∀ z, Rel.iterate rel 2 y z → rel x z)
10+
11+
class SatisfiesMakinsonCondition (α) (rel : α → α → Prop) : Prop where
12+
mkCondition : MakinsonCondition rel
13+
14+
end
15+
16+
17+
18+
19+
namespace LO.Modal
20+
21+
open Formula.Kripke
22+
23+
namespace Kripke
24+
25+
section definability
26+
27+
variable {F : Kripke.Frame}
28+
29+
lemma validate_axiomMk_of_makinsonCondition (h : MakinsonCondition F.Rel) : F ⊧ (Axioms.Modal.Mk (.atom 0) (.atom 1)) := by
30+
intro V x hx;
31+
replace ⟨hx₁, hx₂⟩ := Satisfies.and_def.mp hx;
32+
obtain ⟨y, Rxy, Ryx, hz⟩ := @h x;
33+
apply Satisfies.dia_def.mpr;
34+
use y;
35+
constructor;
36+
. assumption;
37+
. apply Satisfies.and_def.mpr;
38+
constructor;
39+
. suffices Satisfies ⟨F, V⟩ y (□^[2](.atom 0)) by simpa using this;
40+
apply Satisfies.multibox_def.mpr
41+
intro z Ryz;
42+
apply hx₁;
43+
apply hz;
44+
exact Ryz;
45+
. apply Satisfies.dia_def.mpr;
46+
use x;
47+
48+
lemma validate_axiomMk_of_satisfiesMakinsonCondition [SatisfiesMakinsonCondition _ F.Rel] : F ⊧ (Axioms.Modal.Mk (.atom 0) (.atom 1)) :=
49+
validate_axiomMk_of_makinsonCondition SatisfiesMakinsonCondition.mkCondition
50+
51+
instance : SatisfiesMakinsonCondition _ whitepoint := ⟨by
52+
intro x;
53+
use x;
54+
tauto;
55+
56+
57+
end definability
58+
59+
section canonicality
60+
61+
variable {S} [Entailment (Formula ℕ) S]
62+
variable {𝓢 : S} [Entailment.Consistent 𝓢] [Entailment.Modal.K 𝓢]
63+
64+
open Formula.Kripke
65+
open Entailment
66+
Entailment.FiniteContext
67+
open Entailment.Modal
68+
open canonicalModel
69+
open MaximalConsistentTableau
70+
71+
namespace Canonical
72+
73+
open Classical in
74+
instance [Entailment.HasAxiomT 𝓢] [Entailment.Modal.HasAxiomMk 𝓢] : SatisfiesMakinsonCondition _ (canonicalFrame 𝓢).Rel := ⟨by
75+
sorry;
76+
/-
77+
rintro x;
78+
obtain ⟨y, hy⟩ := lindenbaum (𝓢 := 𝓢) (t₀ := ⟨x.1.1.prebox, x.1.2.box ∪ x.1.2.dia⟩) $ by
79+
rintro Γ Δ hΓ hΔ;
80+
by_contra! hC;
81+
let Δ₁ := { φ ∈ Δ | φ ∈ x.1.2.box };
82+
let Δ₂ := { φ ∈ Δ | φ ∈ x.1.2.dia };
83+
have eΔ : Δ = Δ₁ ∪ Δ₂ := by
84+
ext φ;
85+
simp only [Set.mem_image, Function.iterate_one, Finset.mem_union, Finset.mem_filter, Δ₁, Δ₂];
86+
constructor;
87+
. rintro h;
88+
rcases hΔ h with h₁ | h₂ <;> tauto;
89+
. tauto;
90+
rw [] at hC;
91+
have : 𝓢 ⊢! Γ.conj ➝ Δ₁.disj ⋎ Δ₂.disj := C!_trans hC CFdisjUnionAFdisj;
92+
have : 𝓢 ⊢! □Γ.prebox.conj ➝ Δ₁.disj ⋎ Δ₂.disj := C!_trans (by
93+
apply right_Fconj!_intro;
94+
intro φ hφ;
95+
have := hΓ hφ;
96+
simp at this;
97+
sorry
98+
) this;
99+
sorry;
100+
use y;
101+
refine ⟨?_, ?_, ?_⟩;
102+
. exact hy.1;
103+
. apply def_rel_box_mem₂.mpr;
104+
intro φ hφ;
105+
exact @hy.2 (□φ) (by left; simpa);
106+
. rintro z Ryz;
107+
apply def_rel_dia_mem₂.mpr;
108+
intro φ hφ;
109+
apply def_multirel_multidia_mem₂.mp Ryz;
110+
exact @hy.2 (◇◇φ) (by simpa);
111+
-/
112+
113+
114+
end Canonical
115+
116+
end canonicality
117+
118+
end Kripke
119+
120+
end LO.Modal

Foundation/Modal/Kripke/Basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ lemma multibox_dn : x ⊧ □^[n](∼∼φ) ↔ x ⊧ □^[n]φ := by
147147
. intro h y Rxy;
148148
exact ih.mpr $ (h y Rxy);
149149

150+
lemma box_dn : x ⊧ □(∼∼φ) ↔ x ⊧ □φ := multibox_dn (n := 1)
151+
150152
lemma multidia_dn : x ⊧ ◇^[n](∼∼φ) ↔ x ⊧ ◇^[n]φ := by
151153
induction n generalizing x with
152154
| zero => simp;
@@ -168,6 +170,8 @@ lemma multidia_dn : x ⊧ ◇^[n](∼∼φ) ↔ x ⊧ ◇^[n]φ := by
168170
. exact Rxy;
169171
. exact ih.mpr h;
170172

173+
lemma dia_dn : x ⊧ ◇(∼∼φ) ↔ x ⊧ ◇φ := multidia_dn (n := 1)
174+
171175
lemma multibox_def : x ⊧ □^[n]φ ↔ ∀ {y}, x ≺^[n] y → y ⊧ φ := by
172176
induction n generalizing x with
173177
| zero => simp;

Foundation/Modal/Kripke/Completeness.lean

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ open Formula.Kripke.Satisfies
145145

146146
variable {x y : (canonicalModel 𝓢).World}
147147

148-
lemma def_rel_box_mem₁ : x ≺ y ↔ ∀ {φ}, □φ ∈ x.1.1 → φ ∈ y.1.1 := by simp [Frame.Rel']; aesop;
148+
lemma def_rel_box_mem₁ : x ≺ y ↔ x.1.1.prebox ⊆ y.1.1 := by simp [Frame.Rel'];
149149

150150
lemma def_rel_box_satisfies : x ≺ y ↔ ∀ {φ}, x ⊧ □φ → y ⊧ φ := by
151151
constructor;
@@ -205,11 +205,32 @@ lemma def_multirel_multibox_satisfies : x ≺^[n] y ↔ (∀ {φ}, x ⊧ □^[n]
205205
intro φ hφ;
206206
simpa using (Set.compl_subset_compl.mpr ht.2) $ iff_not_mem₂_mem₁.mpr $ truthlemma₁.mpr hφ
207207

208-
lemma def_multirel_multibox_mem₁ : x ≺^[n] y ↔ (∀ {φ}, □^[n]φ ∈ x.1.1 → φ ∈ y.1.1) := ⟨
208+
lemma def_multirel_multibox_mem₁ : x ≺^[n] y ↔ (x.1.1.premultibox n ⊆ y.1.1) := ⟨
209209
fun h _ hφ => truthlemma₁.mpr $ def_multirel_multibox_satisfies.mp h $ truthlemma₁.mp hφ,
210210
fun h => def_multirel_multibox_satisfies.mpr fun hφ => truthlemma₁.mp (h $ truthlemma₁.mpr hφ)
211211
212212

213+
lemma def_multirel_multibox_mem₂ : x ≺^[n] y ↔ (y.1.2 ⊆ x.1.2.premultibox n) := by
214+
apply Iff.trans def_multirel_multibox_mem₁;
215+
constructor;
216+
. intro h φ;
217+
contrapose!;
218+
intro hφ;
219+
apply iff_not_mem₂_mem₁.mpr;
220+
apply h;
221+
apply iff_not_mem₂_mem₁.mp;
222+
assumption;
223+
. intro h φ;
224+
contrapose!;
225+
intro hφ;
226+
apply iff_not_mem₁_mem₂.mpr;
227+
apply h;
228+
apply iff_not_mem₁_mem₂.mp;
229+
assumption;
230+
231+
lemma def_rel_box_mem₂ : x ≺ y ↔ (y.1.2 ⊆ x.1.2.prebox) := by
232+
simpa using def_multirel_multibox_mem₂ (n := 1);
233+
213234
lemma def_multirel_multidia_satisfies : x ≺^[n] y ↔ (∀ {φ}, y ⊧ φ → x ⊧ ◇^[n]φ) := by
214235
constructor;
215236
. intro h φ hφ;
@@ -228,15 +249,15 @@ lemma def_multirel_multidia_satisfies : x ≺^[n] y ↔ (∀ {φ}, y ⊧ φ →
228249
intro _ _;
229250
apply negneg_def.mpr;
230251

231-
lemma def_multirel_multidia_mem₁ : x ≺^[n] y ↔ (∀ {φ}, φ ∈ y.1.1 → ◇^[n]φ ∈ x.1.1) := ⟨
252+
lemma def_multirel_multidia_mem₁ : x ≺^[n] y ↔ (y.1.1 x.1.1.premultidia n) := ⟨
232253
fun h _ hφ => truthlemma₁.mpr $ def_multirel_multidia_satisfies.mp h (truthlemma₁.mp hφ),
233254
fun h => def_multirel_multidia_satisfies.mpr fun hφ => truthlemma₁.mp $ h (truthlemma₁.mpr hφ)
234255
235256

236-
lemma def_rel_dia_mem₁ : x ≺ y ↔ (∀ {φ}, φ ∈ y.1.1 → ◇φ ∈ x.1.1) := by
257+
lemma def_rel_dia_mem₁ : x ≺ y ↔ (y.1.1 x.1.1.predia) := by
237258
simpa using def_multirel_multidia_mem₁ (n := 1);
238259

239-
lemma def_multirel_multidia_mem₂ : x ≺^[n] y ↔ (∀ {φ}, ◇^[n]φ ∈ x.1.2 → φ ∈ y.1.2) := by
260+
lemma def_multirel_multidia_mem₂ : x ≺^[n] y ↔ (x.1.2.premultidia n ⊆ y.1.2) := by
240261
constructor;
241262
. intro Rxy φ;
242263
contrapose;
@@ -251,7 +272,7 @@ lemma def_multirel_multidia_mem₂ : x ≺^[n] y ↔ (∀ {φ}, ◇^[n]φ ∈ x.
251272
intro hφ;
252273
exact iff_not_mem₁_mem₂.mpr $ @H φ (iff_not_mem₁_mem₂.mp hφ);
253274

254-
lemma def_rel_dia_mem₂ : x ≺ y ↔ (∀ {φ}, ◇φ ∈ x.1.2 → φ ∈ y.1.2) := by
275+
lemma def_rel_dia_mem₂ : x ≺ y ↔ (x.1.2.predia ⊆ y.1.2) := by
255276
simpa using def_multirel_multidia_mem₂ (n := 1);
256277

257278
end canonicalModel

0 commit comments

Comments
 (0)