simp only [shift]
D : Type
V : VarAssignment D
j : ℕ
zs : List String
d : D
i : ℕ
⊢ shift D (V ∘ Var.openList j (List.map free_ zs)) d (bound_ (i + 1)) =
    shift D V d (Var.openList (j + 1) (List.map free_ zs) (bound_ (i + 1)))
D : Type
V : VarAssignment D
j : ℕ
zs : List String
d : D
i : ℕ
⊢ (V ∘ Var.openList j (List.map free_ zs)) (bound_ i) =
    match Var.openList (j + 1) (List.map free_ zs) (bound_ (i + 1)) with
    | free_ x => V (free_ x)
    | bound_ 0 => d
    | bound_ i.succ => V (bound_ i)