Theorem: vocPreservedTwo (Bml/Vocabulary.lean)

State before:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
⊢ ψ ∈ X → voc {ϕ1, ϕ2} = voc ψ → voc X = voc (X \ {ψ} ∪ {ϕ1, ϕ2})
Tactic:
intro psi_in_X eq_voc
State after:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : voc {ϕ1, ϕ2} = voc ψ
⊢ voc X = voc (X \ {ψ} ∪ {ϕ1, ϕ2})

State before:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : voc {ϕ1, ϕ2} = voc ψ
⊢ voc X = voc (X \ {ψ} ∪ {ϕ1, ϕ2})
Tactic:
rw [vocUnion]
State after:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : voc {ϕ1, ϕ2} = voc ψ
⊢ voc X = voc (X \ {ψ}) ∪ voc {ϕ1, ϕ2}

State before:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : voc {ϕ1, ϕ2} = voc ψ
⊢ voc X = voc (X \ {ψ}) ∪ voc {ϕ1, ϕ2}
Tactic:
simp at *
State after:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
⊢ X.biUnion vocabOfFormula = (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)

State before:
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
⊢ X.biUnion vocabOfFormula = (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)
Tactic:
ext1
State after:
case a
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ X.biUnion vocabOfFormula ↔ a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)

State before:
case a
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ X.biUnion vocabOfFormula ↔ a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)
Tactic:
constructor
State after:
case a.mp
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ X.biUnion vocabOfFormula → a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)

case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2) → a✝ ∈ X.biUnion vocabOfFormula

State before:
case a.mp
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ X.biUnion vocabOfFormula → a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)

case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2) → a✝ ∈ X.biUnion vocabOfFormula
Tactic:
all_goals intro a_in; norm_num at *
State after:
case a.mp
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : ∃ a ∈ X, a✝ ∈ vocabOfFormula a
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a

State before:
case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a
Tactic:
cases a_in
State after:
case a.mpr.inl
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : ∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a

case a.mpr.inr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a

State before:
case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
⊢ a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2) → a✝ ∈ X.biUnion vocabOfFormula
Tactic:
intro a_in
State after:
case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)
⊢ a✝ ∈ X.biUnion vocabOfFormula

State before:
case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : a✝ ∈ (X.erase ψ).biUnion vocabOfFormula ∪ (vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2)
⊢ a✝ ∈ X.biUnion vocabOfFormula
Tactic:
norm_num at *
State after:
case a.mpr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a

State before:
case a.mp
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
a_in : ∃ a ∈ X, a✝ ∈ vocabOfFormula a
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
rcases a_in with ⟨θ, theta_in_X, a_in_vocTheta⟩
State after:
case a.mp.intro.intro
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

State before:
case a.mp.intro.intro
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
by_cases h : θ = ψ
State after:
case pos
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : θ = ψ
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

case neg
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : ¬θ = ψ
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

State before:
case pos
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : θ = ψ
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
right
State after:
case pos.h
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : θ = ψ
⊢ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

State before:
case pos.h
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : θ = ψ
⊢ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
subst h
State after:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
psi_in_X : θ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula θ
⊢ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

State before:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
psi_in_X : θ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula θ
⊢ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
unfold vocabOfSetFormula vocabOfFormula at *
State after:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X psi_in_X : θ ∈ X
eq_voc :
  ((match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) =
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
a_in_vocTheta :
  a✝ ∈
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
⊢ (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ

State before:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X psi_in_X : θ ∈ X
eq_voc :
  ((match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) =
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
a_in_vocTheta :
  a✝ ∈
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
⊢ (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
Tactic:
rw [← eq_voc] at a_in_vocTheta
State after:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X psi_in_X : θ ∈ X
eq_voc :
  ((match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) =
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
a_in_vocTheta :
  a✝ ∈
    (match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
⊢ (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ

State before:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X psi_in_X : θ ∈ X
eq_voc :
  ((match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) =
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
a_in_vocTheta :
  a✝ ∈
    (match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
⊢ (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
Tactic:
simp at a_in_vocTheta
State after:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X psi_in_X : θ ∈ X
eq_voc :
  ((match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) =
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
a_in_vocTheta :
  (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
⊢ (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ

State before:
case pos.h
X : Finset Formula
ϕ1 ϕ2 : Formula
a✝ : Char
θ : Formula
theta_in_X psi_in_X : θ ∈ X
eq_voc :
  ((match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∪
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) =
    match θ with
    | Formula.bottom => ∅
    | ·c => {c}
    | ~φ => vocabOfFormula φ
    | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
    | □φ => vocabOfFormula φ
a_in_vocTheta :
  (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
⊢ (a✝ ∈
      match ϕ1 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ) ∨
    a✝ ∈
      match ϕ2 with
      | Formula.bottom => ∅
      | ·c => {c}
      | ~φ => vocabOfFormula φ
      | φ⋀ψ => vocabOfFormula φ ∪ vocabOfFormula ψ
      | □φ => vocabOfFormula φ
Tactic:
tauto
State after:
no goals

State before:
case neg
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : ¬θ = ψ
⊢ (∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a) ∨ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
constructor
State after:
case neg.h
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : ¬θ = ψ
⊢ ∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a

State before:
case neg.h
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
θ : Formula
theta_in_X : θ ∈ X
a_in_vocTheta : a✝ ∈ vocabOfFormula θ
h : ¬θ = ψ
⊢ ∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a
Tactic:
use θ
State after:
no goals

State before:
case a.mpr.inl
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : ∃ a, (¬a = ψ ∧ a ∈ X) ∧ a✝ ∈ vocabOfFormula a
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a
Tactic:
aesop
State after:
no goals

State before:
case a.mpr.inr
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ∃ a ∈ X, a✝ ∈ vocabOfFormula a
Tactic:
use ψ
State after:
case h
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ψ ∈ X ∧ a✝ ∈ vocabOfFormula ψ

State before:
case h
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ψ ∈ X ∧ a✝ ∈ vocabOfFormula ψ
Tactic:
constructor
State after:
case h.left
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ψ ∈ X

case h.right
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ a✝ ∈ vocabOfFormula ψ

State before:
case h.left
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ ψ ∈ X
Tactic:
aesop
State after:
no goals

State before:
case h.right
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ a✝ ∈ vocabOfFormula ψ
Tactic:
rw [← eq_voc]
State after:
case h.right
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ a✝ ∈ vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2

State before:
case h.right
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ a✝ ∈ vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2
Tactic:
simp
State after:
case h.right
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2

State before:
case h.right
X : Finset Formula
ψ ϕ1 ϕ2 : Formula
psi_in_X : ψ ∈ X
eq_voc : vocabOfFormula ϕ1 ∪ vocabOfFormula ϕ2 = vocabOfFormula ψ
a✝ : Char
h✝ : a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
⊢ a✝ ∈ vocabOfFormula ϕ1 ∨ a✝ ∈ vocabOfFormula ϕ2
Tactic:
aesop
State after:
no goals