{K : Type u_2} →
  {P : Sort u} →
    {toCommSemiring : CommSemiring K} →
      {toInv : Inv K} →
        {toDiv : Div K} →
          {div_eq_mul_inv : autoParam (∀ (a b : K), a / b = a * b⁻¹) DivInvMonoid.div_eq_mul_inv._autoParam} →
            {zpow : ℤ → K → K} →
              {zpow_zero' : autoParam (∀ (a : K), zpow 0 a = 1) DivInvMonoid.zpow_zero'._autoParam} →
                {zpow_succ' :
                    autoParam (∀ (n : ℕ) (a : K), zpow (↑n.succ) a = zpow (↑n) a * a)
                      DivInvMonoid.zpow_succ'._autoParam} →
                  {zpow_neg' :
                      autoParam (∀ (n : ℕ) (a : K), zpow (Int.negSucc n) a = (zpow (↑n.succ) a)⁻¹)
                        DivInvMonoid.zpow_neg'._autoParam} →
                    {toNontrivial : Nontrivial K} →
                      {inv_zero : 0⁻¹ = 0} →
                        {mul_inv_cancel : ∀ (a : K), a ≠ 0 → a * a⁻¹ = 1} →
                          {toNNRatCast : NNRatCast K} →
                            {nnratCast_def :
                                autoParam (∀ (q : ℚ≥0), ↑q = ↑q.num / ↑q.den)
                                  DivisionSemiring.nnratCast_def._autoParam} →
                              {nnqsmul : ℚ≥0 → K → K} →
                                {nnqsmul_def :
                                    autoParam (∀ (q : ℚ≥0) (a : K), nnqsmul q a = ↑q * a)
                                      DivisionSemiring.nnqsmul_def._autoParam} →
                                  {toCommSemiring' : CommSemiring K} →
                                    {toInv' : Inv K} →
                                      {toDiv' : Div K} →
                                        {div_eq_mul_inv' :
                                            autoParam (∀ (a b : K), a / b = a * b⁻¹)
                                              DivInvMonoid.div_eq_mul_inv._autoParam} →
                                          {zpow' : ℤ → K → K} →
                                            {zpow_zero'' :
                                                autoParam (∀ (a : K), zpow' 0 a = 1)
                                                  DivInvMonoid.zpow_zero'._autoParam} →
                                              {zpow_succ'' :
                                                  autoParam (∀ (n : ℕ) (a : K), zpow' (↑n.succ) a = zpow' (↑n) a * a)
                                                    DivInvMonoid.zpow_succ'._autoParam} →
                                                {zpow_neg'' :
                                                    autoParam
                                                      (∀ (n : ℕ) (a : K),
                                                        zpow' (Int.negSucc n) a = (zpow' (↑n.succ) a)⁻¹)
                                                      DivInvMonoid.zpow_neg'._autoParam} →
                                                  {toNontrivial' : Nontrivial K} →
                                                    {inv_zero' : 0⁻¹ = 0} →
                                                      {mul_inv_cancel' : ∀ (a : K), a ≠ 0 → a * a⁻¹ = 1} →
                                                        {toNNRatCast' : NNRatCast K} →
                                                          {nnratCast_def' :
                                                              autoParam (∀ (q : ℚ≥0), ↑q = ↑q.num / ↑q.den)
                                                                DivisionSemiring.nnratCast_def._autoParam} →
                                                            {nnqsmul' : ℚ≥0 → K → K} →
                                                              {nnqsmul_def' :
                                                                  autoParam (∀ (q : ℚ≥0) (a : K), nnqsmul' q a = ↑q * a)
                                                                    DivisionSemiring.nnqsmul_def._autoParam} →
                                                                { toCommSemiring := toCommSemiring, toInv := toInv,
                                                                      toDiv := toDiv, div_eq_mul_inv := div_eq_mul_inv,
                                                                      zpow := zpow, zpow_zero' := zpow_zero',
                                                                      zpow_succ' := zpow_succ', zpow_neg' := zpow_neg',
                                                                      toNontrivial := toNontrivial,
                                                                      inv_zero := inv_zero,
                                                                      mul_inv_cancel := mul_inv_cancel,
                                                                      toNNRatCast := toNNRatCast,
                                                                      nnratCast_def := nnratCast_def,
                                                                      nnqsmul := nnqsmul, nnqsmul_def := nnqsmul_def } =
                                                                    { toCommSemiring := toCommSemiring',
                                                                      toInv := toInv', toDiv := toDiv',
                                                                      div_eq_mul_inv := div_eq_mul_inv', zpow := zpow',
                                                                      zpow_zero' := zpow_zero'',
                                                                      zpow_succ' := zpow_succ'',
                                                                      zpow_neg' := zpow_neg'',
                                                                      toNontrivial := toNontrivial',
                                                                      inv_zero := inv_zero',
                                                                      mul_inv_cancel := mul_inv_cancel',
                                                                      toNNRatCast := toNNRatCast',
                                                                      nnratCast_def := nnratCast_def',
                                                                      nnqsmul := nnqsmul',
                                                                      nnqsmul_def := nnqsmul_def' } →
                                                                  (toCommSemiring ≍ toCommSemiring' →
                                                                      toInv ≍ toInv' →
                                                                        toDiv ≍ toDiv' →
                                                                          zpow ≍ zpow' →
                                                                            toNNRatCast ≍ toNNRatCast' →
                                                                              nnqsmul ≍ nnqsmul' → P) →
                                                                    P