Skip to content

Commit f41ab4f

Browse files
committed
wip
1 parent cd1aa05 commit f41ab4f

9 files changed

Lines changed: 213 additions & 227 deletions

File tree

Foundation/Modal/Kripke/ExtendRoot.lean

Lines changed: 49 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ instance isFinite [F.IsFinite] : (F.extendRoot n).IsFinite := by
4040

4141
instance fintype [Fintype F] : Fintype (F.extendRoot n) := instFintypeSum (Fin n) F
4242

43-
protected abbrev root (F n) : (extendRoot F n).Root := ⟨.inl ⟨n - 1, by simp⟩, by grind⟩
43+
protected abbrev defaultRoot (F n) : (extendRoot F n).Root := ⟨.inl ⟨n - 1, by simp⟩, by grind⟩
4444

45-
instance : (F.extendRoot n).IsRooted := ⟨extendRoot.root F n⟩
45+
instance : (F.extendRoot n).IsRooted := ⟨extendRoot.defaultRoot F n⟩
4646

4747
protected abbrev chain (F n) : List (extendRoot F n) := List.finRange n |>.reverse.map (extend ·)
4848

@@ -68,40 +68,6 @@ protected abbrev pMorphism : F →ₚ F.extendRoot n where
6868
forth := by grind;
6969
back {x y} h := by grind;
7070

71-
lemma not_root_of_from_root (r : F.Root) (x : F.extendRoot n) (h : (extendRoot.root F n) ≺ x) :
72-
(∃ i : Fin n, x = extend i) ∨ x = r ∨ r ≺ x := by
73-
match x with
74-
| .inl i =>
75-
left;
76-
use i;
77-
| .inr x =>
78-
by_cases e : x = r;
79-
. tauto;
80-
. right;
81-
right;
82-
apply extendRoot.pMorphism.forth;
83-
grind;
84-
85-
lemma not_root_of_from_root' (r : F.Root) (x : F.extendRoot n) (h : (extendRoot.root F n) ≺ x) :
86-
(∃ i : Fin n, x = extend i) ∨ x = r ∨ ∃ x₀ : F, x = x₀ ∧ r ≺ x₀ := by
87-
rcases not_root_of_from_root r x h with (h | h | h)
88-
· tauto;
89-
· tauto;
90-
· right; right;
91-
rcases extendRoot.pMorphism.back h with ⟨x₀, rfl, hx₀⟩;
92-
exact ⟨x₀, rfl, hx₀⟩
93-
94-
lemma not_root_of_from_root₁ (r : F.Root) [F.IsIrreflexive] (x : F.extendRoot 1) (h : (extendRoot.root F 1) ≺ x) :
95-
x = r ∨ embed r ≺ x := by
96-
rcases not_root_of_from_root r x h with (⟨i, hi, rfl⟩ | hr | hr) <;> simp_all [extendRoot.root]
97-
98-
lemma not_root_of_from_root'₁ (r : F.Root) [F.IsIrreflexive] (x : F.extendRoot 1) (h : (extendRoot.root F 1) ≺ x) :
99-
x = r ∨ ∃ x₀ : F, x = x₀ ∧ r ≺ x₀ := by
100-
rcases not_root_of_from_root' r x h with (⟨i, hi, rfl⟩ | hr | hr) <;> simp_all [extendRoot.root]
101-
102-
lemma eq_inr_of_root_rel (r : F.Root) [F.IsIrreflexive] (x : F.extendRoot 1) (h : (extendRoot.root F 1) ≺ x) :
103-
∃ x₀ : F, x = x₀ := by
104-
rcases not_root_of_from_root'₁ r x h with (rfl | ⟨x₀, rfl, hx₀⟩) <;> grind;
10571

10672
@[simp]
10773
lemma embed_rel_embed_iff_rel {i j : F} : embed (n := n) i ≺ embed j ↔ i ≺ j :=
@@ -111,8 +77,55 @@ lemma embed_rel_embed_iff_rel {i j : F} : embed (n := n) i ≺ embed j ↔ i ≺
11177
lemma embed_rel_iterate_embed_iff_rel {i j : F} : embed (n := n) i ≺^[k] embed j ↔ i ≺^[k] j :=
11278
extendRoot.pMorphism.toFun_rel_iterate_toFun_iff_of_inj Sum.inr_injective
11379

