Theorem: truthLemma (Bml/Modelgraphs.lean)

State before:
Worlds : Set (Finset Formula)
MG : ModelGraph Worlds
⊢ ∀ (X : ↑Worlds), ∀ P ∈ ↑X, Evaluate (↑MG, X) P
Tactic:
intro X P
State after:
Worlds : Set (Finset Formula)
MG : ModelGraph Worlds
X : ↑Worlds
P : Formula
⊢ P ∈ ↑X → Evaluate (↑MG, X) P

State before:
Worlds : Set (Finset Formula)
MG : ModelGraph Worlds
X : ↑Worlds
P : Formula
⊢ P ∈ ↑X → Evaluate (↑MG, X) P
Tactic:
cases' MG with M M_prop
State after:
case mk
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
M_prop :
  (∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X) ∧
    (fun M => ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp) M ∧
      (fun M => ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y) M ∧
        (fun M => ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y) M
⊢ P ∈ ↑X → Evaluate (↑⟨M, M_prop⟩, X) P

State before:
case mk
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
M_prop :
  (∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X) ∧
    (fun M => ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp) M ∧
      (fun M => ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y) M ∧
        (fun M => ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y) M
⊢ P ∈ ↑X → Evaluate (↑⟨M, M_prop⟩, X) P
Tactic:
rcases M_prop with ⟨i, ii, iii, iv⟩
State after:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P

State before:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P
Tactic:
let plus P (X : Worlds) := P ∈ X.val → Evaluate (M, X) P
State after:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P

State before:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P
Tactic:
let minus P (X : Worlds) := ~P ∈ X.val → ¬Evaluate (M, X) P
State after:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P

State before:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P
Tactic:
let oh P (X : Worlds) := □P ∈ X.val → ∀ Y, M.Rel X Y → P ∈ Y.val
State after:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P

