(motive : Lean.Expr → Sort u_1) →
  (e : Lean.Expr) →
    ((n : ℕ) → motive (Lean.Expr.lit (Lean.Literal.natVal n))) →
      ((data : Lean.MData) → (e : Lean.Expr) → motive (Lean.Expr.mdata data e)) →
        ((us : List Lean.Level) → motive (Lean.Expr.const `Nat.zero us)) →
          ((fn arg : Lean.Expr) → motive (fn.app arg)) →
            ((mvarId : Lean.MVarId) → motive (Lean.Expr.mvar mvarId)) → ((x : Lean.Expr) → motive x) → motive e