cases ihf with
| inl hval =>
  cases hf with
  | fn =>
    apply Exists.intro (fn n)
    exact Step.appSucc
  | appSucc => cases hval
| inr hstep =>
  cases hstep with | intro f' hf' =>
  apply Exists.intro (app f' x)
  exact Step.appArg hf'
case appSucc.h
e : FnExp
τ : FnType
f x : FnExp
n : ℕ
hf : f ∶ function (Nat.succ n)
hx : x ∶ argument
ihf : Value f ∨ ∃ e', f ⇒ e'
ihx : Value x ∨ ∃ e', x ⇒ e'
⊢ ∃ e', app f x ⇒ e'
no goals