cases i
D : Type
V : VarAssignment D
j : ℕ
z : String
d : D
i : ℕ
⊢ shift D V d (Var.close (j + 1) (free_ z) (bound_ i)) = shift D (V ∘ Var.close j (free_ z)) d (bound_ i)
case zero
D : Type
V : VarAssignment D
j : ℕ
z : String
d : D
⊢ shift D V d (Var.close (j + 1) (free_ z) (bound_ 0)) = shift D (V ∘ Var.close j (free_ z)) d (bound_ 0)

case succ
D : Type
V : VarAssignment D
j : ℕ
z : String
d : D
n✝ : ℕ
⊢ shift D V d (Var.close (j + 1) (free_ z) (bound_ (n✝ + 1))) = shift D (V ∘ Var.close j (free_ z)) d (bound_ (n✝ + 1))