Skip to content

Commit 7c5cb29

Browse files
committed
iff_mem_logicIntrinsic_mem_logicDiaFreeExtrinsic_of_diaFree
1 parent d4e8e2f commit 7c5cb29

1 file changed

Lines changed: 54 additions & 3 deletions

File tree

NCML/IML/Semantics.lean

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ infixl:80 " ⊧ⁱ " => IntrinsicValid
166166
end KripkeFrame
167167

168168

169-
def logicExtrinsic := { φ : BDFormula | ∀ κ : Type*, [Nonempty κ] → ∀ M : KripkeModel κ, [M.MRelLifting] → [M.MixConfluent] → M ⊧ᵉ φ }
170-
def logicIntrinsic := { φ : BDFormula | ∀ κ : Type*, [Nonempty κ] → ∀ M : KripkeModel κ, M ⊧ⁱ φ }
169+
abbrev logicExtrinsic := { φ : BDFormula | ∀ {κ : Type*}, [Nonempty κ] → ∀ M : KripkeModel κ, [M.MRelLifting] → [M.MixConfluent] → M ⊧ᵉ φ }
170+
abbrev logicIntrinsic := { φ : BDFormula | ∀ {κ : Type*}, [Nonempty κ] → ∀ M : KripkeModel κ, M ⊧ⁱ φ }
171171

172172
lemma wwwww {M : KripkeModel κ} [M.MRelLifting] [M.MixConfluent] {x₁ : M.World} {φ} : x₁ ⊩ᵉ φ ↔ x₁ ⊩ⁱ φ := by
173173
induction φ generalizing x₁ with
@@ -225,7 +225,7 @@ theorem logicIntrinsic_ssubset_logicExtrinsic : logicIntrinsic.{0} ⊂ logicExtr
225225
. exact axiomCDia_notMem_logicIntrinsic;
226226

227227

228-
def logicDiaFreeExtrinsic := { φ : BDFormula | φ.diaFree ∧ (∀ κ : Type*, [Nonempty κ] → ∀ M : KripkeModel κ, [M.MRelLifting] → M ⊧ᵉ φ) }
228+
abbrev logicDiaFreeExtrinsic := { φ : BDFormula | φ.diaFree ∧ (∀ {κ : Type*}, [Nonempty κ] → ∀ M : KripkeModel κ, [M.MRelLifting] → M ⊧ᵉ φ) }
229229

230230
open KripkeModel
231231

@@ -277,6 +277,57 @@ theorem logicDiaFreeExtrinsic_ssubset_logicExtrinsic : logicDiaFreeExtrinsic.{0}
277277
. exact dnBoxBot_mem_logicExtrinsic;
278278
. exact dnBoxBot_notMem_logicDiaFreeExtrinsic;
279279

280+
lemma diaFree_equiv {M : KripkeModel κ} [M.MRelLifting] {φ} (hφ : φ.diaFree) {x₁ : M.World} : x₁ ⊩ᵉ φ ↔ x₁ ⊩ⁱ φ := by
281+
induction φ generalizing x₁ with
282+
| box φ ihφ =>
283+
constructor;
284+
. intro h y₁ Ix₁y₁ y₂ My₁y₂;
285+
exact ihφ (by grind) |>.mp $ KripkeModel.diaFree_formula_persistent_exrinsicForces (by grind) h Ix₁y₁ y₂ My₁y₂;
286+
. intro h y₁ Mx₁y₁;
287+
exact ihφ (by grind) |>.mpr $ h x₁ (refl x₁) y₁ Mx₁y₁;
288+
| _ => grind;
289+
290+
lemma iff_mem_logicIntrinsic_mem_logicDiaFreeExtrinsic_of_diaFree (hφ : φ.diaFree) : (φ ∈ logicIntrinsic.{u}) ↔ φ ∈ logicDiaFreeExtrinsic.{u} := by
291+
simp only [Set.mem_setOf_eq]
292+
constructor;
293+
. intro h;
294+
constructor;
295+
. assumption;
296+
. intro κ _ M _ x;
297+
exact diaFree_equiv (by grind) |>.mpr $ h M x;
298+
. rintro ⟨_, h⟩ κ _ M x;
299+
let M' : KripkeModel κ := {
300+
iRel := M.iRel,
301+
mRel x y := M.mRel x y ∨ (∃ x', M.iRel x x' ∧ M.mRel x' y),
302+
val := M.val,
303+
val_persistent := M.val_persistent,
304+
};
305+
have : M'.MRelLifting := ⟨by
306+
rintro x₁ x₂ y₂ Ix₁x₂ Mx₂y₂;
307+
use y₂;
308+
constructor;
309+
. apply refl;
310+
. rcases Mx₂y₂ with (h | ⟨x₃, Ix₂x₃, Mx₃y₂⟩);
311+
. right; use x₂;
312+
. right;
313+
use x₃;
314+
constructor;
315+
. apply _root_.trans Ix₁x₂ Ix₂x₃;
316+
. assumption;
317+
318+
have : ∀ ψ, ψ.diaFree → ∀ w, (M.IntrinsicForces w ψ ↔ M'.ExtrinsicForces w ψ) := by
319+
intro ψ hψ w;
320+
induction ψ generalizing w with
321+
| box ψ ih =>
322+
replace ih := ih (by grind);
323+
constructor;
324+
. rintro h v (Mwv | ⟨v', Iwv', Mv'v⟩);
325+
. exact ih _ |>.mp $ h w (refl _) v Mwv;
326+
. exact ih _ |>.mp $ h _ Iwv' v Mv'v;
327+
. grind;
328+
| _ => grind;
329+
exact this φ (by assumption) x |>.mpr $ h M' x;
330+
280331
end NCML.IML
281332

282333
end

0 commit comments

Comments
 (0)