{motive_1 : Lean.Meta.Grind.Arith.CommRing.EqCnstr → Sort u} →
  {motive_2 : Lean.Meta.Grind.Arith.CommRing.EqCnstrProof → Sort u} →
    (t : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
      ((p : Lean.Grind.CommRing.Poly) →
          (h : Lean.Meta.Grind.Arith.CommRing.EqCnstrProof) →
            (sugar id : ℕ) → motive_2 h → motive_1 { p := p, h := h, sugar := sugar, id := id }) →
        ((a b : Lean.Expr) →
            (ra rb : Lean.Meta.Grind.Arith.CommRing.RingExpr) →
              motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.core a b ra rb)) →
          ((a b : Lean.Expr) →
              (sa sb : Lean.Meta.Grind.Arith.CommRing.SemiringExpr) →
                (ra rb : Lean.Meta.Grind.Arith.CommRing.RingExpr) →
                  motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.coreS a b sa sb ra rb)) →
            ((k₁ : ℤ) →
                (m₁ : Lean.Grind.CommRing.Mon) →
                  (c₁ : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                    (k₂ : ℤ) →
                      (m₂ : Lean.Grind.CommRing.Mon) →
                        (c₂ : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                          motive_1 c₁ →
                            motive_1 c₂ →
                              motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.superpose k₁ m₁ c₁ k₂ m₂ c₂)) →
              ((k₁ : ℤ) →
                  (c₁ : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                    (k₂ : ℤ) →
                      (m₂ : Lean.Grind.CommRing.Mon) →
                        (c₂ : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                          motive_1 c₁ →
                            motive_1 c₂ → motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.simp k₁ c₁ k₂ m₂ c₂)) →
                ((k : ℤ) →
                    (e : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                      motive_1 e → motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.mul k e)) →
                  ((k : ℤ) →
                      (e : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                        motive_1 e → motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.div k e)) →
                    ((a b : ℤ) →
                        (c₁ c₂ : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                          motive_1 c₁ →
                            motive_1 c₂ → motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.gcd a b c₁ c₂)) →
                      ((k : ℕ) →
                          (c₁ c₂ : Lean.Meta.Grind.Arith.CommRing.EqCnstr) →
                            motive_1 c₁ →
                              motive_1 c₂ → motive_2 (Lean.Meta.Grind.Arith.CommRing.EqCnstrProof.numEq0 k c₁ c₂)) →
                        motive_1 t