State before:
case mk.intro.intro.intro
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
claim : ∀ (P : Formula) (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
⊢ P ∈ ↑X → Evaluate (↑⟨M, ⋯⟩, X) P
Tactic:
apply (claim P X).left
State after:
no goals

State before:
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
⊢ ∀ (P : Formula) (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
Tactic:
intro P
State after:
Worlds : Set (Finset Formula)
X : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
⊢ ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X

State before:
Worlds : Set (Finset Formula)
X : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
⊢ ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
Tactic:
induction P
State after:
case bottom
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
⊢ ∀ (X : ↑Worlds), plus bottom X ∧ minus bottom X ∧ oh bottom X

case atom_prop
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Char
⊢ ∀ (X : ↑Worlds), plus (·a✝) X ∧ minus (·a✝) X ∧ oh (·a✝) X

case neg
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (~a✝) X ∧ minus (~a✝) X ∧ oh (~a✝) X

case And
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝¹ a✝ : Formula
a_ih✝¹ : ∀ (X : ↑Worlds), plus a✝¹ X ∧ minus a✝¹ X ∧ oh a✝¹ X
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (a✝¹⋀a✝) X ∧ minus (a✝¹⋀a✝) X ∧ oh (a✝¹⋀a✝) X

case box
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (□a✝) X ∧ minus (□a✝) X ∧ oh (□a✝) X

State before:
case bottom
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
⊢ ∀ (X : ↑Worlds), plus bottom X ∧ minus bottom X ∧ oh bottom X

case atom_prop
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Char
⊢ ∀ (X : ↑Worlds), plus (·a✝) X ∧ minus (·a✝) X ∧ oh (·a✝) X

case neg
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (~a✝) X ∧ minus (~a✝) X ∧ oh (~a✝) X

case And
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝¹ a✝ : Formula
a_ih✝¹ : ∀ (X : ↑Worlds), plus a✝¹ X ∧ minus a✝¹ X ∧ oh a✝¹ X
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (a✝¹⋀a✝) X ∧ minus (a✝¹⋀a✝) X ∧ oh (a✝¹⋀a✝) X

case box
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (□a✝) X ∧ minus (□a✝) X ∧ oh (□a✝) X
Tactic:
all_goals intro X
State after:
case bottom
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
⊢ plus bottom X ∧ minus bottom X ∧ oh bottom X

case atom_prop
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Char
X : ↑Worlds
⊢ plus (·a✝) X ∧ minus (·a✝) X ∧ oh (·a✝) X

case neg
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
X : ↑Worlds
⊢ plus (~a✝) X ∧ minus (~a✝) X ∧ oh (~a✝) X

case And
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝¹ a✝ : Formula
a_ih✝¹ : ∀ (X : ↑Worlds), plus a✝¹ X ∧ minus a✝¹ X ∧ oh a✝¹ X
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
X : ↑Worlds
⊢ plus (a✝¹⋀a✝) X ∧ minus (a✝¹⋀a✝) X ∧ oh (a✝¹⋀a✝) X

case box
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
X : ↑Worlds
⊢ plus (□a✝) X ∧ minus (□a✝) X ∧ oh (□a✝) X

State before:
case box
Worlds : Set (Finset Formula)
X : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
⊢ ∀ (X : ↑Worlds), plus (□a✝) X ∧ minus (□a✝) X ∧ oh (□a✝) X
Tactic:
intro X
State after:
case box
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
a✝ : Formula
a_ih✝ : ∀ (X : ↑Worlds), plus a✝ X ∧ minus a✝ X ∧ oh a✝ X
X : ↑Worlds
⊢ plus (□a✝) X ∧ minus (□a✝) X ∧ oh (□a✝) X

State before:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
⊢ plus bottom X ∧ minus bottom X ∧ oh bottom X
Tactic:
specialize i X
State after:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
i : Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus bottom X ∧ minus bottom X ∧ oh bottom X

State before:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
i : Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus bottom X ∧ minus bottom X ∧ oh bottom X
Tactic:
rcases i with ⟨_, bot_not_in_X, _⟩
State after:
case intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus bottom X ∧ minus bottom X ∧ oh bottom X

State before:
case intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus bottom X ∧ minus bottom X ∧ oh bottom X
Tactic:
repeat' constructor
State after:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus bottom X

case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ minus bottom X

case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ oh bottom X

State before:
case intro.intro.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ minus bottom X ∧ oh bottom X
Tactic:
constructor
State after:
case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ minus bottom X

case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ oh bottom X

State before:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus bottom X
Tactic:
intro P_in_X
State after:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
P_in_X : bottom ∈ ↑X
⊢ Evaluate (M, X) bottom

State before:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
P_in_X : bottom ∈ ↑X
⊢ Evaluate (M, X) bottom
Tactic:
apply absurd P_in_X bot_not_in_X
State after:
no goals

State before:
case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ minus bottom X
Tactic:
tauto
State after:
no goals

State before:
case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ oh bottom X
Tactic:
intro boxBot_in_X Y X_rel_Y
State after:
case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
boxBot_in_X : □bottom ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ bottom ∈ ↑Y

State before:
case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
X : ↑Worlds
left✝ : Saturated ↑X
bot_not_in_X : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
boxBot_in_X : □bottom ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ bottom ∈ ↑Y
Tactic:
exact iii X Y ⊥ X_rel_Y boxBot_in_X
State after:
no goals

State before:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ plus (·pp) X ∧ minus (·pp) X ∧ oh (·pp) X
Tactic:
repeat' constructor
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ plus (·pp) X

case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ minus (·pp) X

case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ oh (·pp) X

State before:
case right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ minus (·pp) X ∧ oh (·pp) X
Tactic:
constructor
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ minus (·pp) X

case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ oh (·pp) X

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ plus (·pp) X
Tactic:
intro P_in_X
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
P_in_X : (·pp) ∈ ↑X
⊢ Evaluate (M, X) (·pp)

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
P_in_X : (·pp) ∈ ↑X
⊢ Evaluate (M, X) (·pp)
Tactic:
unfold Evaluate
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
P_in_X : (·pp) ∈ ↑X
⊢ M.val X pp

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
P_in_X : (·pp) ∈ ↑X
⊢ M.val X pp
Tactic:
rw [ii X pp] at P_in_X
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
P_in_X : M.val X pp
⊢ M.val X pp

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
P_in_X : M.val X pp
⊢ M.val X pp
Tactic:
exact P_in_X
State after:
no goals

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ minus (·pp) X
Tactic:
intro notP_in_X
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
⊢ ¬Evaluate (M, X) (·pp)

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
⊢ ¬Evaluate (M, X) (·pp)
Tactic:
unfold Evaluate
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
⊢ ¬M.val X pp

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
⊢ ¬M.val X pp
Tactic:
rw [← ii X pp]
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
⊢ (·pp) ∉ ↑X

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
⊢ (·pp) ∉ ↑X
Tactic:
rcases i X with ⟨_, _, P_in_then_notP_not_in⟩
State after:
case right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
left✝¹ : Saturated ↑X
left✝ : ⊥ ∉ ↑X
P_in_then_notP_not_in : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ (·pp) ∉ ↑X

State before:
case right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
left✝¹ : Saturated ↑X
left✝ : ⊥ ∉ ↑X
P_in_then_notP_not_in : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ (·pp) ∉ ↑X
Tactic:
specialize P_in_then_notP_not_in pp
State after:
case right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
left✝¹ : Saturated ↑X
left✝ : ⊥ ∉ ↑X
P_in_then_notP_not_in : (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ (·pp) ∉ ↑X

State before:
case right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
notP_in_X : (~·pp) ∈ ↑X
left✝¹ : Saturated ↑X
left✝ : ⊥ ∉ ↑X
P_in_then_notP_not_in : (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ (·pp) ∉ ↑X
Tactic:
tauto
State after:
no goals

State before:
case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
⊢ oh (·pp) X
Tactic:
intro boxPp_in_X Y X_rel_Y
State after:
case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
pp : Char
X : ↑Worlds
boxPp_in_X : (□·pp) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ (·pp) ∈ ↑Y

State before:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ plus (~P) X ∧ minus (~P) X ∧ oh (~P) X
Tactic:
rcases IH X with ⟨plus_IH, minus_IH, _⟩
State after:
case intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ plus (~P) X ∧ minus (~P) X ∧ oh (~P) X

State before:
case intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ plus (~P) X ∧ minus (~P) X ∧ oh (~P) X
Tactic:
repeat' constructor
State after:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ plus (~P) X

case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ minus (~P) X

case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ oh (~P) X

State before:
case intro.intro.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ minus (~P) X ∧ oh (~P) X
Tactic:
constructor
State after:
case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ minus (~P) X

case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ oh (~P) X

State before:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ plus (~P) X
Tactic:
intro notP_in_X
State after:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notP_in_X : ~P ∈ ↑X
⊢ Evaluate (M, X) (~P)

State before:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notP_in_X : ~P ∈ ↑X
⊢ Evaluate (M, X) (~P)
Tactic:
unfold Evaluate
State after:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notP_in_X : ~P ∈ ↑X
⊢ ¬Evaluate (M, X) P

State before:
case intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notP_in_X : ~P ∈ ↑X
⊢ ¬Evaluate (M, X) P
Tactic:
exact minus_IH notP_in_X
State after:
no goals

State before:
case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ minus (~P) X
Tactic:
intro notnotP_in_X
State after:
case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notnotP_in_X : ~~P ∈ ↑X
⊢ ¬Evaluate (M, X) (~P)

State before:
case intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notnotP_in_X : ~~P ∈ ↑X
⊢ ¬Evaluate (M, X) (~P)
Tactic:
rcases i X with ⟨X_saturated, _, _⟩
State after:
case intro.intro.right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝¹ : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ ¬Evaluate (M, X) (~P)

State before:
case intro.intro.right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝¹ : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ ¬Evaluate (M, X) (~P)
Tactic:
cases' X_saturated P ⊥ with doubleNeg
State after:
case intro.intro.right.left.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝² : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝¹ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
doubleNeg : ~~P ∈ ↑X → P ∈ ↑X
right✝ : (P⋀⊥ ∈ ↑X → P ∈ ↑X ∧ ⊥ ∈ ↑X) ∧ (~(P⋀⊥) ∈ ↑X → ~P ∈ ↑X ∨ ~⊥ ∈ ↑X)
⊢ ¬Evaluate (M, X) (~P)

State before:
case intro.intro.right.left.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝² : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝¹ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
doubleNeg : ~~P ∈ ↑X → P ∈ ↑X
right✝ : (P⋀⊥ ∈ ↑X → P ∈ ↑X ∧ ⊥ ∈ ↑X) ∧ (~(P⋀⊥) ∈ ↑X → ~P ∈ ↑X ∨ ~⊥ ∈ ↑X)
⊢ ¬Evaluate (M, X) (~P)
Tactic:
unfold Evaluate
State after:
case intro.intro.right.left.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝² : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝¹ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
doubleNeg : ~~P ∈ ↑X → P ∈ ↑X
right✝ : (P⋀⊥ ∈ ↑X → P ∈ ↑X ∧ ⊥ ∈ ↑X) ∧ (~(P⋀⊥) ∈ ↑X → ~P ∈ ↑X ∨ ~⊥ ∈ ↑X)
⊢ ¬¬Evaluate (M, X) P

State before:
case intro.intro.right.left.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝² : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝¹ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
doubleNeg : ~~P ∈ ↑X → P ∈ ↑X
right✝ : (P⋀⊥ ∈ ↑X → P ∈ ↑X ∧ ⊥ ∈ ↑X) ∧ (~(P⋀⊥) ∈ ↑X → ~P ∈ ↑X ∨ ~⊥ ∈ ↑X)
⊢ ¬¬Evaluate (M, X) P
Tactic:
simp
State after:
case intro.intro.right.left.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝² : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝¹ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
doubleNeg : ~~P ∈ ↑X → P ∈ ↑X
right✝ : (P⋀⊥ ∈ ↑X → P ∈ ↑X ∧ ⊥ ∈ ↑X) ∧ (~(P⋀⊥) ∈ ↑X → ~P ∈ ↑X ∨ ~⊥ ∈ ↑X)
⊢ Evaluate (M, X) P

State before:
case intro.intro.right.left.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝² : oh P X
notnotP_in_X : ~~P ∈ ↑X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝¹ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
doubleNeg : ~~P ∈ ↑X → P ∈ ↑X
right✝ : (P⋀⊥ ∈ ↑X → P ∈ ↑X ∧ ⊥ ∈ ↑X) ∧ (~(P⋀⊥) ∈ ↑X → ~P ∈ ↑X ∨ ~⊥ ∈ ↑X)
⊢ Evaluate (M, X) P
Tactic:
exact plus_IH (doubleNeg notnotP_in_X)
State after:
no goals

State before:
case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
⊢ oh (~P) X
Tactic:
intro notPp_in_X Y X_rel_Y
State after:
case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notPp_in_X : □~P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ ~P ∈ ↑Y

State before:
case intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
plus_IH : plus P X
minus_IH : minus P X
right✝ : oh P X
notPp_in_X : □~P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ ~P ∈ ↑Y
Tactic:
exact iii X Y (~P) X_rel_Y notPp_in_X
State after:
no goals

State before:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
rcases IH_P X with ⟨plus_IH_P, minus_IH_P, _⟩
State after:
case intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝ : oh P X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X

State before:
case intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝ : oh P X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
rcases IH_Q X with ⟨plus_IH_Q, minus_IH_Q, _⟩
State after:
case intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝¹ : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝ : oh Q X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X

State before:
case intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝¹ : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝ : oh Q X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
rcases i X with ⟨X_saturated, _, _⟩
State after:
case intro.intro.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X

State before:
case intro.intro.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated : Saturated ↑X
left✝ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
unfold Saturated at X_saturated
State after:
case intro.intro.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X

State before:
case intro.intro.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
rcases X_saturated P Q with ⟨_, andSplit, notAndSplit⟩
State after:
case intro.intro.intro.intro.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X

State before:
case intro.intro.intro.intro.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ plus (P⋀Q) X ∧ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
repeat' constructor
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ plus (P⋀Q) X

case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ minus (P⋀Q) X

case intro.intro.intro.intro.intro.intro.intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ oh (P⋀Q) X

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ minus (P⋀Q) X ∧ oh (P⋀Q) X
Tactic:
constructor
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ minus (P⋀Q) X

case intro.intro.intro.intro.intro.intro.intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ oh (P⋀Q) X

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ plus (P⋀Q) X
Tactic:
intro PandQ_in_X
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
⊢ Evaluate (M, X) (P⋀Q)

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
⊢ Evaluate (M, X) (P⋀Q)
Tactic:
specialize andSplit PandQ_in_X
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
andSplit : P ∈ ↑X ∧ Q ∈ ↑X
⊢ Evaluate (M, X) (P⋀Q)

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
andSplit : P ∈ ↑X ∧ Q ∈ ↑X
⊢ Evaluate (M, X) (P⋀Q)
Tactic:
cases' andSplit with P_in_X Q_in_X
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) (P⋀Q)

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) (P⋀Q)
Tactic:
unfold Evaluate
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) P ∧ Evaluate (M, X) Q

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) P ∧ Evaluate (M, X) Q
Tactic:
constructor
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) P

