|
| 1 | +module |
| 2 | + |
| 3 | +public import Foundation.Propositional.Kripke3.Basic |
| 4 | +public import Foundation.Vorspiel.Rel.Connected |
| 5 | + |
| 6 | +@[expose] public section |
| 7 | + |
| 8 | +namespace LO.Propositional |
| 9 | + |
| 10 | +variable {κ α : Type*} [Nonempty κ] |
| 11 | + |
| 12 | +namespace KripkeModel |
| 13 | + |
| 14 | +variable {M : KripkeModel κ α} [M.Intuitionistic] {φ ψ χ : Formula α} |
| 15 | + |
| 16 | +lemma validates_axiomDummett [IsPiecewiseStronglyConnected M.rel] : M ⊧ (Axioms.Dummett φ ψ) := by |
| 17 | + have : PiecewiseStronglyConnected M.rel := IsPiecewiseStronglyConnected.ps_connected; |
| 18 | + contrapose! this; |
| 19 | + obtain ⟨x, h⟩ := exists_world_notForces_of_notValidates this; |
| 20 | + replace h := forces_or.not.mp h; |
| 21 | + push_neg at h; |
| 22 | + rcases h with ⟨h₁, h₂⟩; |
| 23 | + |
| 24 | + replace h₁ := forces_imp.not.mp h₁; |
| 25 | + push_neg at h₁; |
| 26 | + obtain ⟨y, Rxy, hyφ, hyψ⟩ := h₁; |
| 27 | + |
| 28 | + replace h₂ := forces_imp.not.mp h₂; |
| 29 | + push_neg at h₂; |
| 30 | + obtain ⟨z, Rxz, hzψ, hzφ⟩ := h₂; |
| 31 | + |
| 32 | + dsimp [PiecewiseStronglyConnected] |
| 33 | + push_neg; |
| 34 | + use x, y, z; |
| 35 | + refine ⟨Rxy, Rxz, ?_⟩; |
| 36 | + . set_option push_neg.use_distrib true in by_contra! hC; |
| 37 | + rcases hC with (Ryz | Rzy); |
| 38 | + . apply hzφ $ M.formula_persistency hyφ Ryz; |
| 39 | + . apply hyψ $ M.formula_persistency hzψ Rzy; |
| 40 | + |
| 41 | +variable [DecidableEq α] |
| 42 | +lemma isPiecewiseStronglyConvergent_of_validates_axiomDummett |
| 43 | + (a b : α) (hab : a ≠ b := by trivial) |
| 44 | + [Std.Refl K] |
| 45 | + (h : ∀ V, letI M : KripkeModel κ α := ⟨K, V⟩; M ⊧ (Axioms.Dummett #a #b)) |
| 46 | + : IsPiecewiseStronglyConvergent K := by |
| 47 | + constructor; |
| 48 | + rintro x y z Rxy Rxz; |
| 49 | + have := (h $ (λ {p v} => if p = a then K y v else if p = b then K z v else True)) x; |
| 50 | + rw [forces_or] at this; |
| 51 | + rcases this with (hi | hi); |
| 52 | + . simp only [forces_imp, forces_atom, ↓reduceIte, hab.symm] at hi; |
| 53 | + use y; |
| 54 | + constructor; |
| 55 | + . apply Std.Refl.refl; |
| 56 | + . apply hi; |
| 57 | + . assumption; |
| 58 | + . apply Std.Refl.refl; |
| 59 | + . use z; |
| 60 | + simp only [forces_imp, forces_atom, hab.symm, ↓reduceIte] at hi; |
| 61 | + constructor; |
| 62 | + . apply hi z Rxz; |
| 63 | + exact Std.Refl.refl z; |
| 64 | + . apply Std.Refl.refl; |
| 65 | + |
| 66 | +end KripkeModel |
| 67 | + |
| 68 | +end LO.Propositional |
| 69 | +end |
0 commit comments