80+
81+
@[simp, grind .]
82+
lemma eq_defaultRoot_root [F.IsIrreflexive] [F.IsTransitive] : (F.extendRoot n).root = (extendRoot.defaultRoot F n) := by
83+
apply root_uniqueness_of_irrefl_trans;
84+
85+
@[simp, grind .]
86+
lemma rel_defaultRoot_original_root [F.IsRooted] [F.IsTransitive] [F.IsIrreflexive] : (F.extendRoot n).root.1 ≺ F.root.1 := by
87+
grind [eq_defaultRoot_root];
88+
89+
@[grind →]
90+
lemma not_eq_defaultRoot_of_rel_defaultRoot (x : F.extendRoot n) (h : (extendRoot.defaultRoot F n) ≺ x) : x ≠ (extendRoot.defaultRoot F n) := by grind;
91+
92+
@[grind →]
93+
lemma not_eq_extendRoot_root_of_rel_original_root [F.IsIrreflexive] [F.IsTransitive] (x : F.extendRoot n) (h : (extendRoot F n).root ≺ x) : x ≠ (extendRoot F n).root := by grind;
94+
95+
96+
lemma eq_extend_or_eq_original (x : F.extendRoot n)
97+
: (∃ i : Fin n, x = extend i) ∨ (∃ x₀ : F, x = x₀) := by
98+
match x with
99+
| .inl i => left; use i;
100+
| .inr x => grind;
101+
102+
103+
section
104+
105+
lemma eq_original_of_rel_defaultRoot₁ [F.IsIrreflexive] (x : F.extendRoot 1) (h : (extendRoot.defaultRoot F 1) ≺ x)
106+
: ∃ x₀ : F, x = x₀ := by
107+
rcases eq_extend_or_eq_original x with (⟨i, hi, rfl⟩ | _) <;> simp_all;
108+
109+
lemma eq_root_or_rel_original_root_of_neq_defaultRoot₁ [F.IsIrreflexive] (x : F.extendRoot 1) (h : x ≠ (extendRoot.defaultRoot F 1))
110+
: ∃ x₀ : F, x = x₀ := by
111+
apply eq_original_of_rel_defaultRoot₁;
112+
grind;
113+
114+
lemma eq_root_or_rel_original_root_of_rel_extendRoot_root₁ [F.IsIrreflexive] (x : F.extendRoot 1) (h : (extendRoot F 1).root ≺ x)
115+
: ∃ x₀ : F, x = x₀ := by
116+
apply eq_original_of_rel_defaultRoot₁;
117+
grind;
118+
119+
lemma eq_root_or_rel_original_root_of_neq_extendRoot_root₁ [F.IsIrreflexive] [F.IsTransitive] (x : F.extendRoot 1) (h : x ≠ (extendRoot F 1).root)
120+
: ∃ x₀ : F, x = x₀ := by
121+
apply eq_root_or_rel_original_root_of_neq_defaultRoot₁;
122+
grind [eq_defaultRoot_root];
123+
124+
end
125+
114126
end Frame.extendRoot
115127

128+
116129
abbrev Model.extendRoot (M : Kripke.Model) (r : M.Root) (n : ℕ+) : Kripke.Model where
117130
toFrame := M.toFrame.extendRoot n
118131
Val a x :=
@@ -124,31 +137,9 @@ namespace Model.extendRoot
124137

125138
variable {M : Model} {r : M.Root} {x y : M.World} {n : ℕ+} {i : Fin n} {φ}
126139

127-
-- abbrev extend (i : Fin n) : M.extendRoot r n := .inl i
128-
129140
@[coe] abbrev extend (i : Fin n) : M.extendRoot r n := .inl i
130141
@[coe] abbrev embed (x : M) : M.extendRoot r n := .inr x
131142

132-
-- instance : Coe (M.World) ((M.extendRoot r n).World) := ⟨embed⟩
133-
134-
-- protected abbrev root (M) := Frame.extendRoot.root (M.toFrame) (n := n)
135-
136-
/-
137-
instance isFinite [M.IsFinite] : (M.extendRoot r n).IsFinite := Frame.extendRoot.isFinite
138-
139-
instance fintype [Fintype M] : Fintype (M.extendRoot r n) := Frame.extendRoot.fintype
140-
141-
instance isTransitive [M.IsTransitive] : (M.extendRoot n).IsTransitive := Frame.extendRoot.isTransitive
142-
143-
instance isAsymmetric [M.IsAsymmetric] : (M.extendRoot n).IsAsymmetric := Frame.extendRoot.isAsymmetric
144-
145-
instance isRooted [M.IsRootedBy r] : (M.extendRoot n).IsRootedBy extendRoot.root := Frame.extendRoot.instIsRooted
146-
147-
instance isTree [M.IsTree r] : (M.extendRoot n).IsTree extendRoot.root := Frame.extendRoot.isTree
148-
149-
instance isFiniteTree [M.IsFiniteTree r] : (M.extendRoot n).IsFiniteTree extendRoot.root := Frame.extendRoot.isFiniteTree
150-
-/
151-
152143
def pMorphism : M →ₚ M.extendRoot r n := PseudoEpimorphism.ofAtomic Frame.extendRoot.pMorphism $ by grind;
153144

