(motive : Lean.Expr → Sort u_1) →
  (f : Lean.Expr) →
    ((mvarId : Lean.MVarId) → motive (Lean.Expr.mvar mvarId)) →
      ((fName : Lean.Name) → (us : List Lean.Level) → motive (Lean.Expr.const fName us)) →
        ((typeName : Lean.Name) → (idx : ℕ) → (e : Lean.Expr) → motive (Lean.Expr.proj typeName idx e)) →
          ((x : Lean.Expr) → motive x) → motive f