{motive : Lean.Expr → Sort u} →
  (t : Lean.Expr) →
    ((u : Lean.Level) → motive (Lean.Expr.sort u)) →
      ((declName : Lean.Name) → (us : List Lean.Level) → motive (Lean.Expr.const declName us)) →
        ((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)) →
            ((fn arg : Lean.Expr) → motive (fn.app arg)) →
              ((fvarId : Lean.FVarId) → motive (Lean.Expr.fvar fvarId)) →
                ((typeName : Lean.Name) →
                    (idx : ℕ) → (struct : Lean.Expr) → motive (Lean.Expr.proj typeName idx struct)) →
                  (Nat.hasNotBit 2298 t.ctorIdx → motive t) → motive t