(motive : Lean.Expr → Sort u_1) →
  (e : Lean.Expr) →
    ((data : Lean.MData) → (b : Lean.Expr) → motive (Lean.Expr.mdata data b)) →
      ((typeName : Lean.Name) → (idx : ℕ) → (s : Lean.Expr) → motive (Lean.Expr.proj typeName idx s)) →
        ((f a : Lean.Expr) → motive (f.app a)) →
          ((binderName : Lean.Name) →
              (d b : Lean.Expr) → (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.lam binderName d b binderInfo)) →
            ((binderName : Lean.Name) →
                (d b : Lean.Expr) →
                  (binderInfo : Lean.BinderInfo) → motive (Lean.Expr.forallE binderName d b binderInfo)) →
              ((declName : Lean.Name) →
                  (t v b : Lean.Expr) → (nondep : Bool) → motive (Lean.Expr.letE declName t v b nondep)) →
                ((deBruijnIndex : ℕ) → motive (Lean.Expr.bvar deBruijnIndex)) →
                  ((u : Lean.Level) → motive (Lean.Expr.sort u)) →
                    ((declName : Lean.Name) → (us : List Lean.Level) → motive (Lean.Expr.const declName us)) →
                      ((a : Lean.Literal) → motive (Lean.Expr.lit a)) →
                        ((fvarId : Lean.FVarId) → motive (Lean.Expr.fvar fvarId)) →
                          ((mvarId' : Lean.MVarId) → motive (Lean.Expr.mvar mvarId')) → motive e