154145
lemma modal_equivalence_original_world : (embed x : M.extendRoot r n) ↭ x :=

Foundation/Modal/Kripke/Logic/GL/Completeness.lean

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,8 @@ instance FFP : Complete Modal.GL Kripke.FrameClass.finite_GL := ⟨by
217217
theorem finite_completeness_TFAE : [
218218
Modal.GL ⊢ φ,
219219
FrameClass.finite_GL ⊧ φ,
220-
∀ F : Kripke.Frame, [F.IsFinite] → [F.IsTransitive] → [F.IsIrreflexive] → F.IsRooted → F ⊧ φ,
221-
∀ M : Kripke.Model, [M.IsFinite] → [M.IsTransitive] → [M.IsIrreflexive] → ∀ r : M.Root, r.1 ⊧ φ,
220+
∀ F : Kripke.Frame, [F.IsFinite] → [F.IsTransitive] → [F.IsIrreflexive] → [F.IsRooted] → F ⊧ φ,
221+
∀ M : Kripke.Model, [M.IsFinite] → [M.IsTransitive] → [M.IsIrreflexive] → [M.IsRooted] → M.root.1 ⊧ φ,
222222
].TFAE := by
223223
tfae_have 12 := by apply Sound.sound;
224224
tfae_have 21 := by apply Complete.complete;
@@ -229,33 +229,30 @@ theorem finite_completeness_TFAE : [
229229
tfae_have 34 := by
230230
intro h F _ _ _ r;
231231
apply h;
232-
exact ⟨r⟩;
233232
tfae_have 42 := by
234233
rintro H F ⟨_, F_trans, F_irrefl⟩ V x;
235234
let M : Kripke.Model := ⟨F, V⟩;
236-
exact Model.pointGenerate.pMorphism M x |>.modal_equivalence _ |>.mp $ H (M↾x) (⟨⟨x, by grind⟩, by grind⟩);
235+
simpa [Frame.pointGenerate.eq_root_pointGenerate_root] using Model.pointGenerate.pMorphism M x |>.modal_equivalence _ |>.mp $ H (M↾x);
237236
tfae_finish;
238237

239-
lemma iff_unprovable_exists_finite_rooted_model : Modal.GL ⊬ φ ↔ ∃ M : Model, ∃ _ : M.IsFinite, ∃ _ : M.IsTransitive, ∃ _ : M.IsIrreflexive, ∃ r : M.Root, ¬r.1 ⊧ φ := by
238+
lemma iff_unprovable_exists_finite_rooted_model : Modal.GL ⊬ φ ↔ ∃ M : Model, ∃ _ : M.IsFinite, ∃ _ : M.IsTransitive, ∃ _ : M.IsIrreflexive, ∃ _ : M.IsRooted, ¬M.root.1 ⊧ φ := by
240239
apply Iff.not_left;
241240
apply Iff.trans $ finite_completeness_TFAE (φ := φ) |>.out 0 3;
242241
push_neg;
243242
tauto;
244243

245244
theorem fintype_completeness_TFAE : [
246245
Modal.GL ⊢ φ,
247-
∀ F : Kripke.Frame, [Fintype F] → [F.IsTransitive] → [F.IsIrreflexive] → F.IsRooted → F ⊧ φ,
248-
∀ M : Kripke.Model, [Fintype M] → [M.IsTransitive] → [M.IsIrreflexive] → ∀ r : M.Root, r.1 ⊧ φ,
246+
∀ F : Kripke.Frame, [Fintype F] → [F.IsTransitive] → [F.IsIrreflexive] → [F.IsRooted] → F ⊧ φ,
247+
∀ M : Kripke.Model, [Fintype M] → [M.IsTransitive] → [M.IsIrreflexive] → [M.IsRooted] → M.root.1 ⊧ φ,
249248
].TFAE := by
250249
tfae_have 12 := by
251250
rintro h F _ _ Fcwf _ _;
252251
have := finite_completeness_TFAE.out 0 2 |>.mp h;
253252
apply this;
254-
assumption;
255253
tfae_have 23 := by
256-
intro h F _ _ _ r;
254+
intro h F _ _ _ _;
257255
apply h;
258-
exact ⟨r⟩;
259256
tfae_have 31 := by
260257
intro h;
261258
apply finite_completeness_TFAE (φ := φ) |>.out 3 0 |>.mp;
@@ -264,7 +261,7 @@ theorem fintype_completeness_TFAE : [
264261
apply h;
265262
tfae_finish;
266263

267-
lemma iff_unprovable_exists_fintype_rooted_model : Modal.GL ⊬ φ ↔ ∃ M : Model, ∃ _ : Fintype M, ∃ _ : M.IsTransitive, ∃ _ : M.IsIrreflexive, ∃ r : M.Root, ¬r.1 ⊧ φ := by
264+
lemma iff_unprovable_exists_fintype_rooted_model : Modal.GL ⊬ φ ↔ ∃ M : Model, ∃ _ : Fintype M, ∃ _ : M.IsTransitive, ∃ _ : M.IsIrreflexive, ∃ _ : M.IsRooted, ¬M.root.1 ⊧ φ := by
268265
apply Iff.not_left;
269266
apply Iff.trans $ fintype_completeness_TFAE (φ := φ) |>.out 0 2;
270267
push_neg;

Foundation/Modal/Kripke/Logic/GL/MDP.lean

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -49,38 +49,8 @@ instance [F₁.IsTransitive] [F₂.IsTransitive] : (mdpCounterexmpleFrame F₁ F
4949
| .inl _, .inr (.inr _), .inr (.inr _)
5050
| .inl _, .inr (.inl _), .inr (.inl _) => grind;
5151

52-
53-
/-
54-
instance {F₁ F₂ : Frame} -- {r₁ : outParam F₁.World} {r₂ : outParam F₂.World}
55-
-- [tree₁ : F₁.IsFiniteTree r₁] [tree₂ : F₂.IsFiniteTree r₂]
56-
: (mdpCounterexmpleFrame F₁ F₂ r₁ r₂).IsFiniteTree (.inl ()) where
57-
root_generates := by
58-
intro x hx;
59-
match x with
60-
| .inl x => contradiction;
61-
| .inr _ =>
62-
apply Relation.TransGen.single;
63-
tauto;
64-
asymm := by
65-
intro x y hxy;
66-
match x, y with
67-
| .inr (.inl x), .inr (.inl y) => exact tree₁.asymm _ _ hxy;
68-
| .inr (.inr x), .inr (.inr y) => apply tree₂.asymm _ _ hxy;
69-
| .inl x, .inl y => contradiction;
70-
| .inl x, .inr y => simp;
71-
trans := by
72-
intro x y z hxy hyz;
73-
match x, y, z with
74-
| .inr (.inl x), .inr (.inl y), .inr (.inl z) => apply tree₁.trans _ _ _ hxy hyz;
75-
| .inr (.inr x), .inr (.inr y), .inr (.inr z) => apply tree₂.trans _ _ _ hxy hyz;
76-
| .inl _, .inr (.inr _), .inr (.inr _) => simp;
77-
| .inl _, .inr (.inl _), .inr (.inl _) => simp;
78-
79-
-- TODO: remove?
80-
instance : (mdpCounterexmpleFrame F₁ F₂ r₁ r₂).IsIrreflexive := ⟨by simp⟩
81-
-/
82-
83-
protected abbrev root (F₁ F₂) : (mdpCounterexmpleFrame F₁ F₂).Root := ⟨.inl (), by grind⟩
52+
protected abbrev defaultRoot (F₁ F₂) : (mdpCounterexmpleFrame F₁ F₂).Root := ⟨.inl (), by grind⟩
53+
instance : (mdpCounterexmpleFrame F₁ F₂).IsRooted := ⟨mdpCounterexmpleFrame.defaultRoot F₁ F₂⟩
8454

8555
def pMorphism₁ (F₁ F₂) : F₁ →ₚ (mdpCounterexmpleFrame F₁ F₂) where
8656
toFun x := .inr (.inl x)
@@ -92,7 +62,7 @@ def pMorphism₂ (F₁ F₂) : F₂ →ₚ (mdpCounterexmpleFrame F₁ F₂) whe
9262
forth := by intro x y hxy; exact hxy;
9363
back {x y} h := by match y with | .inr (.inr y) => use y;
9464

95-
lemma through_original_root (r₁ : F₁.Root) (r₂ : F₂.Root) (x : (mdpCounterexmpleFrame F₁ F₂).World) (h : mdpCounterexmpleFrame.root F₁ F₂ ≺ x)
65+
lemma through_original_root (r₁ : F₁.Root) (r₂ : F₂.Root) (x : (mdpCounterexmpleFrame F₁ F₂).World) (h : mdpCounterexmpleFrame.defaultRoot F₁ F₂ ≺ x)
9666
: (x = r₁ ∨ (Sum.inr (Sum.inl r₁.1) ≺ x)) ∨ (x = r₂ ∨ (Sum.inr (Sum.inr r₂.1) ≺ x)) := by
9767
match x with
9868
| .inl x => grind;
@@ -125,7 +95,7 @@ variable {M₁ M₂ : Model} -- {r₁ : M₁.World} {r₂ : M₂.World} [tree₁
12595
-- instance : Coe (M₁.World) (mdpCounterexmpleModel M₁ M₂ r₁ r₂).World := ⟨Sum.inr ∘ Sum.inl⟩
12696
-- instance : Coe (M₂.World) (mdpCounterexmpleModel M₁ M₂ r₁ r₂).World := ⟨Sum.inr ∘ Sum.inr⟩
12797

128-
-- abbrev root : (mdpCounterexmpleModel M₁ M₂).World := mdpCounterexmpleFrame.root (F₁ := M₁.toFrame) (F₂ := M₂.toFrame) (r₁ := r₁) (r₂ := r₂)
98+
-- abbrev root : (mdpCounterexmpleModel M₁ M₂).World := mdpCounterexmpleFrame.defaultRoot (F₁ := M₁.toFrame) (F₂ := M₂.toFrame) (r₁ := r₁) (r₂ := r₂)
12999

130100
def pMorphism₁ (M₁ M₂) : M₁ →ₚ (mdpCounterexmpleModel M₁ M₂) :=
131101
Model.PseudoEpimorphism.ofAtomic (mdpCounterexmpleFrame.pMorphism₁ M₁.toFrame M₂.toFrame) $ by
@@ -157,14 +127,16 @@ lemma MDP_Aux {X : Set _} (h : (□'X) *⊢[Modal.GL] □φ₁ ⋎ □φ₂) : (
157127
by_contra! hC;
158128
have ⟨h₁, h₂⟩ : (Modal.GL ⊬ ⊡c ➝ φ₁) ∧ (Modal.GL ⊬ ⊡c ➝ φ₂) := hC;
159129

160-
obtain ⟨M₁, _, _, _, r₁, hM₁⟩ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mp h₁;
161-
obtain ⟨M₂, _, _, _, r₂, hM₂⟩ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mp h₂;
130+
obtain ⟨M₁, _, _, _, _, hM₁⟩ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mp h₁;
131+
obtain ⟨M₂, _, _, _, _, hM₂⟩ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mp h₂;
162132

133+
let r₁ := M₁.root;
134+
let r₂ := M₂.root;
163135
let M₀ := Kripke.mdpCounterexmpleModel M₁ M₂;
164-
let r₀ : M₀.Root := Kripke.mdpCounterexmpleFrame.root _ _;
136+
let r₀ : M₀.Root := Kripke.mdpCounterexmpleFrame.defaultRoot _ _;
165137

166-
replace hM₁ : Satisfies M₀ r₁ (⊡c ⋏ ∼φ₁) := Kripke.mdpCounterexmpleModel.modal_equivalence_original_world₁.mp (Formula.Kripke.Satisfies.not_imp.mp hM₁);
167-
replace hM₂ : Satisfies M₀ r₂ (⊡c ⋏ ∼φ₂) := Kripke.mdpCounterexmpleModel.modal_equivalence_original_world₂.mp (Formula.Kripke.Satisfies.not_imp.mp hM₂);
138+
replace hM₁ : Satisfies M₀ r₁ (⊡c ⋏ ∼φ₁) := Kripke.mdpCounterexmpleModel.modal_equivalence_original_world₁.mp (Formula.Kripke.Satisfies.not_imp.mp hM₁);
139+
replace hM₂ : Satisfies M₀ r₂ (⊡c ⋏ ∼φ₂) := Kripke.mdpCounterexmpleModel.modal_equivalence_original_world₂.mp (Formula.Kripke.Satisfies.not_imp.mp hM₂);
168140

169141
have hc : Satisfies M₀ r₀ (□c) := by
170142
intro x Rrx;
@@ -194,8 +166,8 @@ lemma MDP_Aux {X : Set _} (h : (□'X) *⊢[Modal.GL] □φ₁ ⋎ □φ₂) : (
194166
exact ⟨hp₁, hp₂⟩;
195167
have : ¬(Satisfies M₀ r₀ (□c ➝ (□φ₁ ⋎ □φ₂))) := _root_.not_imp.mpr ⟨hc, this⟩;
196168
have : Modal.GL ⊬ □c ➝ □φ₁ ⋎ □φ₂ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mpr $ by
197-
use M₀, inferInstance, inferInstance, inferInstance, r₀;
198-
exact this;
169+
use M₀, inferInstance, inferInstance, inferInstance, inferInstance;
170+
rwa [Frame.root_uniqueness_of_irrefl_trans r₀] at this;
199171
contradiction;
200172

201173
rcases this with (h | h) <;> {

Foundation/Modal/Kripke/Logic/GL/Unnecessitation.lean

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,32 @@ lemma imply_boxdot_plain_of_imply_box_box : Modal.GL ⊢ □φ ➝ □ψ → Mod
1717
contrapose;
1818

1919
intro h;
20-
obtain ⟨M, _, _, _, r, hs⟩ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mp h;
20+
obtain ⟨M, _, _, _, _, hs⟩ := GL.Kripke.iff_unprovable_exists_finite_rooted_model.mp h;
2121

22-
let M₀ := M.extendRoot r 1;
23-
let r₀ : M₀.Root := Frame.extendRoot.root M.toFrame 1;
2422

2523
apply GL.Kripke.iff_unprovable_exists_finite_rooted_model.mpr;
26-
use M₀, inferInstance, inferInstance, inferInstance, r₀;
24+
use (M.extendRoot M.root 1), inferInstance, inferInstance, inferInstance, inferInstance;
2725

28-
have hs : Satisfies M r (⊡φ ⋏ ∼ψ) := by simp_all [Satisfies];
29-
replace hs := @Model.extendRoot.modal_equivalence_original_world (M := M) (r := r) (n := 1) r (⊡φ ⋏ ∼ψ) |>.mpr hs;
26+
have hs : Satisfies M M.root (⊡φ ⋏ ∼ψ) := by simp_all [Satisfies];
27+
replace hs := @Model.extendRoot.modal_equivalence_original_world (M := M) (r := M.root) (n := 1) M.root (⊡φ ⋏ ∼ψ) |>.mpr hs;
3028
have ⟨hs₁₂, hs₃⟩ := Satisfies.and_def.mp hs;
3129
have ⟨hs₁, hs₂⟩ := Satisfies.and_def.mp hs₁₂;
3230

3331
apply Satisfies.not_imp_def.mpr;
3432
constructor;
35-
. have hs : Satisfies M r (⊡φ ⋏ ∼ψ) := by simp_all [Satisfies];
36-
replace hs := @Model.extendRoot.modal_equivalence_original_world (M := M) (r := r) (n := 1) r (⊡φ ⋏ ∼ψ) |>.mpr hs;
33+
. have hs : Satisfies M M.root (⊡φ ⋏ ∼ψ) := by simp_all [Satisfies];
34+
replace hs := @Model.extendRoot.modal_equivalence_original_world (M := M) (r := M.root) (n := 1) M.root (⊡φ ⋏ ∼ψ) |>.mpr hs;
3735
have ⟨hs₁₂, hs₃⟩ := Satisfies.and_def.mp hs;
3836
have ⟨hs₁, hs₂⟩ := Satisfies.and_def.mp hs₁₂;
39-
4037
intro x hx;
41-
rcases Frame.extendRoot.not_root_of_from_root₁ (F := M.toFrame) (x := x) r hx with (rfl | hr);
42-
. assumption;
43-
. apply hs₂; exact hr;
38+
obtain ⟨x₀, rfl⟩ := Frame.extendRoot.eq_root_or_rel_original_root_of_neq_extendRoot_root₁ x (by grind);
39+
by_cases e : x₀ = M.root;
40+
. exact e ▸ hs₁;
41+
. apply hs₂;
42+
grind;
4443
. apply Satisfies.box_def.not.mpr;
4544
push_neg;
46-
use (Sum.inr r);
45+
use (Sum.inr M.root);
4746
constructor;
4847
. grind;
4948
. assumption;

0 commit comments

Comments
 (0)