case intro.intro.intro.intro.intro.intro.intro.intro.left.intro.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) Q

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) P
Tactic:
exact plus_IH_P P_in_X
State after:
no goals

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.left.intro.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : P⋀Q ∈ ↑X
P_in_X : P ∈ ↑X
Q_in_X : Q ∈ ↑X
⊢ Evaluate (M, X) Q
Tactic:
exact plus_IH_Q Q_in_X
State after:
no goals

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ minus (P⋀Q) X
Tactic:
intro notPandQ_in_X
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
⊢ ¬Evaluate (M, X) (P⋀Q)

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
⊢ ¬Evaluate (M, X) (P⋀Q)
Tactic:
unfold Evaluate
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
⊢ ¬(Evaluate (M, X) P ∧ Evaluate (M, X) Q)

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
⊢ ¬(Evaluate (M, X) P ∧ Evaluate (M, X) Q)
Tactic:
rw [not_and_or]
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q
Tactic:
specialize notAndSplit notPandQ_in_X
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notAndSplit : ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notAndSplit : ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q
Tactic:
cases' notAndSplit with notP_in_X notQ_in_X
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inl
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notP_in_X : ~P ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q

case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inr
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notQ_in_X : ~Q ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inl
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notP_in_X : ~P ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q
Tactic:
left
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inl.h
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notP_in_X : ~P ∈ ↑X
⊢ ¬Evaluate (M, X) P

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inl.h
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notP_in_X : ~P ∈ ↑X
⊢ ¬Evaluate (M, X) P
Tactic:
exact minus_IH_P notP_in_X
State after:
no goals

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inr
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notQ_in_X : ~Q ∈ ↑X
⊢ ¬Evaluate (M, X) P ∨ ¬Evaluate (M, X) Q
Tactic:
right
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inr.h
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notQ_in_X : ~Q ∈ ↑X
⊢ ¬Evaluate (M, X) Q

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.left.inr.h
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notPandQ_in_X : ~(P⋀Q) ∈ ↑X
notQ_in_X : ~Q ∈ ↑X
⊢ ¬Evaluate (M, X) Q
Tactic:
exact minus_IH_Q notQ_in_X
State after:
no goals

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
⊢ oh (P⋀Q) X
Tactic:
intro PandQ_in_X Y X_rel_Y
State after:
case intro.intro.intro.intro.intro.intro.intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : □(P⋀Q) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ P⋀Q ∈ ↑Y

