Theorem: disconOr (Pdl/Discon.lean)

State before:
XS YS : List (List Formula)
⊢ discon (XS ∪ YS)≡discon XS⋁discon YS
Tactic:
unfold semEquiv
State after:
XS YS : List (List Formula)
⊢ ∀ (W : Type) (M : KripkeModel W) (w : W), evaluate M w (discon (XS ∪ YS)) ↔ evaluate M w (discon XS⋁discon YS)

State before:
XS YS : List (List Formula)
⊢ ∀ (W : Type) (M : KripkeModel W) (w : W), evaluate M w (discon (XS ∪ YS)) ↔ evaluate M w (discon XS⋁discon YS)
Tactic:
intro W M w
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ evaluate M w (discon (XS ∪ YS)) ↔ evaluate M w (discon XS⋁discon YS)

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ evaluate M w (discon (XS ∪ YS)) ↔ evaluate M w (discon XS⋁discon YS)
Tactic:
rw [disconEval (XS ∪ YS)]
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y ∈ XS ∪ YS, ∀ f ∈ Y, evaluate M w f) ↔ evaluate M w (discon XS⋁discon YS)

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y ∈ XS ∪ YS, ∀ f ∈ Y, evaluate M w f) ↔ evaluate M w (discon XS⋁discon YS)
Tactic:
simp
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) ↔ ¬evaluate M w (discon XS) → evaluate M w (discon YS)

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) ↔ ¬evaluate M w (discon XS) → evaluate M w (discon YS)
Tactic:
rw [disconEval XS]
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) ↔ (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → evaluate M w (discon YS)

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) ↔ (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → evaluate M w (discon YS)
Tactic:
rw [disconEval YS]
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) ↔
    (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) ↔
    (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
constructor
State after:
case mp
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) →
    (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

case mpr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ ((¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f) →
    ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
case mp
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ (∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f) →
    (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
intro lhs
State after:
case mp
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
lhs : ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
⊢ (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
case mp
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
lhs : ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
⊢ (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
rcases lhs with ⟨Z, Z_in, w_sat_Z⟩
State after:
case mp.intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in : Z ∈ XS ∨ Z ∈ YS
w_sat_Z : ∀ f ∈ Z, evaluate M w f
⊢ (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
case mp.intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in : Z ∈ XS ∨ Z ∈ YS
w_sat_Z : ∀ f ∈ Z, evaluate M w f
⊢ (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
intro notL
State after:
case mp.intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in : Z ∈ XS ∨ Z ∈ YS
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
case mp.intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in : Z ∈ XS ∨ Z ∈ YS
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
simp at notL
State after:
case mp.intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in : Z ∈ XS ∨ Z ∈ YS
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
case mp.intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in : Z ∈ XS ∨ Z ∈ YS
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
cases Z_in
State after:
case mp.intro.intro.inl
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
h✝ : Z ∈ XS
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

case mp.intro.intro.inr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
h✝ : Z ∈ YS
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
Z_in_XS : Z ∈ XS
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
case inl Z_in_XS =>
  specialize notL Z Z_in_XS
  rcases notL with ⟨f, f_in_Z, w_not_f⟩
  specialize w_sat_Z f f_in_Z
  absurd w_sat_Z
  exact w_not_f
State after:
no goals

State before:
case mp.intro.intro.inr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
h✝ : Z ∈ YS
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
use Z
State after:
no goals

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
notL : ∀ x ∈ XS, ∃ x_1 ∈ x, ¬evaluate M w x_1
Z_in_XS : Z ∈ XS
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
specialize notL Z Z_in_XS
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
Z_in_XS : Z ∈ XS
notL : ∃ x ∈ Z, ¬evaluate M w x
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
Z_in_XS : Z ∈ XS
notL : ∃ x ∈ Z, ¬evaluate M w x
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
rcases notL with ⟨f, f_in_Z, w_not_f⟩
State after:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
Z_in_XS : Z ∈ XS
f : Formula
f_in_Z : f ∈ Z
w_not_f : ¬evaluate M w f
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
w_sat_Z : ∀ f ∈ Z, evaluate M w f
Z_in_XS : Z ∈ XS
f : Formula
f_in_Z : f ∈ Z
w_not_f : ¬evaluate M w f
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
specialize w_sat_Z f f_in_Z
State after:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in_XS : Z ∈ XS
f : Formula
f_in_Z : f ∈ Z
w_not_f : ¬evaluate M w f
w_sat_Z : evaluate M w f
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f

State before:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in_XS : Z ∈ XS
f : Formula
f_in_Z : f ∈ Z
w_not_f : ¬evaluate M w f
w_sat_Z : evaluate M w f
⊢ ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
Tactic:
absurd w_sat_Z
State after:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in_XS : Z ∈ XS
f : Formula
f_in_Z : f ∈ Z
w_not_f : ¬evaluate M w f
w_sat_Z : evaluate M w f
⊢ ¬evaluate M w f

State before:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
Z : List Formula
Z_in_XS : Z ∈ XS
f : Formula
f_in_Z : f ∈ Z
w_not_f : ¬evaluate M w f
w_sat_Z : evaluate M w f
⊢ ¬evaluate M w f
Tactic:
exact w_not_f
State after:
no goals

State before:
case mpr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
⊢ ((¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f) →
    ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
intro rhs
State after:
case mpr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
case mpr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
cases (Classical.em (∃ Y, Y ∈ XS ∧ ∀ (f : Formula), f ∈ Y → evaluate M w f))
State after:
case mpr.inl
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
h✝ : ∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

case mpr.inr
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
h✝ : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
hyp : ∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
case inl hyp =>
  rcases hyp with ⟨X, X_in, satX⟩
  use X
  exact ⟨Or.inl X_in, satX⟩
State after:
no goals

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
case inr nothyp =>
  specialize rhs nothyp
  rcases rhs with ⟨Y, Y_in, satY⟩
  use Y
  exact ⟨Or.inr Y_in, satY⟩
State after:
no goals

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
hyp : ∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
rcases hyp with ⟨X, X_in, satX⟩
State after:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
X : List Formula
X_in : X ∈ XS
satX : ∀ f ∈ X, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
X : List Formula
X_in : X ∈ XS
satX : ∀ f ∈ X, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
use X
State after:
case h
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
X : List Formula
X_in : X ∈ XS
satX : ∀ f ∈ X, evaluate M w f
⊢ (X ∈ XS ∨ X ∈ YS) ∧ ∀ f ∈ X, evaluate M w f

State before:
case h
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
X : List Formula
X_in : X ∈ XS
satX : ∀ f ∈ X, evaluate M w f
⊢ (X ∈ XS ∨ X ∈ YS) ∧ ∀ f ∈ X, evaluate M w f
Tactic:
exact ⟨Or.inl X_in, satX⟩
State after:
no goals

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
rhs : (¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f) → ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
specialize rhs nothyp
State after:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
rhs : ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
rhs : ∃ Y ∈ YS, ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
rcases rhs with ⟨Y, Y_in, satY⟩
State after:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
Y : List Formula
Y_in : Y ∈ YS
satY : ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
case intro.intro
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
Y : List Formula
Y_in : Y ∈ YS
satY : ∀ f ∈ Y, evaluate M w f
⊢ ∃ Y, (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
use Y
State after:
case h
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
Y : List Formula
Y_in : Y ∈ YS
satY : ∀ f ∈ Y, evaluate M w f
⊢ (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f

State before:
case h
XS YS : List (List Formula)
W : Type
M : KripkeModel W
w : W
nothyp : ¬∃ Y ∈ XS, ∀ f ∈ Y, evaluate M w f
Y : List Formula
Y_in : Y ∈ YS
satY : ∀ f ∈ Y, evaluate M w f
⊢ (Y ∈ XS ∨ Y ∈ YS) ∧ ∀ f ∈ Y, evaluate M w f
Tactic:
exact ⟨Or.inr Y_in, satY⟩
State after:
no goals