(motive : Lean.Expr → Sort u_1) →
  (e : Lean.Expr) →
    ((binderName : Lean.Name) →
        (binderType body : Lean.Expr) →
          (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.lam binderName binderType body binderInfo)) →
      ((fn arg : Lean.Expr) → motive (fn.app arg)) →
        ((varName : Lean.Name) →
            (varType val body : Lean.Expr) →
              (nondep : Bool) → motive (Lean.Expr.letE varName varType val body nondep)) →
          ((x : Lean.Expr) → motive x) → motive e