State before:
case intro.intro.intro.intro.intro.intro.intro.intro.right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P Q : Formula
IH_P : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
IH_Q : ∀ (X : ↑Worlds), plus Q X ∧ minus Q X ∧ oh Q X
X : ↑Worlds
plus_IH_P : plus P X
minus_IH_P : minus P X
right✝² : oh P X
plus_IH_Q : plus Q X
minus_IH_Q : minus Q X
right✝¹ : oh Q X
X_saturated :
  let X := ↑X;
  ∀ (P Q : Formula), (~~P ∈ X → P ∈ X) ∧ (P⋀Q ∈ X → P ∈ X ∧ Q ∈ X) ∧ (~(P⋀Q) ∈ X → ~P ∈ X ∨ ~Q ∈ X)
left✝¹ : ⊥ ∉ ↑X
right✝ : ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
left✝ : ~~P ∈ ↑X → P ∈ ↑X
andSplit : P⋀Q ∈ ↑X → P ∈ ↑X ∧ Q ∈ ↑X
notAndSplit : ~(P⋀Q) ∈ ↑X → ~P ∈ ↑X ∨ ~Q ∈ ↑X
PandQ_in_X : □(P⋀Q) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ P⋀Q ∈ ↑Y
Tactic:
exact iii X Y (P⋀Q) X_rel_Y PandQ_in_X
State after:
no goals

