(motive : Lean.Expr → Lean.Expr → Sort u_1) →
  (t s : Lean.Expr) →
    ((l₁ l₂ : Lean.Literal) → motive (Lean.Expr.lit l₁) (Lean.Expr.lit l₂)) →
      ((u v : Lean.Level) → motive (Lean.Expr.sort u) (Lean.Expr.sort v)) →
        ((binderName : Lean.Name) →
            (binderType body : Lean.Expr) →
              (binderInfo : Lean.BinderInfo) →
                (binderName_1 : Lean.Name) →
                  (binderType_1 body_1 : Lean.Expr) →
                    (binderInfo_1 : Lean.BinderInfo) →
                      motive (Lean.Expr.lam binderName binderType body binderInfo)
                        (Lean.Expr.lam binderName_1 binderType_1 body_1 binderInfo_1)) →
          ((binderName : Lean.Name) →
              (binderType body : Lean.Expr) →
                (binderInfo : Lean.BinderInfo) →
                  (binderName_1 : Lean.Name) →
                    (binderType_1 body_1 : Lean.Expr) →
                      (binderInfo_1 : Lean.BinderInfo) →
                        motive (Lean.Expr.forallE binderName binderType body binderInfo)
                          (Lean.Expr.forallE binderName_1 binderType_1 body_1 binderInfo_1)) →
            ((data : Lean.MData) → (t x : Lean.Expr) → motive (Lean.Expr.mdata data t) x) →
              ((x : Lean.Expr) → (data : Lean.MData) → (s : Lean.Expr) → motive x (Lean.Expr.mdata data s)) →
                ((fvarId₁ fvarId₂ : Lean.FVarId) → motive (Lean.Expr.fvar fvarId₁) (Lean.Expr.fvar fvarId₂)) →
                  ((declName₁ : Lean.Name) →
                      (us₁ : List Lean.Level) →
                        (declName₂ : Lean.Name) →
                          (us₂ : List Lean.Level) →
                            motive (Lean.Expr.const declName₁ us₁) (Lean.Expr.const declName₂ us₂)) →
                    ((deBruijnIndex : ℕ) → (x : Lean.Expr) → motive (Lean.Expr.bvar deBruijnIndex) x) →
                      ((x : Lean.Expr) → (deBruijnIndex : ℕ) → motive x (Lean.Expr.bvar deBruijnIndex)) →
                        ((typeName : Lean.Name) →
                            (idx : ℕ) → (struct x : Lean.Expr) → motive (Lean.Expr.proj typeName idx struct) x) →
                          ((x : Lean.Expr) →
                              (typeName : Lean.Name) →
                                (idx : ℕ) → (struct : Lean.Expr) → motive x (Lean.Expr.proj typeName idx struct)) →
                            ((declName : Lean.Name) →
                                (type value body : Lean.Expr) →
                                  (nondep : Bool) →
                                    (x : Lean.Expr) → motive (Lean.Expr.letE declName type value body nondep) x) →
                              ((x : Lean.Expr) →
                                  (declName : Lean.Name) →
                                    (type value body : Lean.Expr) →
                                      (nondep : Bool) → motive x (Lean.Expr.letE declName type value body nondep)) →
                                ((x x_1 : Lean.Expr) → motive x x_1) → motive t s