apply forall_congr'
D : Type
I : Interpretation D
zs : List String
a✝ : String
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (j : ℕ),
    Holds D I (V ∘ Var.openList j (List.map free_ zs)) phi ↔ Holds D I V (Formula.openList j (List.map free_ zs) phi)
V : VarAssignment D
j : ℕ
⊢ (∀ (d : D), Holds D I (shift D (V ∘ Var.openList j (List.map free_ zs)) d) phi) ↔
    ∀ (d : D), Holds D I (shift D V d) (Formula.openList (j + 1) (List.map free_ zs) phi)
case h
D : Type
I : Interpretation D
zs : List String
a✝ : String
phi : Formula
phi_ih :
  ∀ (V : VarAssignment D) (j : ℕ),
    Holds D I (V ∘ Var.openList j (List.map free_ zs)) phi ↔ Holds D I V (Formula.openList j (List.map free_ zs) phi)
V : VarAssignment D
j : ℕ
⊢ ∀ (a : D),
    Holds D I (shift D (V ∘ Var.openList j (List.map free_ zs)) a) phi ↔
      Holds D I (shift D V a) (Formula.openList (j + 1) (List.map free_ zs) phi)