State before:
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ plus (□P) X ∧ minus (□P) X ∧ oh (□P) X
Tactic:
repeat' constructor
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ plus (□P) X

case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ minus (□P) X

case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ oh (□P) X

State before:
case right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ minus (□P) X ∧ oh (□P) X
Tactic:
constructor
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ minus (□P) X

case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ oh (□P) X

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ plus (□P) X
Tactic:
intro boxP_in_X
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
⊢ Evaluate (M, X) (□P)

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
⊢ Evaluate (M, X) (□P)
Tactic:
unfold Evaluate
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
⊢ ∀ (v : { x // x ∈ Worlds }), M.Rel X v → Evaluate (M, v) P

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
⊢ ∀ (v : { x // x ∈ Worlds }), M.Rel X v → Evaluate (M, v) P
Tactic:
intro Y X_rel_Y
State after:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ Evaluate (M, Y) P

State before:
case left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ Evaluate (M, Y) P
Tactic:
rcases IH Y with ⟨plus_IH_Y, _, _⟩
State after:
case left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
plus_IH_Y : plus P Y
left✝ : minus P Y
right✝ : oh P Y
⊢ Evaluate (M, Y) P

State before:
case left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
plus_IH_Y : plus P Y
left✝ : minus P Y
right✝ : oh P Y
⊢ Evaluate (M, Y) P
Tactic:
apply plus_IH_Y
State after:
case left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
plus_IH_Y : plus P Y
left✝ : minus P Y
right✝ : oh P Y
⊢ P ∈ ↑Y

State before:
case left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
plus_IH_Y : plus P Y
left✝ : minus P Y
right✝ : oh P Y
⊢ P ∈ ↑Y
Tactic:
rcases IH X with ⟨_, _, oh_IH_X⟩
State after:
case left.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
plus_IH_Y : plus P Y
left✝² : minus P Y
right✝ : oh P Y
left✝¹ : plus P X
left✝ : minus P X
oh_IH_X : oh P X
⊢ P ∈ ↑Y

State before:
case left.intro.intro.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxP_in_X : □P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
plus_IH_Y : plus P Y
left✝² : minus P Y
right✝ : oh P Y
left✝¹ : plus P X
left✝ : minus P X
oh_IH_X : oh P X
⊢ P ∈ ↑Y
Tactic:
exact oh_IH_X boxP_in_X Y X_rel_Y
State after:
no goals

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ minus (□P) X
Tactic:
intro notBoxP_in_X
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
⊢ ¬Evaluate (M, X) (□P)

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
⊢ ¬Evaluate (M, X) (□P)
Tactic:
unfold Evaluate
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
⊢ ¬∀ (v : { x // x ∈ Worlds }), M.Rel X v → Evaluate (M, v) P

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
⊢ ¬∀ (v : { x // x ∈ Worlds }), M.Rel X v → Evaluate (M, v) P
Tactic:
push_neg
State after:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
⊢ ∃ v, M.Rel X v ∧ ¬Evaluate (M, v) P

State before:
case right.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
⊢ ∃ v, M.Rel X v ∧ ¬Evaluate (M, v) P
Tactic:
rcases iv X P notBoxP_in_X with ⟨Y, X_rel_Y, notP_in_Y⟩
State after:
case right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ ∃ v, M.Rel X v ∧ ¬Evaluate (M, v) P

State before:
case right.left.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ ∃ v, M.Rel X v ∧ ¬Evaluate (M, v) P
Tactic:
use Y
State after:
case h
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ M.Rel X Y ∧ ¬Evaluate (M, Y) P

State before:
case h
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ M.Rel X Y ∧ ¬Evaluate (M, Y) P
Tactic:
constructor
State after:
case h.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ M.Rel X Y

case h.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ ¬Evaluate (M, Y) P

State before:
case h.left
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ M.Rel X Y

case h.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ ¬Evaluate (M, Y) P
Tactic:
exact X_rel_Y
State after:
case h.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ ¬Evaluate (M, Y) P

State before:
case h.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
⊢ ¬Evaluate (M, Y) P
Tactic:
rcases IH Y with ⟨_, minus_IH_Y, _⟩
State after:
case h.right.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
left✝ : plus P Y
minus_IH_Y : minus P Y
right✝ : oh P Y
⊢ ¬Evaluate (M, Y) P

State before:
case h.right.intro.intro
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
notBoxP_in_X : ~(□P) ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
notP_in_Y : ~P ∈ ↑Y
left✝ : plus P Y
minus_IH_Y : minus P Y
right✝ : oh P Y
⊢ ¬Evaluate (M, Y) P
Tactic:
exact minus_IH_Y notP_in_Y
State after:
no goals

State before:
case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
⊢ oh (□P) X
Tactic:
intro boxBoxP_in_X Y X_rel_Y
State after:
case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxBoxP_in_X : □□P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ □P ∈ ↑Y

State before:
case right.right
Worlds : Set (Finset Formula)
X✝ : ↑Worlds
P✝ : Formula
M : KripkeModel { x // x ∈ Worlds }
i : ∀ (X : { x // x ∈ Worlds }), Saturated ↑X ∧ ⊥ ∉ ↑X ∧ ∀ (pp : Char), (·pp) ∈ ↑X → (~·pp) ∉ ↑X
ii : ∀ (X : { x // x ∈ Worlds }) (pp : Char), (·pp) ∈ ↑X ↔ M.val X pp
iii : ∀ (X Y : { x // x ∈ Worlds }) (P : Formula), M.Rel X Y → □P ∈ ↑X → P ∈ ↑Y
iv : ∀ (X : { x // x ∈ Worlds }) (P : Formula), ~(□P) ∈ ↑X → ∃ Y, M.Rel X Y ∧ ~P ∈ ↑Y
plus : Formula → ↑Worlds → Prop := fun P X => P ∈ ↑X → Evaluate (M, X) P
minus : Formula → ↑Worlds → Prop := fun P X => ~P ∈ ↑X → ¬Evaluate (M, X) P
oh : Formula → ↑Worlds → Prop := fun P X => □P ∈ ↑X → ∀ (Y : { x // x ∈ Worlds }), M.Rel X Y → P ∈ ↑Y
P : Formula
IH : ∀ (X : ↑Worlds), plus P X ∧ minus P X ∧ oh P X
X : ↑Worlds
boxBoxP_in_X : □□P ∈ ↑X
Y : { x // x ∈ Worlds }
X_rel_Y : M.Rel X Y
⊢ □P ∈ ↑Y
Tactic:
exact iii X Y (□P) X_rel_Y boxBoxP_in_X
State after:
no goals