(motive : Lean.Expr → Sort u_1) →
  (e : Lean.Expr) →
    ((binderName : Lean.Name) →
        (d b : Lean.Expr) → (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.forallE binderName d b binderInfo)) →
      ((binderName : Lean.Name) →
          (d b : Lean.Expr) → (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.lam binderName d b binderInfo)) →
        ((data : Lean.MData) → (b : Lean.Expr) → motive (Lean.Expr.mdata data b)) →
          ((declName : Lean.Name) →
              (t v b : Lean.Expr) → (nondep : Bool) → motive (Lean.Expr.letE declName t v b nondep)) →
            ((f a : Lean.Expr) → motive (f.app a)) →
              ((typeName : Lean.Name) → (idx : ℕ) → (b : Lean.Expr) → motive (Lean.Expr.proj typeName idx b)) →
                ((u : Lean.Level) → motive (Lean.Expr.sort u)) →
                  ((declName : Lean.Name) → (us : List Lean.Level) → motive (Lean.Expr.const declName us)) →
                    ((e : Lean.Expr) → motive e) → motive e