(motive : Lean.Expr → Sort u_1) →
  (x : Lean.Expr) →
    ((f arg : Lean.Expr) → motive (f.app arg)) →
      ((binderName : Lean.Name) →
          (binderType body : Lean.Expr) →
            (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.lam binderName binderType body binderInfo)) →
        ((binderName : Lean.Name) →
            (binderType body : Lean.Expr) →
              (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.forallE binderName binderType body binderInfo)) →
          ((x : Lean.Expr) → motive x) → motive x