cases h2
D : Type
I : Interpretation D
z : String
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (j : ℕ),
    ¬occursIn (free_ z) phi →
      Formula.lc_at j phi → (Holds D I V phi ↔ Holds D I (V ∘ Var.close j (free_ z)) (Formula.openList j [free_ z] phi))
psi_ih :
  ∀ (V : VarAssignment D) (j : ℕ),
    ¬occursIn (free_ z) psi →
      Formula.lc_at j psi → (Holds D I V psi ↔ Holds D I (V ∘ Var.close j (free_ z)) (Formula.openList j [free_ z] psi))
V : VarAssignment D
j : ℕ
h2 : Formula.lc_at j phi ∧ Formula.lc_at j psi
h1_left : ¬occursIn (free_ z) phi
h1_right : ¬occursIn (free_ z) psi
⊢ Holds D I V (phi.imp_ psi) ↔ Holds D I (V ∘ Var.close j (free_ z)) (Formula.openList j [free_ z] (phi.imp_ psi))
case intro
D : Type
I : Interpretation D
z : String
phi psi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (j : ℕ),
    ¬occursIn (free_ z) phi →
      Formula.lc_at j phi → (Holds D I V phi ↔ Holds D I (V ∘ Var.close j (free_ z)) (Formula.openList j [free_ z] phi))
psi_ih :
  ∀ (V : VarAssignment D) (j : ℕ),
    ¬occursIn (free_ z) psi →
      Formula.lc_at j psi → (Holds D I V psi ↔ Holds D I (V ∘ Var.close j (free_ z)) (Formula.openList j [free_ z] psi))
V : VarAssignment D
j : ℕ
h1_left : ¬occursIn (free_ z) phi
h1_right : ¬occursIn (free_ z) psi
left✝ : Formula.lc_at j phi
right✝ : Formula.lc_at j psi
⊢ Holds D I V (phi.imp_ psi) ↔ Holds D I (V ∘ Var.close j (free_ z)) (Formula.openList j [free_ z] (phi.imp_ psi))