algebra.ring.prod
⟷
Mathlib.Algebra.Ring.Prod
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
prod_prod_prod
equivs (#19235)
These send ((a, b), (c, d))
to ((a, c), (b, d))
, and this commit provides this bundled as equiv
, add_equiv
, mul_equiv
, ring_equiv
, and linear_equiv
.
We already have something analogous for tensor_product
.
@@ -212,7 +212,9 @@ end prod_map
end ring_hom
namespace ring_equiv
-variables {R S} [non_assoc_semiring R] [non_assoc_semiring S]
+variables {R S R' S'}
+variables [non_assoc_semiring R] [non_assoc_semiring S]
+variables [non_assoc_semiring R'] [non_assoc_semiring S']
/-- Swapping components as an equivalence of (semi)rings. -/
def prod_comm : R × S ≃+* S × R :=
@@ -229,6 +231,31 @@ ring_hom.ext $ λ _, rfl
(ring_hom.snd S R).comp ↑(prod_comm : R × S ≃+* S × R) = ring_hom.fst R S :=
ring_hom.ext $ λ _, rfl
+section
+variables (R R' S S')
+
+/-- Four-way commutativity of `prod`. The name matches `mul_mul_mul_comm`. -/
+@[simps apply]
+def prod_prod_prod_comm : (R × R') × (S × S') ≃+* (R × S) × (R' × S') :=
+{ to_fun := λ rrss, ((rrss.1.1, rrss.2.1), (rrss.1.2, rrss.2.2)),
+ inv_fun := λ rsrs, ((rsrs.1.1, rsrs.2.1), (rsrs.1.2, rsrs.2.2)),
+ .. add_equiv.prod_prod_prod_comm R R' S S',
+ .. mul_equiv.prod_prod_prod_comm R R' S S' }
+
+@[simp] lemma prod_prod_prod_comm_symm :
+ (prod_prod_prod_comm R R' S S').symm = prod_prod_prod_comm R S R' S' := rfl
+
+@[simp] lemma prod_prod_prod_comm_to_add_equiv :
+ (prod_prod_prod_comm R R' S S').to_add_equiv = add_equiv.prod_prod_prod_comm R R' S S' := rfl
+
+@[simp] lemma prod_prod_prod_comm_to_mul_equiv :
+ (prod_prod_prod_comm R R' S S').to_mul_equiv = mul_equiv.prod_prod_prod_comm R R' S S' := rfl
+
+@[simp] lemma prod_prod_prod_comm_to_equiv :
+ (prod_prod_prod_comm R R' S S').to_equiv = equiv.prod_prod_prod_comm R R' S S' := rfl
+
+end
+
variables (R S) [subsingleton S]
/-- A ring `R` is isomorphic to `R × S` when `S` is the zero ring -/
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -444,7 +444,7 @@ theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [
by
have :=
NoZeroDivisors.eq_zero_or_eq_zero_of_hMul_eq_zero (show ((0 : R), (1 : S)) * (1, 0) = 0 by simp)
- rw [Prod.mk_eq_zero, Prod.mk_eq_zero] at this
+ rw [Prod.mk_eq_zero, Prod.mk_eq_zero] at this
rcases this with (⟨_, h⟩ | ⟨h, _⟩)
· exact zero_ne_one h.symm
· exact zero_ne_one h.symm
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Chris Hughes, Mario Carneiro, Yury Kudryashov
-/
-import Mathbin.Data.Int.Cast.Prod
-import Mathbin.Algebra.Group.Prod
-import Mathbin.Algebra.Ring.Equiv
-import Mathbin.Algebra.Order.Monoid.Prod
+import Data.Int.Cast.Prod
+import Algebra.Group.Prod
+import Algebra.Ring.Equiv
+import Algebra.Order.Monoid.Prod
#align_import algebra.ring.prod from "leanprover-community/mathlib"@"cd391184c85986113f8c00844cfe6dda1d34be3d"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -443,7 +443,7 @@ theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [
[Nontrivial R] [Nontrivial S] : False :=
by
have :=
- NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero (show ((0 : R), (1 : S)) * (1, 0) = 0 by simp)
+ NoZeroDivisors.eq_zero_or_eq_zero_of_hMul_eq_zero (show ((0 : R), (1 : S)) * (1, 0) = 0 by simp)
rw [Prod.mk_eq_zero, Prod.mk_eq_zero] at this
rcases this with (⟨_, h⟩ | ⟨h, _⟩)
· exact zero_ne_one h.symm
@@ -469,7 +469,7 @@ instance [OrderedCommSemiring α] [OrderedCommSemiring β] : OrderedCommSemiring
instance [OrderedRing α] [OrderedRing β] : OrderedRing (α × β) :=
{ Prod.ring, Prod.orderedSemiring with
- mul_nonneg := fun a b ha hb => ⟨mul_nonneg ha.1 hb.1, mul_nonneg ha.2 hb.2⟩ }
+ hMul_nonneg := fun a b ha hb => ⟨mul_nonneg ha.1 hb.1, mul_nonneg ha.2 hb.2⟩ }
instance [OrderedCommRing α] [OrderedCommRing β] : OrderedCommRing (α × β) :=
{ Prod.commRing, Prod.orderedRing with }
mathlib commit https://github.com/leanprover-community/mathlib/commit/d11f435d4e34a6cea0a1797d6b625b0c170be845
@@ -328,34 +328,34 @@ def prodComm : R × S ≃+* S × R :=
#align ring_equiv.prod_comm RingEquiv.prodComm
-/
-#print RingEquiv.coe_prod_comm /-
+#print RingEquiv.coe_prodComm /-
@[simp]
-theorem coe_prod_comm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
+theorem coe_prodComm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
rfl
-#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_comm
+#align ring_equiv.coe_prod_comm RingEquiv.coe_prodComm
-/
-#print RingEquiv.coe_prod_comm_symm /-
+#print RingEquiv.coe_prodComm_symm /-
@[simp]
-theorem coe_prod_comm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
+theorem coe_prodComm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
rfl
-#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symm
+#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prodComm_symm
-/
-#print RingEquiv.fst_comp_coe_prod_comm /-
+#print RingEquiv.fst_comp_coe_prodComm /-
@[simp]
-theorem fst_comp_coe_prod_comm :
+theorem fst_comp_coe_prodComm :
(RingHom.fst S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.snd R S :=
RingHom.ext fun _ => rfl
-#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_comm
+#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prodComm
-/
-#print RingEquiv.snd_comp_coe_prod_comm /-
+#print RingEquiv.snd_comp_coe_prodComm /-
@[simp]
-theorem snd_comp_coe_prod_comm :
+theorem snd_comp_coe_prodComm :
(RingHom.snd S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.fst R S :=
RingHom.ext fun _ => rfl
-#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_comm
+#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prodComm
-/
section
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Chris Hughes, Mario Carneiro, Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.ring.prod
-! leanprover-community/mathlib commit cd391184c85986113f8c00844cfe6dda1d34be3d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Int.Cast.Prod
import Mathbin.Algebra.Group.Prod
import Mathbin.Algebra.Ring.Equiv
import Mathbin.Algebra.Order.Monoid.Prod
+#align_import algebra.ring.prod from "leanprover-community/mathlib"@"cd391184c85986113f8c00844cfe6dda1d34be3d"
+
/-!
# Semiring, ring etc structures on `R × S`
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf2428c9486c407ca38b5b3fb10b87dad0bc99fa
@@ -365,6 +365,7 @@ section
variable (R R' S S')
+#print RingEquiv.prodProdProdComm /-
/-- Four-way commutativity of `prod`. The name matches `mul_mul_mul_comm`. -/
@[simps apply]
def prodProdProdComm : (R × R') × S × S' ≃+* (R × S) × R' × S' :=
@@ -374,29 +375,38 @@ def prodProdProdComm : (R × R') × S × S' ≃+* (R × S) × R' × S' :=
toFun := fun rrss => ((rrss.1.1, rrss.2.1), (rrss.1.2, rrss.2.2))
invFun := fun rsrs => ((rsrs.1.1, rsrs.2.1), (rsrs.1.2, rsrs.2.2)) }
#align ring_equiv.prod_prod_prod_comm RingEquiv.prodProdProdComm
+-/
+#print RingEquiv.prodProdProdComm_symm /-
@[simp]
theorem prodProdProdComm_symm : (prodProdProdComm R R' S S').symm = prodProdProdComm R S R' S' :=
rfl
#align ring_equiv.prod_prod_prod_comm_symm RingEquiv.prodProdProdComm_symm
+-/
+#print RingEquiv.prodProdProdComm_toAddEquiv /-
@[simp]
theorem prodProdProdComm_toAddEquiv :
(prodProdProdComm R R' S S').toAddEquiv = AddEquiv.prodProdProdComm R R' S S' :=
rfl
#align ring_equiv.prod_prod_prod_comm_to_add_equiv RingEquiv.prodProdProdComm_toAddEquiv
+-/
+#print RingEquiv.prodProdProdComm_toMulEquiv /-
@[simp]
theorem prodProdProdComm_toMulEquiv :
(prodProdProdComm R R' S S').toMulEquiv = MulEquiv.prodProdProdComm R R' S S' :=
rfl
#align ring_equiv.prod_prod_prod_comm_to_mul_equiv RingEquiv.prodProdProdComm_toMulEquiv
+-/
+#print RingEquiv.prodProdProdComm_toEquiv /-
@[simp]
theorem prodProdProdComm_toEquiv :
(prodProdProdComm R R' S S').toEquiv = Equiv.prodProdProdComm R R' S S' :=
rfl
#align ring_equiv.prod_prod_prod_comm_to_equiv RingEquiv.prodProdProdComm_toEquiv
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/d608fc5d4e69d4cc21885913fb573a88b0deb521
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Chris Hughes, Mario Carneiro, Yury Kudryashov
! This file was ported from Lean 3 source module algebra.ring.prod
-! leanprover-community/mathlib commit c3291da49cfa65f0d43b094750541c0731edc932
+! leanprover-community/mathlib commit cd391184c85986113f8c00844cfe6dda1d34be3d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -318,7 +318,11 @@ end RingHom
namespace RingEquiv
-variable {R S} [NonAssocSemiring R] [NonAssocSemiring S]
+variable {R S R' S'}
+
+variable [NonAssocSemiring R] [NonAssocSemiring S]
+
+variable [NonAssocSemiring R'] [NonAssocSemiring S']
#print RingEquiv.prodComm /-
/-- Swapping components as an equivalence of (semi)rings. -/
@@ -357,6 +361,45 @@ theorem snd_comp_coe_prod_comm :
#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_comm
-/
+section
+
+variable (R R' S S')
+
+/-- Four-way commutativity of `prod`. The name matches `mul_mul_mul_comm`. -/
+@[simps apply]
+def prodProdProdComm : (R × R') × S × S' ≃+* (R × S) × R' × S' :=
+ { AddEquiv.prodProdProdComm R R' S S',
+ MulEquiv.prodProdProdComm R R' S
+ S' with
+ toFun := fun rrss => ((rrss.1.1, rrss.2.1), (rrss.1.2, rrss.2.2))
+ invFun := fun rsrs => ((rsrs.1.1, rsrs.2.1), (rsrs.1.2, rsrs.2.2)) }
+#align ring_equiv.prod_prod_prod_comm RingEquiv.prodProdProdComm
+
+@[simp]
+theorem prodProdProdComm_symm : (prodProdProdComm R R' S S').symm = prodProdProdComm R S R' S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_symm RingEquiv.prodProdProdComm_symm
+
+@[simp]
+theorem prodProdProdComm_toAddEquiv :
+ (prodProdProdComm R R' S S').toAddEquiv = AddEquiv.prodProdProdComm R R' S S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_to_add_equiv RingEquiv.prodProdProdComm_toAddEquiv
+
+@[simp]
+theorem prodProdProdComm_toMulEquiv :
+ (prodProdProdComm R R' S S').toMulEquiv = MulEquiv.prodProdProdComm R R' S S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_to_mul_equiv RingEquiv.prodProdProdComm_toMulEquiv
+
+@[simp]
+theorem prodProdProdComm_toEquiv :
+ (prodProdProdComm R R' S S').toEquiv = Equiv.prodProdProdComm R R' S S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_to_equiv RingEquiv.prodProdProdComm_toEquiv
+
+end
+
variable (R S) [Subsingleton S]
#print RingEquiv.prodZeroRing /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -94,57 +94,75 @@ namespace NonUnitalRingHom
variable (R S) [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S]
+#print NonUnitalRingHom.fst /-
/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`.-/
def fst : R × S →ₙ+* R :=
{ MulHom.fst R S, AddMonoidHom.fst R S with toFun := Prod.fst }
#align non_unital_ring_hom.fst NonUnitalRingHom.fst
+-/
+#print NonUnitalRingHom.snd /-
/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`.-/
def snd : R × S →ₙ+* S :=
{ MulHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
#align non_unital_ring_hom.snd NonUnitalRingHom.snd
+-/
variable {R S}
+#print NonUnitalRingHom.coe_fst /-
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
rfl
#align non_unital_ring_hom.coe_fst NonUnitalRingHom.coe_fst
+-/
+#print NonUnitalRingHom.coe_snd /-
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
rfl
#align non_unital_ring_hom.coe_snd NonUnitalRingHom.coe_snd
+-/
section Prod
variable [NonUnitalNonAssocSemiring T] (f : R →ₙ+* S) (g : R →ₙ+* T)
+#print NonUnitalRingHom.prod /-
/-- Combine two non-unital ring homomorphisms `f : R →ₙ+* S`, `g : R →ₙ+* T` into
`f.prod g : R →ₙ+* S × T` given by `(f.prod g) x = (f x, g x)` -/
protected def prod (f : R →ₙ+* S) (g : R →ₙ+* T) : R →ₙ+* S × T :=
{ MulHom.prod (f : MulHom R S) (g : MulHom R T), AddMonoidHom.prod (f : R →+ S) (g : R →+ T) with
toFun := fun x => (f x, g x) }
#align non_unital_ring_hom.prod NonUnitalRingHom.prod
+-/
+#print NonUnitalRingHom.prod_apply /-
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
rfl
#align non_unital_ring_hom.prod_apply NonUnitalRingHom.prod_apply
+-/
+#print NonUnitalRingHom.fst_comp_prod /-
@[simp]
theorem fst_comp_prod : (fst S T).comp (f.Prod g) = f :=
ext fun x => rfl
#align non_unital_ring_hom.fst_comp_prod NonUnitalRingHom.fst_comp_prod
+-/
+#print NonUnitalRingHom.snd_comp_prod /-
@[simp]
theorem snd_comp_prod : (snd S T).comp (f.Prod g) = g :=
ext fun x => rfl
#align non_unital_ring_hom.snd_comp_prod NonUnitalRingHom.snd_comp_prod
+-/
+#print NonUnitalRingHom.prod_unique /-
theorem prod_unique (f : R →ₙ+* S × T) : ((fst S T).comp f).Prod ((snd S T).comp f) = f :=
ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
#align non_unital_ring_hom.prod_unique NonUnitalRingHom.prod_unique
+-/
end Prod
@@ -154,24 +172,32 @@ variable [NonUnitalNonAssocSemiring R'] [NonUnitalNonAssocSemiring S'] [NonUnita
variable (f : R →ₙ+* R') (g : S →ₙ+* S')
+#print NonUnitalRingHom.prodMap /-
/-- `prod.map` as a `non_unital_ring_hom`. -/
def prodMap : R × S →ₙ+* R' × S' :=
(f.comp (fst R S)).Prod (g.comp (snd R S))
#align non_unital_ring_hom.prod_map NonUnitalRingHom.prodMap
+-/
+#print NonUnitalRingHom.prodMap_def /-
theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :=
rfl
#align non_unital_ring_hom.prod_map_def NonUnitalRingHom.prodMap_def
+-/
+#print NonUnitalRingHom.coe_prodMap /-
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
rfl
#align non_unital_ring_hom.coe_prod_map NonUnitalRingHom.coe_prodMap
+-/
+#print NonUnitalRingHom.prod_comp_prodMap /-
theorem prod_comp_prodMap (f : T →ₙ+* R) (g : T →ₙ+* S) (f' : R →ₙ+* R') (g' : S →ₙ+* S') :
(f'.Prod_map g').comp (f.Prod g) = (f'.comp f).Prod (g'.comp g) :=
rfl
#align non_unital_ring_hom.prod_comp_prod_map NonUnitalRingHom.prod_comp_prodMap
+-/
end Prod_map
@@ -181,57 +207,75 @@ namespace RingHom
variable (R S) [NonAssocSemiring R] [NonAssocSemiring S]
+#print RingHom.fst /-
/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`.-/
def fst : R × S →+* R :=
{ MonoidHom.fst R S, AddMonoidHom.fst R S with toFun := Prod.fst }
#align ring_hom.fst RingHom.fst
+-/
+#print RingHom.snd /-
/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`.-/
def snd : R × S →+* S :=
{ MonoidHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
#align ring_hom.snd RingHom.snd
+-/
variable {R S}
+#print RingHom.coe_fst /-
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
rfl
#align ring_hom.coe_fst RingHom.coe_fst
+-/
+#print RingHom.coe_snd /-
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
rfl
#align ring_hom.coe_snd RingHom.coe_snd
+-/
section Prod
variable [NonAssocSemiring T] (f : R →+* S) (g : R →+* T)
+#print RingHom.prod /-
/-- Combine two ring homomorphisms `f : R →+* S`, `g : R →+* T` into `f.prod g : R →+* S × T`
given by `(f.prod g) x = (f x, g x)` -/
protected def prod (f : R →+* S) (g : R →+* T) : R →+* S × T :=
{ MonoidHom.prod (f : R →* S) (g : R →* T), AddMonoidHom.prod (f : R →+ S) (g : R →+ T) with
toFun := fun x => (f x, g x) }
#align ring_hom.prod RingHom.prod
+-/
+#print RingHom.prod_apply /-
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
rfl
#align ring_hom.prod_apply RingHom.prod_apply
+-/
+#print RingHom.fst_comp_prod /-
@[simp]
theorem fst_comp_prod : (fst S T).comp (f.Prod g) = f :=
ext fun x => rfl
#align ring_hom.fst_comp_prod RingHom.fst_comp_prod
+-/
+#print RingHom.snd_comp_prod /-
@[simp]
theorem snd_comp_prod : (snd S T).comp (f.Prod g) = g :=
ext fun x => rfl
#align ring_hom.snd_comp_prod RingHom.snd_comp_prod
+-/
+#print RingHom.prod_unique /-
theorem prod_unique (f : R →+* S × T) : ((fst S T).comp f).Prod ((snd S T).comp f) = f :=
ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
#align ring_hom.prod_unique RingHom.prod_unique
+-/
end Prod
@@ -241,24 +285,32 @@ variable [NonAssocSemiring R'] [NonAssocSemiring S'] [NonAssocSemiring T]
variable (f : R →+* R') (g : S →+* S')
+#print RingHom.prodMap /-
/-- `prod.map` as a `ring_hom`. -/
def prodMap : R × S →+* R' × S' :=
(f.comp (fst R S)).Prod (g.comp (snd R S))
#align ring_hom.prod_map RingHom.prodMap
+-/
+#print RingHom.prodMap_def /-
theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :=
rfl
#align ring_hom.prod_map_def RingHom.prodMap_def
+-/
+#print RingHom.coe_prodMap /-
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
rfl
#align ring_hom.coe_prod_map RingHom.coe_prodMap
+-/
+#print RingHom.prod_comp_prodMap /-
theorem prod_comp_prodMap (f : T →+* R) (g : T →+* S) (f' : R →+* R') (g' : S →+* S') :
(f'.Prod_map g').comp (f.Prod g) = (f'.comp f).Prod (g'.comp g) :=
rfl
#align ring_hom.prod_comp_prod_map RingHom.prod_comp_prodMap
+-/
end Prod_map
@@ -268,35 +320,46 @@ namespace RingEquiv
variable {R S} [NonAssocSemiring R] [NonAssocSemiring S]
+#print RingEquiv.prodComm /-
/-- Swapping components as an equivalence of (semi)rings. -/
def prodComm : R × S ≃+* S × R :=
{ AddEquiv.prodComm, MulEquiv.prodComm with }
#align ring_equiv.prod_comm RingEquiv.prodComm
+-/
+#print RingEquiv.coe_prod_comm /-
@[simp]
theorem coe_prod_comm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
rfl
#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_comm
+-/
+#print RingEquiv.coe_prod_comm_symm /-
@[simp]
theorem coe_prod_comm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
rfl
#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symm
+-/
+#print RingEquiv.fst_comp_coe_prod_comm /-
@[simp]
theorem fst_comp_coe_prod_comm :
(RingHom.fst S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.snd R S :=
RingHom.ext fun _ => rfl
#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_comm
+-/
+#print RingEquiv.snd_comp_coe_prod_comm /-
@[simp]
theorem snd_comp_coe_prod_comm :
(RingHom.snd S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.fst R S :=
RingHom.ext fun _ => rfl
#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_comm
+-/
variable (R S) [Subsingleton S]
+#print RingEquiv.prodZeroRing /-
/-- A ring `R` is isomorphic to `R × S` when `S` is the zero ring -/
@[simps]
def prodZeroRing : R ≃+* R × S where
@@ -307,7 +370,9 @@ def prodZeroRing : R ≃+* R × S where
left_inv x := rfl
right_inv x := by cases x <;> simp
#align ring_equiv.prod_zero_ring RingEquiv.prodZeroRing
+-/
+#print RingEquiv.zeroRingProd /-
/-- A ring `R` is isomorphic to `S × R` when `S` is the zero ring -/
@[simps]
def zeroRingProd : R ≃+* S × R where
@@ -318,9 +383,11 @@ def zeroRingProd : R ≃+* S × R where
left_inv x := rfl
right_inv x := by cases x <;> simp
#align ring_equiv.zero_ring_prod RingEquiv.zeroRingProd
+-/
end RingEquiv
+#print false_of_nontrivial_of_product_domain /-
/-- The product of two nontrivial rings is not a domain -/
theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [IsDomain (R × S)]
[Nontrivial R] [Nontrivial S] : False :=
@@ -332,6 +399,7 @@ theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [
· exact zero_ne_one h.symm
· exact zero_ne_one h.symm
#align false_of_nontrivial_of_product_domain false_of_nontrivial_of_product_domain
+-/
/-! ### Order -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -327,7 +327,7 @@ theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [
by
have :=
NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero (show ((0 : R), (1 : S)) * (1, 0) = 0 by simp)
- rw [Prod.mk_eq_zero, Prod.mk_eq_zero] at this
+ rw [Prod.mk_eq_zero, Prod.mk_eq_zero] at this
rcases this with (⟨_, h⟩ | ⟨h, _⟩)
· exact zero_ne_one h.symm
· exact zero_ne_one h.symm
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -94,23 +94,11 @@ namespace NonUnitalRingHom
variable (R S) [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S]
-/- warning: non_unital_ring_hom.fst -> NonUnitalRingHom.fst is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], NonUnitalRingHom.{max u2 u1, u1} (Prod.{u1, u2} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} R S _inst_1 _inst_2) _inst_1
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.fst NonUnitalRingHom.fstₓ'. -/
/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`.-/
def fst : R × S →ₙ+* R :=
{ MulHom.fst R S, AddMonoidHom.fst R S with toFun := Prod.fst }
#align non_unital_ring_hom.fst NonUnitalRingHom.fst
-/- warning: non_unital_ring_hom.snd -> NonUnitalRingHom.snd is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], NonUnitalRingHom.{max u2 u1, u2} (Prod.{u1, u2} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} R S _inst_1 _inst_2) _inst_2
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.snd NonUnitalRingHom.sndₓ'. -/
/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`.-/
def snd : R × S →ₙ+* S :=
{ MulHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
@@ -118,23 +106,11 @@ def snd : R × S →ₙ+* S :=
variable {R S}
-/- warning: non_unital_ring_hom.coe_fst -> NonUnitalRingHom.coe_fst is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (NonUnitalRingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_fst NonUnitalRingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
rfl
#align non_unital_ring_hom.coe_fst NonUnitalRingHom.coe_fst
-/- warning: non_unital_ring_hom.coe_snd -> NonUnitalRingHom.coe_snd is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (NonUnitalRingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_snd NonUnitalRingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
rfl
@@ -144,12 +120,6 @@ section Prod
variable [NonUnitalNonAssocSemiring T] (f : R →ₙ+* S) (g : R →ₙ+* T)
-/- warning: non_unital_ring_hom.prod -> NonUnitalRingHom.prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T], (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) -> (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) -> (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T], (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) -> (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) -> (NonUnitalRingHom.{u1, max u3 u2} R (Prod.{u2, u3} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u2, u3} S T _inst_2 _inst_3))
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod NonUnitalRingHom.prodₓ'. -/
/-- Combine two non-unital ring homomorphisms `f : R →ₙ+* S`, `g : R →ₙ+* T` into
`f.prod g : R →ₙ+* S × T` given by `(f.prod g) x = (f x, g x)` -/
protected def prod (f : R →ₙ+* S) (g : R →ₙ+* T) : R →ₙ+* S × T :=
@@ -157,45 +127,21 @@ protected def prod (f : R →ₙ+* S) (g : R →ₙ+* T) : R →ₙ+* S × T :=
toFun := fun x => (f x, g x) }
#align non_unital_ring_hom.prod NonUnitalRingHom.prod
-/- warning: non_unital_ring_hom.prod_apply -> NonUnitalRingHom.prod_apply is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (NonUnitalRingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (NonUnitalRingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (NonUnitalRingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_apply NonUnitalRingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
rfl
#align non_unital_ring_hom.prod_apply NonUnitalRingHom.prod_apply
-/- warning: non_unital_ring_hom.fst_comp_prod -> NonUnitalRingHom.fst_comp_prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3), Eq.{max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (NonUnitalRingHom.comp.{u1, max u2 u3, u2} R (Prod.{u2, u3} S T) S _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_2 (NonUnitalRingHom.fst.{u2, u3} S T _inst_2 _inst_3) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g)) f
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {T : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u3} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u1} T] (f : NonUnitalRingHom.{u3, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u3, u1} R T _inst_1 _inst_3), Eq.{max (succ u3) (succ u2)} (NonUnitalRingHom.{u3, u2} R S _inst_1 _inst_2) (NonUnitalRingHom.comp.{u3, max u2 u1, u2} R (Prod.{u2, u1} S T) S _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} S T _inst_2 _inst_3) _inst_2 (NonUnitalRingHom.fst.{u2, u1} S T _inst_2 _inst_3) (NonUnitalRingHom.prod.{u3, u2, u1} R S T _inst_1 _inst_2 _inst_3 f g)) f
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.fst_comp_prod NonUnitalRingHom.fst_comp_prodₓ'. -/
@[simp]
theorem fst_comp_prod : (fst S T).comp (f.Prod g) = f :=
ext fun x => rfl
#align non_unital_ring_hom.fst_comp_prod NonUnitalRingHom.fst_comp_prod
-/- warning: non_unital_ring_hom.snd_comp_prod -> NonUnitalRingHom.snd_comp_prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3), Eq.{max (succ u1) (succ u3)} (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (NonUnitalRingHom.comp.{u1, max u2 u3, u3} R (Prod.{u2, u3} S T) T _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_3 (NonUnitalRingHom.snd.{u2, u3} S T _inst_2 _inst_3) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g)) g
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u1}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u3} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u3, u1} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u3, u2} R T _inst_1 _inst_3), Eq.{max (succ u3) (succ u2)} (NonUnitalRingHom.{u3, u2} R T _inst_1 _inst_3) (NonUnitalRingHom.comp.{u3, max u1 u2, u2} R (Prod.{u1, u2} S T) T _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3) _inst_3 (NonUnitalRingHom.snd.{u1, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.prod.{u3, u1, u2} R S T _inst_1 _inst_2 _inst_3 f g)) g
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.snd_comp_prod NonUnitalRingHom.snd_comp_prodₓ'. -/
@[simp]
theorem snd_comp_prod : (snd S T).comp (f.Prod g) = g :=
ext fun x => rfl
#align non_unital_ring_hom.snd_comp_prod NonUnitalRingHom.snd_comp_prod
-/- warning: non_unital_ring_hom.prod_unique -> NonUnitalRingHom.prod_unique is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)), Eq.{max (succ u1) (succ (max u2 u3))} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 (NonUnitalRingHom.comp.{u1, max u2 u3, u2} R (Prod.{u2, u3} S T) S _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_2 (NonUnitalRingHom.fst.{u2, u3} S T _inst_2 _inst_3) f) (NonUnitalRingHom.comp.{u1, max u2 u3, u3} R (Prod.{u2, u3} S T) T _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_3 (NonUnitalRingHom.snd.{u2, u3} S T _inst_2 _inst_3) f)) f
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u1}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u3} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u3, max u2 u1} R (Prod.{u1, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3)), Eq.{max (max (succ u3) (succ u1)) (succ u2)} (NonUnitalRingHom.{u3, max u2 u1} R (Prod.{u1, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3)) (NonUnitalRingHom.prod.{u3, u1, u2} R S T _inst_1 _inst_2 _inst_3 (NonUnitalRingHom.comp.{u3, max u1 u2, u1} R (Prod.{u1, u2} S T) S _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3) _inst_2 (NonUnitalRingHom.fst.{u1, u2} S T _inst_2 _inst_3) f) (NonUnitalRingHom.comp.{u3, max u1 u2, u2} R (Prod.{u1, u2} S T) T _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3) _inst_3 (NonUnitalRingHom.snd.{u1, u2} S T _inst_2 _inst_3) f)) f
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_unique NonUnitalRingHom.prod_uniqueₓ'. -/
theorem prod_unique (f : R →ₙ+* S × T) : ((fst S T).comp f).Prod ((snd S T).comp f) = f :=
ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
#align non_unital_ring_hom.prod_unique NonUnitalRingHom.prod_unique
@@ -208,44 +154,20 @@ variable [NonUnitalNonAssocSemiring R'] [NonUnitalNonAssocSemiring S'] [NonUnita
variable (f : R →ₙ+* R') (g : S →ₙ+* S')
-/- warning: non_unital_ring_hom.prod_map -> NonUnitalRingHom.prodMap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'], (NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) -> (NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) -> (NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4))
-but is expected to have type
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'], (NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) -> (NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) -> (NonUnitalRingHom.{max u3 u1, max u4 u2} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u1, u3} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u4} R' S' _inst_3 _inst_4))
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_map NonUnitalRingHom.prodMapₓ'. -/
/-- `prod.map` as a `non_unital_ring_hom`. -/
def prodMap : R × S →ₙ+* R' × S' :=
(f.comp (fst R S)).Prod (g.comp (snd R S))
#align non_unital_ring_hom.prod_map NonUnitalRingHom.prodMap
-/- warning: non_unital_ring_hom.prod_map_def -> NonUnitalRingHom.prodMap_def is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'] (f : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} (NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g) (NonUnitalRingHom.prod.{max u1 u3, u2, u4} (Prod.{u1, u3} R S) R' S' (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) _inst_3 _inst_4 (NonUnitalRingHom.comp.{max u1 u3, u1, u2} (Prod.{u1, u3} R S) R R' (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) _inst_1 _inst_3 f (NonUnitalRingHom.fst.{u1, u3} R S _inst_1 _inst_2)) (NonUnitalRingHom.comp.{max u1 u3, u3, u4} (Prod.{u1, u3} R S) S S' (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) _inst_2 _inst_4 g (NonUnitalRingHom.snd.{u1, u3} R S _inst_1 _inst_2)))
-but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g) (NonUnitalRingHom.prod.{max u4 u2, u3, u1} (Prod.{u4, u2} R S) R' S' (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) _inst_3 _inst_4 (NonUnitalRingHom.comp.{max u4 u2, u4, u3} (Prod.{u4, u2} R S) R R' (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) _inst_1 _inst_3 f (NonUnitalRingHom.fst.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalRingHom.comp.{max u4 u2, u2, u1} (Prod.{u4, u2} R S) S S' (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) _inst_2 _inst_4 g (NonUnitalRingHom.snd.{u4, u2} R S _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_map_def NonUnitalRingHom.prodMap_defₓ'. -/
theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :=
rfl
#align non_unital_ring_hom.prod_map_def NonUnitalRingHom.prodMap_def
-/- warning: non_unital_ring_hom.coe_prod_map -> NonUnitalRingHom.coe_prodMap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'] (f : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (NonUnitalRingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (NonUnitalRingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (NonUnitalRingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
-but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_prod_map NonUnitalRingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
rfl
#align non_unital_ring_hom.coe_prod_map NonUnitalRingHom.coe_prodMap
-/- warning: non_unital_ring_hom.prod_comp_prod_map -> NonUnitalRingHom.prod_comp_prodMap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} {T : Type.{u5}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'] [_inst_5 : NonUnitalNonAssocSemiring.{u5} T] (f : NonUnitalRingHom.{u5, u1} T R _inst_5 _inst_1) (g : NonUnitalRingHom.{u5, u3} T S _inst_5 _inst_2) (f' : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (g' : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ u5) (succ (max u2 u4))} (NonUnitalRingHom.{u5, max u2 u4} T (Prod.{u2, u4} R' S') _inst_5 (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.comp.{u5, max u1 u3, max u2 u4} T (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') _inst_5 (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4) (NonUnitalRingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f' g') (NonUnitalRingHom.prod.{u5, u1, u3} T R S _inst_5 _inst_1 _inst_2 f g)) (NonUnitalRingHom.prod.{u5, u2, u4} T R' S' _inst_5 _inst_3 _inst_4 (NonUnitalRingHom.comp.{u5, u1, u2} T R R' _inst_5 _inst_1 _inst_3 f' f) (NonUnitalRingHom.comp.{u5, u3, u4} T S S' _inst_5 _inst_2 _inst_4 g' g))
-but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u1}} {T : Type.{u5}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] [_inst_5 : NonUnitalNonAssocSemiring.{u5} T] (f : NonUnitalRingHom.{u5, u4} T R _inst_5 _inst_1) (g : NonUnitalRingHom.{u5, u3} T S _inst_5 _inst_2) (f' : NonUnitalRingHom.{u4, u2} R R' _inst_1 _inst_3) (g' : NonUnitalRingHom.{u3, u1} S S' _inst_2 _inst_4), Eq.{max (max (succ u2) (succ u1)) (succ u5)} (NonUnitalRingHom.{u5, max u2 u1} T (Prod.{u2, u1} R' S') _inst_5 (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.comp.{u5, max u4 u3, max u2 u1} T (Prod.{u4, u3} R S) (Prod.{u2, u1} R' S') _inst_5 (Prod.instNonUnitalNonAssocSemiringProd.{u4, u3} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.prodMap.{u4, u2, u3, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f' g') (NonUnitalRingHom.prod.{u5, u4, u3} T R S _inst_5 _inst_1 _inst_2 f g)) (NonUnitalRingHom.prod.{u5, u2, u1} T R' S' _inst_5 _inst_3 _inst_4 (NonUnitalRingHom.comp.{u5, u4, u2} T R R' _inst_5 _inst_1 _inst_3 f' f) (NonUnitalRingHom.comp.{u5, u3, u1} T S S' _inst_5 _inst_2 _inst_4 g' g))
-Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_comp_prod_map NonUnitalRingHom.prod_comp_prodMapₓ'. -/
theorem prod_comp_prodMap (f : T →ₙ+* R) (g : T →ₙ+* S) (f' : R →ₙ+* R') (g' : S →ₙ+* S') :
(f'.Prod_map g').comp (f.Prod g) = (f'.comp f).Prod (g'.comp g) :=
rfl
@@ -259,23 +181,11 @@ namespace RingHom
variable (R S) [NonAssocSemiring R] [NonAssocSemiring S]
-/- warning: ring_hom.fst -> RingHom.fst is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], RingHom.{max u2 u1, u1} (Prod.{u1, u2} R S) R (Prod.instNonAssocSemiringProd.{u1, u2} R S _inst_1 _inst_2) _inst_1
-Case conversion may be inaccurate. Consider using '#align ring_hom.fst RingHom.fstₓ'. -/
/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`.-/
def fst : R × S →+* R :=
{ MonoidHom.fst R S, AddMonoidHom.fst R S with toFun := Prod.fst }
#align ring_hom.fst RingHom.fst
-/- warning: ring_hom.snd -> RingHom.snd is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], RingHom.{max u2 u1, u2} (Prod.{u1, u2} R S) S (Prod.instNonAssocSemiringProd.{u1, u2} R S _inst_1 _inst_2) _inst_2
-Case conversion may be inaccurate. Consider using '#align ring_hom.snd RingHom.sndₓ'. -/
/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`.-/
def snd : R × S →+* S :=
{ MonoidHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
@@ -283,23 +193,11 @@ def snd : R × S →+* S :=
variable {R S}
-/- warning: ring_hom.coe_fst -> RingHom.coe_fst is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (RingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (RingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
-Case conversion may be inaccurate. Consider using '#align ring_hom.coe_fst RingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
rfl
#align ring_hom.coe_fst RingHom.coe_fst
-/- warning: ring_hom.coe_snd -> RingHom.coe_snd is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (RingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (RingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
-Case conversion may be inaccurate. Consider using '#align ring_hom.coe_snd RingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
rfl
@@ -309,12 +207,6 @@ section Prod
variable [NonAssocSemiring T] (f : R →+* S) (g : R →+* T)
-/- warning: ring_hom.prod -> RingHom.prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T], (RingHom.{u1, u2} R S _inst_1 _inst_2) -> (RingHom.{u1, u3} R T _inst_1 _inst_3) -> (RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T], (RingHom.{u1, u2} R S _inst_1 _inst_2) -> (RingHom.{u1, u3} R T _inst_1 _inst_3) -> (RingHom.{u1, max u3 u2} R (Prod.{u2, u3} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u2, u3} S T _inst_2 _inst_3))
-Case conversion may be inaccurate. Consider using '#align ring_hom.prod RingHom.prodₓ'. -/
/-- Combine two ring homomorphisms `f : R →+* S`, `g : R →+* T` into `f.prod g : R →+* S × T`
given by `(f.prod g) x = (f x, g x)` -/
protected def prod (f : R →+* S) (g : R →+* T) : R →+* S × T :=
@@ -322,45 +214,21 @@ protected def prod (f : R →+* S) (g : R →+* T) : R →+* S × T :=
toFun := fun x => (f x, g x) }
#align ring_hom.prod RingHom.prod
-/- warning: ring_hom.prod_apply -> RingHom.prod_apply is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, u2} R S _inst_1 _inst_2) (g : RingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (RingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : RingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (RingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : RingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (RingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
-Case conversion may be inaccurate. Consider using '#align ring_hom.prod_apply RingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
rfl
#align ring_hom.prod_apply RingHom.prod_apply
-/- warning: ring_hom.fst_comp_prod -> RingHom.fst_comp_prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, u2} R S _inst_1 _inst_2) (g : RingHom.{u1, u3} R T _inst_1 _inst_3), Eq.{max (succ u1) (succ u2)} (RingHom.{u1, u2} R S _inst_1 _inst_2) (RingHom.comp.{u1, max u2 u3, u2} R (Prod.{u2, u3} S T) S _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_2 (RingHom.fst.{u2, u3} S T _inst_2 _inst_3) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g)) f
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {T : Type.{u1}} [_inst_1 : NonAssocSemiring.{u3} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u1} T] (f : RingHom.{u3, u2} R S _inst_1 _inst_2) (g : RingHom.{u3, u1} R T _inst_1 _inst_3), Eq.{max (succ u3) (succ u2)} (RingHom.{u3, u2} R S _inst_1 _inst_2) (RingHom.comp.{u3, max u2 u1, u2} R (Prod.{u2, u1} S T) S _inst_1 (Prod.instNonAssocSemiringProd.{u2, u1} S T _inst_2 _inst_3) _inst_2 (RingHom.fst.{u2, u1} S T _inst_2 _inst_3) (RingHom.prod.{u3, u2, u1} R S T _inst_1 _inst_2 _inst_3 f g)) f
-Case conversion may be inaccurate. Consider using '#align ring_hom.fst_comp_prod RingHom.fst_comp_prodₓ'. -/
@[simp]
theorem fst_comp_prod : (fst S T).comp (f.Prod g) = f :=
ext fun x => rfl
#align ring_hom.fst_comp_prod RingHom.fst_comp_prod
-/- warning: ring_hom.snd_comp_prod -> RingHom.snd_comp_prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, u2} R S _inst_1 _inst_2) (g : RingHom.{u1, u3} R T _inst_1 _inst_3), Eq.{max (succ u1) (succ u3)} (RingHom.{u1, u3} R T _inst_1 _inst_3) (RingHom.comp.{u1, max u2 u3, u3} R (Prod.{u2, u3} S T) T _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_3 (RingHom.snd.{u2, u3} S T _inst_2 _inst_3) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g)) g
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u1}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u3} R] [_inst_2 : NonAssocSemiring.{u1} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u3, u1} R S _inst_1 _inst_2) (g : RingHom.{u3, u2} R T _inst_1 _inst_3), Eq.{max (succ u3) (succ u2)} (RingHom.{u3, u2} R T _inst_1 _inst_3) (RingHom.comp.{u3, max u1 u2, u2} R (Prod.{u1, u2} S T) T _inst_1 (Prod.instNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3) _inst_3 (RingHom.snd.{u1, u2} S T _inst_2 _inst_3) (RingHom.prod.{u3, u1, u2} R S T _inst_1 _inst_2 _inst_3 f g)) g
-Case conversion may be inaccurate. Consider using '#align ring_hom.snd_comp_prod RingHom.snd_comp_prodₓ'. -/
@[simp]
theorem snd_comp_prod : (snd S T).comp (f.Prod g) = g :=
ext fun x => rfl
#align ring_hom.snd_comp_prod RingHom.snd_comp_prod
-/- warning: ring_hom.prod_unique -> RingHom.prod_unique is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)), Eq.{max (succ u1) (succ (max u2 u3))} (RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 (RingHom.comp.{u1, max u2 u3, u2} R (Prod.{u2, u3} S T) S _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_2 (RingHom.fst.{u2, u3} S T _inst_2 _inst_3) f) (RingHom.comp.{u1, max u2 u3, u3} R (Prod.{u2, u3} S T) T _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3) _inst_3 (RingHom.snd.{u2, u3} S T _inst_2 _inst_3) f)) f
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u1}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u3} R] [_inst_2 : NonAssocSemiring.{u1} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u3, max u2 u1} R (Prod.{u1, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3)), Eq.{max (max (succ u3) (succ u1)) (succ u2)} (RingHom.{u3, max u2 u1} R (Prod.{u1, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3)) (RingHom.prod.{u3, u1, u2} R S T _inst_1 _inst_2 _inst_3 (RingHom.comp.{u3, max u1 u2, u1} R (Prod.{u1, u2} S T) S _inst_1 (Prod.instNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3) _inst_2 (RingHom.fst.{u1, u2} S T _inst_2 _inst_3) f) (RingHom.comp.{u3, max u1 u2, u2} R (Prod.{u1, u2} S T) T _inst_1 (Prod.instNonAssocSemiringProd.{u1, u2} S T _inst_2 _inst_3) _inst_3 (RingHom.snd.{u1, u2} S T _inst_2 _inst_3) f)) f
-Case conversion may be inaccurate. Consider using '#align ring_hom.prod_unique RingHom.prod_uniqueₓ'. -/
theorem prod_unique (f : R →+* S × T) : ((fst S T).comp f).Prod ((snd S T).comp f) = f :=
ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
#align ring_hom.prod_unique RingHom.prod_unique
@@ -373,44 +241,20 @@ variable [NonAssocSemiring R'] [NonAssocSemiring S'] [NonAssocSemiring T]
variable (f : R →+* R') (g : S →+* S')
-/- warning: ring_hom.prod_map -> RingHom.prodMap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'], (RingHom.{u1, u2} R R' _inst_1 _inst_3) -> (RingHom.{u3, u4} S S' _inst_2 _inst_4) -> (RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4))
-but is expected to have type
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'], (RingHom.{u1, u2} R R' _inst_1 _inst_3) -> (RingHom.{u3, u4} S S' _inst_2 _inst_4) -> (RingHom.{max u3 u1, max u4 u2} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.instNonAssocSemiringProd.{u1, u3} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u2, u4} R' S' _inst_3 _inst_4))
-Case conversion may be inaccurate. Consider using '#align ring_hom.prod_map RingHom.prodMapₓ'. -/
/-- `prod.map` as a `ring_hom`. -/
def prodMap : R × S →+* R' × S' :=
(f.comp (fst R S)).Prod (g.comp (snd R S))
#align ring_hom.prod_map RingHom.prodMap
-/- warning: ring_hom.prod_map_def -> RingHom.prodMap_def is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'] (f : RingHom.{u1, u2} R R' _inst_1 _inst_3) (g : RingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} (RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (RingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g) (RingHom.prod.{max u1 u3, u2, u4} (Prod.{u1, u3} R S) R' S' (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) _inst_3 _inst_4 (RingHom.comp.{max u1 u3, u1, u2} (Prod.{u1, u3} R S) R R' (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) _inst_1 _inst_3 f (RingHom.fst.{u1, u3} R S _inst_1 _inst_2)) (RingHom.comp.{max u1 u3, u3, u4} (Prod.{u1, u3} R S) S S' (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) _inst_2 _inst_4 g (RingHom.snd.{u1, u3} R S _inst_1 _inst_2)))
-but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g) (RingHom.prod.{max u4 u2, u3, u1} (Prod.{u4, u2} R S) R' S' (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) _inst_3 _inst_4 (RingHom.comp.{max u4 u2, u4, u3} (Prod.{u4, u2} R S) R R' (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) _inst_1 _inst_3 f (RingHom.fst.{u4, u2} R S _inst_1 _inst_2)) (RingHom.comp.{max u4 u2, u2, u1} (Prod.{u4, u2} R S) S S' (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) _inst_2 _inst_4 g (RingHom.snd.{u4, u2} R S _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align ring_hom.prod_map_def RingHom.prodMap_defₓ'. -/
theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :=
rfl
#align ring_hom.prod_map_def RingHom.prodMap_def
-/- warning: ring_hom.coe_prod_map -> RingHom.coe_prodMap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'] (f : RingHom.{u1, u2} R R' _inst_1 _inst_3) (g : RingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (RingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (RingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : RingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (RingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (RingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : RingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (RingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
-but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
-Case conversion may be inaccurate. Consider using '#align ring_hom.coe_prod_map RingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
rfl
#align ring_hom.coe_prod_map RingHom.coe_prodMap
-/- warning: ring_hom.prod_comp_prod_map -> RingHom.prod_comp_prodMap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} {T : Type.{u5}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'] [_inst_5 : NonAssocSemiring.{u5} T] (f : RingHom.{u5, u1} T R _inst_5 _inst_1) (g : RingHom.{u5, u3} T S _inst_5 _inst_2) (f' : RingHom.{u1, u2} R R' _inst_1 _inst_3) (g' : RingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ u5) (succ (max u2 u4))} (RingHom.{u5, max u2 u4} T (Prod.{u2, u4} R' S') _inst_5 (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (RingHom.comp.{u5, max u1 u3, max u2 u4} T (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') _inst_5 (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4) (RingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f' g') (RingHom.prod.{u5, u1, u3} T R S _inst_5 _inst_1 _inst_2 f g)) (RingHom.prod.{u5, u2, u4} T R' S' _inst_5 _inst_3 _inst_4 (RingHom.comp.{u5, u1, u2} T R R' _inst_5 _inst_1 _inst_3 f' f) (RingHom.comp.{u5, u3, u4} T S S' _inst_5 _inst_2 _inst_4 g' g))
-but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u1}} {T : Type.{u5}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u1} S'] [_inst_5 : NonAssocSemiring.{u5} T] (f : RingHom.{u5, u4} T R _inst_5 _inst_1) (g : RingHom.{u5, u3} T S _inst_5 _inst_2) (f' : RingHom.{u4, u2} R R' _inst_1 _inst_3) (g' : RingHom.{u3, u1} S S' _inst_2 _inst_4), Eq.{max (max (succ u2) (succ u1)) (succ u5)} (RingHom.{u5, max u2 u1} T (Prod.{u2, u1} R' S') _inst_5 (Prod.instNonAssocSemiringProd.{u2, u1} R' S' _inst_3 _inst_4)) (RingHom.comp.{u5, max u4 u3, max u2 u1} T (Prod.{u4, u3} R S) (Prod.{u2, u1} R' S') _inst_5 (Prod.instNonAssocSemiringProd.{u4, u3} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u2, u1} R' S' _inst_3 _inst_4) (RingHom.prodMap.{u4, u2, u3, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f' g') (RingHom.prod.{u5, u4, u3} T R S _inst_5 _inst_1 _inst_2 f g)) (RingHom.prod.{u5, u2, u1} T R' S' _inst_5 _inst_3 _inst_4 (RingHom.comp.{u5, u4, u2} T R R' _inst_5 _inst_1 _inst_3 f' f) (RingHom.comp.{u5, u3, u1} T S S' _inst_5 _inst_2 _inst_4 g' g))
-Case conversion may be inaccurate. Consider using '#align ring_hom.prod_comp_prod_map RingHom.prod_comp_prodMapₓ'. -/
theorem prod_comp_prodMap (f : T →+* R) (g : T →+* S) (f' : R →+* R') (g' : S →+* S') :
(f'.Prod_map g').comp (f.Prod g) = (f'.comp f).Prod (g'.comp g) :=
rfl
@@ -424,45 +268,27 @@ namespace RingEquiv
variable {R S} [NonAssocSemiring R] [NonAssocSemiring S]
-/- warning: ring_equiv.prod_comm -> RingEquiv.prodComm is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], RingEquiv.{max u2 u1, max u1 u2} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.instMulProd.{u1, u2} R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Prod.instMulProd.{u2, u1} S R (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Prod.instAddSum.{u1, u2} R S (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.instAddSum.{u2, u1} S R (Distrib.toAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align ring_equiv.prod_comm RingEquiv.prodCommₓ'. -/
/-- Swapping components as an equivalence of (semi)rings. -/
def prodComm : R × S ≃+* S × R :=
{ AddEquiv.prodComm, MulEquiv.prodComm with }
#align ring_equiv.prod_comm RingEquiv.prodComm
-/- warning: ring_equiv.coe_prod_comm -> RingEquiv.coe_prod_comm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_commₓ'. -/
@[simp]
theorem coe_prod_comm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
rfl
#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_comm
-/- warning: ring_equiv.coe_prod_comm_symm -> RingEquiv.coe_prod_comm_symm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symmₓ'. -/
@[simp]
theorem coe_prod_comm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
rfl
#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symm
-/- warning: ring_equiv.fst_comp_coe_prod_comm -> RingEquiv.fst_comp_coe_prod_comm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_commₓ'. -/
@[simp]
theorem fst_comp_coe_prod_comm :
(RingHom.fst S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.snd R S :=
RingHom.ext fun _ => rfl
#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_comm
-/- warning: ring_equiv.snd_comp_coe_prod_comm -> RingEquiv.snd_comp_coe_prod_comm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_commₓ'. -/
@[simp]
theorem snd_comp_coe_prod_comm :
(RingHom.snd S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.fst R S :=
@@ -471,12 +297,6 @@ theorem snd_comp_coe_prod_comm :
variable (R S) [Subsingleton S]
-/- warning: ring_equiv.prod_zero_ring -> RingEquiv.prodZeroRing is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : Subsingleton.{succ u2} S], RingEquiv.{u1, max u1 u2} R (Prod.{u1, u2} R S) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))))
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : Subsingleton.{succ u2} S], RingEquiv.{u1, max u2 u1} R (Prod.{u1, u2} R S) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (Prod.instMulProd.{u1, u2} R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Prod.instAddSum.{u1, u2} R S (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))))
-Case conversion may be inaccurate. Consider using '#align ring_equiv.prod_zero_ring RingEquiv.prodZeroRingₓ'. -/
/-- A ring `R` is isomorphic to `R × S` when `S` is the zero ring -/
@[simps]
def prodZeroRing : R ≃+* R × S where
@@ -488,12 +308,6 @@ def prodZeroRing : R ≃+* R × S where
right_inv x := by cases x <;> simp
#align ring_equiv.prod_zero_ring RingEquiv.prodZeroRing
-/- warning: ring_equiv.zero_ring_prod -> RingEquiv.zeroRingProd is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : Subsingleton.{succ u2} S], RingEquiv.{u1, max u2 u1} R (Prod.{u2, u1} S R) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : Subsingleton.{succ u2} S], RingEquiv.{u1, max u1 u2} R (Prod.{u2, u1} S R) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (Prod.instMulProd.{u2, u1} S R (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Prod.instAddSum.{u2, u1} S R (Distrib.toAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align ring_equiv.zero_ring_prod RingEquiv.zeroRingProdₓ'. -/
/-- A ring `R` is isomorphic to `S × R` when `S` is the zero ring -/
@[simps]
def zeroRingProd : R ≃+* S × R where
@@ -507,12 +321,6 @@ def zeroRingProd : R ≃+* S × R where
end RingEquiv
-/- warning: false_of_nontrivial_of_product_domain -> false_of_nontrivial_of_product_domain is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : Ring.{u1} R] [_inst_2 : Ring.{u2} S] [_inst_3 : IsDomain.{max u1 u2} (Prod.{u1, u2} R S) (Prod.semiring.{u1, u2} R S (Ring.toSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S _inst_2))] [_inst_4 : Nontrivial.{u1} R] [_inst_5 : Nontrivial.{u2} S], False
-but is expected to have type
- forall (R : Type.{u2}) (S : Type.{u1}) [_inst_1 : Ring.{u2} R] [_inst_2 : Ring.{u1} S] [_inst_3 : IsDomain.{max u1 u2} (Prod.{u2, u1} R S) (Prod.instSemiringProd.{u2, u1} R S (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u1} S _inst_2))] [_inst_4 : Nontrivial.{u2} R] [_inst_5 : Nontrivial.{u1} S], False
-Case conversion may be inaccurate. Consider using '#align false_of_nontrivial_of_product_domain false_of_nontrivial_of_product_domainₓ'. -/
/-- The product of two nontrivial rings is not a domain -/
theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [IsDomain (R × S)]
[Nontrivial R] [Nontrivial S] : False :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -436,10 +436,7 @@ def prodComm : R × S ≃+* S × R :=
#align ring_equiv.prod_comm RingEquiv.prodComm
/- warning: ring_equiv.coe_prod_comm -> RingEquiv.coe_prod_comm is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ (max u2 u1))} ((Prod.{u1, u2} R S) -> (Prod.{u2, u1} S R)) (coeFn.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (fun (_x : RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) => (Prod.{u1, u2} R S) -> (Prod.{u2, u1} S R)) (RingEquiv.hasCoeToFun.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingEquiv.prodComm.{u1, u2} R S _inst_1 _inst_2)) (Prod.swap.{u1, u2} R S)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Prod.{u2, u1} R S) => Prod.{u1, u2} S R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Prod.{u2, u1} R S) => Prod.{u1, u2} S R) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (MulEquivClass.toEquivLike.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (RingEquivClass.toMulEquivClass.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (RingEquiv.instRingEquivClassRingEquiv.{max u2 u1, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))))))) (RingEquiv.prodComm.{u2, u1} R S _inst_1 _inst_2)) (Prod.swap.{u2, u1} R S)
+<too large>
Case conversion may be inaccurate. Consider using '#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_commₓ'. -/
@[simp]
theorem coe_prod_comm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
@@ -447,10 +444,7 @@ theorem coe_prod_comm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_comm
/- warning: ring_equiv.coe_prod_comm_symm -> RingEquiv.coe_prod_comm_symm is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u2 u1)) (succ (max u1 u2))} ((Prod.{u2, u1} S R) -> (Prod.{u1, u2} R S)) (coeFn.{max (succ (max u2 u1)) (succ (max u1 u2)), max (succ (max u2 u1)) (succ (max u1 u2))} (RingEquiv.{max u2 u1, max u1 u2} (Prod.{u2, u1} S R) (Prod.{u1, u2} R S) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))))) (fun (_x : RingEquiv.{max u2 u1, max u1 u2} (Prod.{u2, u1} S R) (Prod.{u1, u2} R S) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))))) => (Prod.{u2, u1} S R) -> (Prod.{u1, u2} R S)) (RingEquiv.hasCoeToFun.{max u2 u1, max u1 u2} (Prod.{u2, u1} S R) (Prod.{u1, u2} R S) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))))) (RingEquiv.symm.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (RingEquiv.prodComm.{u1, u2} R S _inst_1 _inst_2))) (Prod.swap.{u2, u1} S R)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u1, u2} S R), (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Prod.{u1, u2} S R) => Prod.{u2, u1} R S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingEquiv.{max u2 u1, max u2 u1} (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))))) (Prod.{u1, u2} S R) (fun (_x : Prod.{u1, u2} S R) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Prod.{u1, u2} S R) => Prod.{u2, u1} R S) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingEquiv.{max u2 u1, max u2 u1} (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))))) (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (RingEquiv.{max u2 u1, max u2 u1} (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))))) (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (MulEquivClass.toEquivLike.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u2 u1, max u2 u1} (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))))) (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (RingEquivClass.toMulEquivClass.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u2 u1, max u2 u1} (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))))) (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (RingEquiv.instRingEquivClassRingEquiv.{max u2 u1, max u2 u1} (Prod.{u1, u2} S R) (Prod.{u2, u1} R S) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))))))))) (RingEquiv.symm.{max u2 u1, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))) (RingEquiv.prodComm.{u2, u1} R S _inst_1 _inst_2))) (Prod.swap.{u1, u2} S R)
+<too large>
Case conversion may be inaccurate. Consider using '#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symmₓ'. -/
@[simp]
theorem coe_prod_comm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
@@ -458,10 +452,7 @@ theorem coe_prod_comm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swa
#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symm
/- warning: ring_equiv.fst_comp_coe_prod_comm -> RingEquiv.fst_comp_coe_prod_comm is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} (RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (RingHom.comp.{max u1 u2, max u2 u1, u2} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1) _inst_2 (RingHom.fst.{u2, u1} S R _inst_2 _inst_1) ((fun (a : Sort.{max (succ (max u1 u2)) (succ (max u2 u1))}) (b : Sort.{max (succ (max u1 u2)) (succ (max u2 u1))}) [self : HasLiftT.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} a b] => self.0) (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingHom.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1)) (HasLiftT.mk.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingHom.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1)) (CoeTCₓ.coe.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingHom.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1)) (RingHom.hasCoeT.{max (max u1 u2) u2 u1, max u1 u2, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1) (RingEquivClass.toRingHomClass.{max (max u1 u2) u2 u1, max u1 u2, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1) (RingEquiv.ringEquivClass.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))))))) (RingEquiv.prodComm.{u1, u2} R S _inst_1 _inst_2))) (RingHom.snd.{u1, u2} R S _inst_1 _inst_2)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (RingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (RingHom.comp.{max u2 u1, max u2 u1, u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u1, u2} S R _inst_2 _inst_1) _inst_2 (RingHom.fst.{u1, u2} S R _inst_2 _inst_1) (RingHomClass.toRingHom.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u1, u2} S R _inst_2 _inst_1) (RingEquivClass.toRingHomClass.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u1, u2} S R _inst_2 _inst_1) (RingEquiv.instRingEquivClassRingEquiv.{max u2 u1, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))))) (RingEquiv.prodComm.{u2, u1} R S _inst_1 _inst_2))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)
+<too large>
Case conversion may be inaccurate. Consider using '#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_commₓ'. -/
@[simp]
theorem fst_comp_coe_prod_comm :
@@ -470,10 +461,7 @@ theorem fst_comp_coe_prod_comm :
#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_comm
/- warning: ring_equiv.snd_comp_coe_prod_comm -> RingEquiv.snd_comp_coe_prod_comm is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} (RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (RingHom.comp.{max u1 u2, max u2 u1, u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1) _inst_1 (RingHom.snd.{u2, u1} S R _inst_2 _inst_1) ((fun (a : Sort.{max (succ (max u1 u2)) (succ (max u2 u1))}) (b : Sort.{max (succ (max u1 u2)) (succ (max u2 u1))}) [self : HasLiftT.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} a b] => self.0) (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingHom.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1)) (HasLiftT.mk.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingHom.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1)) (CoeTCₓ.coe.{max (succ (max u1 u2)) (succ (max u2 u1)), max (succ (max u1 u2)) (succ (max u2 u1))} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (RingHom.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1)) (RingHom.hasCoeT.{max (max u1 u2) u2 u1, max u1 u2, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1) (RingEquivClass.toRingHomClass.{max (max u1 u2) u2 u1, max u1 u2, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))) (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u1} S R _inst_2 _inst_1) (RingEquiv.ringEquivClass.{max u1 u2, max u2 u1} (Prod.{u1, u2} R S) (Prod.{u2, u1} S R) (Prod.hasMul.{u1, u2} R S (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasAdd.{u1, u2} R S (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)))) (Prod.hasMul.{u2, u1} S R (Distrib.toHasMul.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) (Prod.hasAdd.{u2, u1} S R (Distrib.toHasAdd.{u2} S (NonUnitalNonAssocSemiring.toDistrib.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2))) (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))))))) (RingEquiv.prodComm.{u1, u2} R S _inst_1 _inst_2))) (RingHom.fst.{u1, u2} R S _inst_1 _inst_2)
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (RingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (RingHom.comp.{max u2 u1, max u2 u1, u2} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u1, u2} S R _inst_2 _inst_1) _inst_1 (RingHom.snd.{u1, u2} S R _inst_2 _inst_1) (RingHomClass.toRingHom.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u1, u2} S R _inst_2 _inst_1) (RingEquivClass.toRingHomClass.{max u2 u1, max u2 u1, max u2 u1} (RingEquiv.{max u1 u2, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))))) (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u1, u2} S R _inst_2 _inst_1) (RingEquiv.instRingEquivClassRingEquiv.{max u2 u1, max u2 u1} (Prod.{u2, u1} R S) (Prod.{u1, u2} S R) (Prod.instMulProd.{u2, u1} R S (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Prod.instMulProd.{u1, u2} S R (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Prod.instAddSum.{u2, u1} R S (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1))) (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)))) (Prod.instAddSum.{u1, u2} S R (Distrib.toAdd.{u1} S (NonUnitalNonAssocSemiring.toDistrib.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2))) (Distrib.toAdd.{u2} R (NonUnitalNonAssocSemiring.toDistrib.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)))))) (RingEquiv.prodComm.{u2, u1} R S _inst_1 _inst_2))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)
+<too large>
Case conversion may be inaccurate. Consider using '#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_commₓ'. -/
@[simp]
theorem snd_comp_coe_prod_comm :
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -122,7 +122,7 @@ variable {R S}
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (NonUnitalRingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_fst NonUnitalRingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
@@ -133,7 +133,7 @@ theorem coe_fst : ⇑(fst R S) = Prod.fst :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (NonUnitalRingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_snd NonUnitalRingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
@@ -161,7 +161,7 @@ protected def prod (f : R →ₙ+* S) (g : R →ₙ+* T) : R →ₙ+* S × T :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (NonUnitalRingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (NonUnitalRingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (NonUnitalRingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
+ forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_apply NonUnitalRingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
@@ -233,7 +233,7 @@ theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :
lean 3 declaration is
forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'] (f : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (NonUnitalRingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (NonUnitalRingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (NonUnitalRingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
+ forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_prod_map NonUnitalRingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
@@ -287,7 +287,7 @@ variable {R S}
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (RingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (RingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_fst RingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
@@ -298,7 +298,7 @@ theorem coe_fst : ⇑(fst R S) = Prod.fst :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (RingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (RingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_snd RingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
@@ -326,7 +326,7 @@ protected def prod (f : R →+* S) (g : R →+* T) : R →+* S × T :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, u2} R S _inst_1 _inst_2) (g : RingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (RingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : RingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (RingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : RingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (RingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
+ forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
Case conversion may be inaccurate. Consider using '#align ring_hom.prod_apply RingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
@@ -398,7 +398,7 @@ theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :
lean 3 declaration is
forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'] (f : RingHom.{u1, u2} R R' _inst_1 _inst_3) (g : RingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (RingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (RingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : RingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (RingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (RingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : RingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (RingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
+ forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_prod_map RingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -122,7 +122,7 @@ variable {R S}
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (NonUnitalRingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_fst NonUnitalRingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
@@ -133,7 +133,7 @@ theorem coe_fst : ⇑(fst R S) = Prod.fst :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (NonUnitalRingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_snd NonUnitalRingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
@@ -161,7 +161,7 @@ protected def prod (f : R →ₙ+* S) (g : R →ₙ+* T) : R →ₙ+* S × T :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (NonUnitalRingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (NonUnitalRingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (NonUnitalRingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
+ forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_apply NonUnitalRingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
@@ -233,7 +233,7 @@ theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :
lean 3 declaration is
forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'] (f : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (NonUnitalRingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (NonUnitalRingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (NonUnitalRingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
+ forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_prod_map NonUnitalRingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
@@ -287,7 +287,7 @@ variable {R S}
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (RingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (RingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_fst RingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
@@ -298,7 +298,7 @@ theorem coe_fst : ⇑(fst R S) = Prod.fst :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (RingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (RingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_snd RingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
@@ -326,7 +326,7 @@ protected def prod (f : R →+* S) (g : R →+* T) : R →+* S × T :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, u2} R S _inst_1 _inst_2) (g : RingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (RingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : RingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (RingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : RingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (RingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
+ forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
Case conversion may be inaccurate. Consider using '#align ring_hom.prod_apply RingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
@@ -398,7 +398,7 @@ theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :
lean 3 declaration is
forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'] (f : RingHom.{u1, u2} R R' _inst_1 _inst_3) (g : RingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (RingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (RingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : RingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (RingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (RingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : RingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (RingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
+ forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_prod_map RingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -122,7 +122,7 @@ variable {R S}
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : NonUnitalRingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (NonUnitalRingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u2} R _inst_1) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1))) (NonUnitalRingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_fst NonUnitalRingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
@@ -133,7 +133,7 @@ theorem coe_fst : ⇑(fst R S) = Prod.fst :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : NonUnitalRingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (NonUnitalRingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonUnitalNonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (NonUnitalRingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u2} R] [_inst_2 : NonUnitalNonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (NonUnitalRingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonUnitalNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2))) (NonUnitalRingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_snd NonUnitalRingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
@@ -161,7 +161,7 @@ protected def prod (f : R →ₙ+* S) (g : R →ₙ+* T) : R →ₙ+* S × T :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} T] (f : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (NonUnitalRingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonUnitalNonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (NonUnitalRingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : NonUnitalRingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (NonUnitalRingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (NonUnitalRingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
+ forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} T] (f : NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) (g : NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (NonUnitalRingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonUnitalNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)))) (NonUnitalRingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} S _inst_2) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (NonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u3} R S _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u2} T _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (NonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u1, u2} R T _inst_1 _inst_3))) g x))
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.prod_apply NonUnitalRingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
@@ -233,7 +233,7 @@ theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :
lean 3 declaration is
forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonUnitalNonAssocSemiring.{u1} R] [_inst_2 : NonUnitalNonAssocSemiring.{u3} S] [_inst_3 : NonUnitalNonAssocSemiring.{u2} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u4} S'] (f : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : NonUnitalRingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (NonUnitalRingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonUnitalNonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonUnitalNonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (NonUnitalRingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : NonUnitalRingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (NonUnitalRingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : NonUnitalRingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (NonUnitalRingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
+ forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonUnitalNonAssocSemiring.{u4} R] [_inst_2 : NonUnitalNonAssocSemiring.{u2} S] [_inst_3 : NonUnitalNonAssocSemiring.{u3} R'] [_inst_4 : NonUnitalNonAssocSemiring.{u1} S'] (f : NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) (g : NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (NonUnitalRingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonUnitalNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonUnitalNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)))) (NonUnitalRingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R _inst_1) (NonUnitalNonAssocSemiring.toMul.{u3} R' _inst_3) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (NonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u4, u3} R R' _inst_1 _inst_3))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S _inst_2) (NonUnitalNonAssocSemiring.toMul.{u1} S' _inst_4) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (NonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (NonUnitalRingHom.instNonUnitalRingHomClassNonUnitalRingHom.{u2, u1} S S' _inst_2 _inst_4))) g))
Case conversion may be inaccurate. Consider using '#align non_unital_ring_hom.coe_prod_map NonUnitalRingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
@@ -287,7 +287,7 @@ variable {R S}
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u1)} ((Prod.{u1, u2} R S) -> R) (coeFn.{max (succ (max u1 u2)) (succ u1), max (succ (max u1 u2)) (succ u1)} (RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (fun (_x : RingHom.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) => (Prod.{u1, u2} R S) -> R) (RingHom.hasCoeToFun.{max u1 u2, u1} (Prod.{u1, u2} R S) R (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_1) (RingHom.fst.{u1, u2} R S _inst_1 _inst_2)) (Prod.fst.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => R) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R _inst_1) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u2} (RingHom.{max u1 u2, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1) (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1 (RingHom.instRingHomClassRingHom.{max u2 u1, u2} (Prod.{u2, u1} R S) R (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_1)))) (RingHom.fst.{u2, u1} R S _inst_1 _inst_2)) (Prod.fst.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_fst RingHom.coe_fstₓ'. -/
@[simp]
theorem coe_fst : ⇑(fst R S) = Prod.fst :=
@@ -298,7 +298,7 @@ theorem coe_fst : ⇑(fst R S) = Prod.fst :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S], Eq.{max (succ (max u1 u2)) (succ u2)} ((Prod.{u1, u2} R S) -> S) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (fun (_x : RingHom.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) => (Prod.{u1, u2} R S) -> S) (RingHom.hasCoeToFun.{max u1 u2, u2} (Prod.{u1, u2} R S) S (Prod.nonAssocSemiring.{u1, u2} R S _inst_1 _inst_2) _inst_2) (RingHom.snd.{u1, u2} R S _inst_1 _inst_2)) (Prod.snd.{u1, u2} R S)
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_1 : NonAssocSemiring.{u2} R] [_inst_2 : NonAssocSemiring.{u1} S], Eq.{max (succ u2) (succ u1)} (forall (ᾰ : Prod.{u2, u1} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) (fun (_x : Prod.{u2, u1} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u2, u1} R S) => S) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonUnitalNonAssocSemiring.toMul.{max u2 u1} (Prod.{u2, u1} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{u1} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u2 u1} (Prod.{u2, u1} R S) (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, max u2 u1, u1} (RingHom.{max u1 u2, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2) (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2 (RingHom.instRingHomClassRingHom.{max u2 u1, u1} (Prod.{u2, u1} R S) S (Prod.instNonAssocSemiringProd.{u2, u1} R S _inst_1 _inst_2) _inst_2)))) (RingHom.snd.{u2, u1} R S _inst_1 _inst_2)) (Prod.snd.{u2, u1} R S)
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_snd RingHom.coe_sndₓ'. -/
@[simp]
theorem coe_snd : ⇑(snd R S) = Prod.snd :=
@@ -326,7 +326,7 @@ protected def prod (f : R →+* S) (g : R →+* T) : R →+* S × T :=
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {T : Type.{u3}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} T] (f : RingHom.{u1, u2} R S _inst_1 _inst_2) (g : RingHom.{u1, u3} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u2) (succ u3)} (Prod.{u2, u3} S T) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (fun (_x : RingHom.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) => R -> (Prod.{u2, u3} S T)) (RingHom.hasCoeToFun.{u1, max u2 u3} R (Prod.{u2, u3} S T) _inst_1 (Prod.nonAssocSemiring.{u2, u3} S T _inst_2 _inst_3)) (RingHom.prod.{u1, u2, u3} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u2, u3} S T (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S _inst_1 _inst_2) (fun (_x : RingHom.{u1, u2} R S _inst_1 _inst_2) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S _inst_1 _inst_2) f x) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (RingHom.{u1, u3} R T _inst_1 _inst_3) (fun (_x : RingHom.{u1, u3} R T _inst_1 _inst_3) => R -> T) (RingHom.hasCoeToFun.{u1, u3} R T _inst_1 _inst_3) g x))
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
+ forall {R : Type.{u1}} {S : Type.{u3}} {T : Type.{u2}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} T] (f : RingHom.{u1, u3} R S _inst_1 _inst_2) (g : RingHom.{u1, u2} R T _inst_1 _inst_3) (x : R), Eq.{max (succ u3) (succ u2)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) x) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u2), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => Prod.{u3, u2} S T) _x) (MulHomClass.toFunLike.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))) (NonUnitalRingHomClass.toMulHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (Prod.{u3, u2} S T) (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) (RingHomClass.toNonUnitalRingHomClass.{max (max u1 u3) u2, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3)) R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (Prod.{u3, u2} S T) _inst_1 (Prod.instNonAssocSemiringProd.{u3, u2} S T _inst_2 _inst_3))))) (RingHom.prod.{u1, u3, u2} R S T _inst_1 _inst_2 _inst_3 f g) x) (Prod.mk.{u3, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} S _inst_2) (RingHomClass.toNonUnitalRingHomClass.{max u1 u3, u1, u3} (RingHom.{u1, u3} R S _inst_1 _inst_2) R S _inst_1 _inst_2 (RingHom.instRingHomClassRingHom.{u1, u3} R S _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => T) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u2} T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} T _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R T _inst_1 _inst_3) R T _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u1, u2} R T _inst_1 _inst_3)))) g x))
Case conversion may be inaccurate. Consider using '#align ring_hom.prod_apply RingHom.prod_applyₓ'. -/
@[simp]
theorem prod_apply (x) : f.Prod g x = (f x, g x) :=
@@ -398,7 +398,7 @@ theorem prodMap_def : prodMap f g = (f.comp (fst R S)).Prod (g.comp (snd R S)) :
lean 3 declaration is
forall {R : Type.{u1}} {R' : Type.{u2}} {S : Type.{u3}} {S' : Type.{u4}} [_inst_1 : NonAssocSemiring.{u1} R] [_inst_2 : NonAssocSemiring.{u3} S] [_inst_3 : NonAssocSemiring.{u2} R'] [_inst_4 : NonAssocSemiring.{u4} S'] (f : RingHom.{u1, u2} R R' _inst_1 _inst_3) (g : RingHom.{u3, u4} S S' _inst_2 _inst_4), Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} ((Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (coeFn.{max (succ (max u1 u3)) (succ (max u2 u4)), max (succ (max u1 u3)) (succ (max u2 u4))} (RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (fun (_x : RingHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) => (Prod.{u1, u3} R S) -> (Prod.{u2, u4} R' S')) (RingHom.hasCoeToFun.{max u1 u3, max u2 u4} (Prod.{u1, u3} R S) (Prod.{u2, u4} R' S') (Prod.nonAssocSemiring.{u1, u3} R S _inst_1 _inst_2) (Prod.nonAssocSemiring.{u2, u4} R' S' _inst_3 _inst_4)) (RingHom.prodMap.{u1, u2, u3, u4} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u1, u2, u3, u4} R R' S S' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R R' _inst_1 _inst_3) (fun (_x : RingHom.{u1, u2} R R' _inst_1 _inst_3) => R -> R') (RingHom.hasCoeToFun.{u1, u2} R R' _inst_1 _inst_3) f) (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (RingHom.{u3, u4} S S' _inst_2 _inst_4) (fun (_x : RingHom.{u3, u4} S S' _inst_2 _inst_4) => S -> S') (RingHom.hasCoeToFun.{u3, u4} S S' _inst_2 _inst_4) g))
but is expected to have type
- forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
+ forall {R : Type.{u4}} {R' : Type.{u3}} {S : Type.{u2}} {S' : Type.{u1}} [_inst_1 : NonAssocSemiring.{u4} R] [_inst_2 : NonAssocSemiring.{u2} S] [_inst_3 : NonAssocSemiring.{u3} R'] [_inst_4 : NonAssocSemiring.{u1} S'] (f : RingHom.{u4, u3} R R' _inst_1 _inst_3) (g : RingHom.{u2, u1} S S' _inst_2 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (forall (ᾰ : Prod.{u4, u2} R S), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') ᾰ) (FunLike.coe.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1), max (succ u4) (succ u2), max (succ u3) (succ u1)} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (fun (_x : Prod.{u4, u2} R S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Prod.{u4, u2} R S) => Prod.{u3, u1} R' S') _x) (MulHomClass.toFunLike.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonUnitalNonAssocSemiring.toMul.{max u4 u2} (Prod.{u4, u2} R S) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2))) (NonUnitalNonAssocSemiring.toMul.{max u3 u1} (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))) (NonUnitalRingHomClass.toMulHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u4 u2} (Prod.{u4, u2} R S) (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2)) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u1} (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (RingHomClass.toNonUnitalRingHomClass.{max (max (max u4 u3) u2) u1, max u4 u2, max u3 u1} (RingHom.{max u2 u4, max u1 u3} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4)) (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4) (RingHom.instRingHomClassRingHom.{max u4 u2, max u3 u1} (Prod.{u4, u2} R S) (Prod.{u3, u1} R' S') (Prod.instNonAssocSemiringProd.{u4, u2} R S _inst_1 _inst_2) (Prod.instNonAssocSemiringProd.{u3, u1} R' S' _inst_3 _inst_4))))) (RingHom.prodMap.{u4, u3, u2, u1} R R' S S' _inst_1 _inst_2 _inst_3 _inst_4 f g)) (Prod.map.{u4, u3, u2, u1} R R' S S' (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => R') _x) (MulHomClass.toFunLike.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonUnitalNonAssocSemiring.toMul.{u4} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{u3} R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3)) (NonUnitalRingHomClass.toMulHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u4} R _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R' _inst_3) (RingHomClass.toNonUnitalRingHomClass.{max u4 u3, u4, u3} (RingHom.{u4, u3} R R' _inst_1 _inst_3) R R' _inst_1 _inst_3 (RingHom.instRingHomClassRingHom.{u4, u3} R R' _inst_1 _inst_3)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S (fun (_x : S) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : S) => S') _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toMul.{u1} S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4)) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S _inst_2) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} S' _inst_4) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} S S' _inst_2 _inst_4) S S' _inst_2 _inst_4 (RingHom.instRingHomClassRingHom.{u2, u1} S S' _inst_2 _inst_4)))) g))
Case conversion may be inaccurate. Consider using '#align ring_hom.coe_prod_map RingHom.coe_prodMapₓ'. -/
@[simp]
theorem coe_prodMap : ⇑(prodMap f g) = Prod.map f g :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -106,12 +106,12 @@ namespace NonUnitalRingHom
variable (R S) [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S]
-/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`.-/
+/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`. -/
def fst : R × S →ₙ+* R :=
{ MulHom.fst R S, AddMonoidHom.fst R S with toFun := Prod.fst }
#align non_unital_ring_hom.fst NonUnitalRingHom.fst
-/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`.-/
+/-- Given non-unital semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`. -/
def snd : R × S →ₙ+* S :=
{ MulHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
#align non_unital_ring_hom.snd NonUnitalRingHom.snd
@@ -192,12 +192,12 @@ namespace RingHom
variable (R S) [NonAssocSemiring R] [NonAssocSemiring S]
-/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`.-/
+/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `R`. -/
def fst : R × S →+* R :=
{ MonoidHom.fst R S, AddMonoidHom.fst R S with toFun := Prod.fst }
#align ring_hom.fst RingHom.fst
-/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`.-/
+/-- Given semirings `R`, `S`, the natural projection homomorphism from `R × S` to `S`. -/
def snd : R × S →+* S :=
{ MonoidHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
#align ring_hom.snd RingHom.snd
Mostly automatic, with a few manual corrections.
@@ -312,7 +312,7 @@ section
variable (R R' S S')
-/-- Four-way commutativity of `prod`. The name matches `mul_mul_mul_comm`. -/
+/-- Four-way commutativity of `Prod`. The name matches `mul_mul_mul_comm`. -/
@[simps apply]
def prodProdProdComm : (R × R') × S × S' ≃+* (R × S) × R' × S' :=
{ AddEquiv.prodProdProdComm R R' S S', MulEquiv.prodProdProdComm R R' S S' with
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -163,7 +163,6 @@ end Prod
section Prod_map
variable [NonUnitalNonAssocSemiring R'] [NonUnitalNonAssocSemiring S'] [NonUnitalNonAssocSemiring T]
-
variable (f : R →ₙ+* R') (g : S →ₙ+* S')
/-- `Prod.map` as a `NonUnitalRingHom`. -/
@@ -253,7 +252,6 @@ end Prod
section Prod_map
variable [NonAssocSemiring R'] [NonAssocSemiring S'] [NonAssocSemiring T]
-
variable (f : R →+* R') (g : S →+* S')
/-- `Prod.map` as a `RingHom`. -/
Prove isSemisimple_of_mem_adjoin
: if two commuting endomorphisms of a finite-dimensional vector space over a perfect field are both semisimple, then every endomorphism in the algebra generated by them (in particular their product and sum) is semisimple.
In the same file LinearAlgebra/Semisimple.lean, eq_zero_of_isNilpotent_isSemisimple
and isSemisimple_of_squarefree_aeval_eq_zero
are golfed, and IsSemisimple.minpoly_squarefree
is proved
RingTheory/SimpleModule.lean:
Define IsSemisimpleRing R
to mean that R is a semisimple R-module.
add properties of simple modules and a characterization (they are exactly the quotients of the ring by maximal left ideals).
The annihilator of a semisimple module is a radical ideal.
Any module over a semisimple ring is semisimple.
A finite product of semisimple rings is semisimple.
Any quotient of a semisimple ring is semisimple.
Add Artin--Wedderburn as a TODO (proof_wanted).
Order/Atoms.lean: add the instance from IsSimpleOrder
to ComplementedLattice
, so that IsSimpleModule → IsSemisimpleModule
is automatically inferred.
Prerequisites for showing a product of semisimple rings is semisimple:
Algebra/Module/Submodule/Map.lean: generalize orderIsoMapComap
so that it only requires RingHomSurjective
rather than RingHomInvPair
Algebra/Ring/CompTypeclasses.lean, Mathlib/Algebra/Ring/Pi.lean, Algebra/Ring/Prod.lean: add RingHomSurjective instances
RingTheory/Artinian.lean:
quotNilradicalEquivPi
: the quotient of a commutative Artinian ring R by its nilradical is isomorphic to the (finite) product of its quotients by maximal ideals (therefore a product of fields).
equivPi
: if the ring is moreover reduced, then the ring itself is a product of fields. Deduce that R is a semisimple ring and both R and R[X] are decomposition monoids. Requires RingEquiv.quotientBot
in RingTheory/Ideal/QuotientOperations.lean.
Data/Polynomial/Eval.lean: the polynomial ring over a finite product of rings is isomorphic to the product of polynomial rings over individual rings. (Used to show R[X] is a decomposition monoid.)
Other necessary results:
FieldTheory/Minpoly/Field.lean: the minimal polynomial of an element in a reduced algebra over a field is radical.
RingTheory/PowerBasis.lean: generalize PowerBasis.finiteDimensional
and rename it to .finite
.
Annihilator stuff, some of which do not end up being used:
RingTheory/Ideal/Operations.lean: define Module.annihilator
and redefine Submodule.annihilator
in terms of it; add lemmas, including one that says an arbitrary intersection of radical ideals is radical. The new lemma Ideal.isRadical_iff_pow_one_lt
depends on pow_imp_self_of_one_lt
in Mathlib/Data/Nat/Interval.lean, which is also used to golf the proof of isRadical_iff_pow_one_lt
.
Algebra/Module/Torsion.lean: add a lemma and an instance (unused)
Data/Polynomial/Module/Basic.lean: add a def (unused) and a lemma
LinearAlgebra/AnnihilatingPolynomial.lean: add lemma span_minpoly_eq_annihilator
Some results about idempotent linear maps (projections) and idempotent elements, used to show that any (left) ideal in a semisimple ring is spanned by an idempotent element (unused):
LinearAlgebra/Projection.lean: add def isIdempotentElemEquiv
LinearAlgebra/Span.lean: add two lemmas
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -5,6 +5,7 @@ Authors: Johannes Hölzl, Chris Hughes, Mario Carneiro, Yury Kudryashov
-/
import Mathlib.Data.Int.Cast.Prod
import Mathlib.Algebra.Group.Prod
+import Mathlib.Algebra.Ring.CompTypeclasses
import Mathlib.Algebra.Ring.Equiv
import Mathlib.Algebra.Order.Group.Prod
import Mathlib.Algebra.Order.Ring.Defs
@@ -202,6 +203,9 @@ def snd : R × S →+* S :=
{ MonoidHom.snd R S, AddMonoidHom.snd R S with toFun := Prod.snd }
#align ring_hom.snd RingHom.snd
+instance (R S) [Semiring R] [Semiring S] : RingHomSurjective (fst R S) := ⟨(⟨⟨·, 0⟩, rfl⟩)⟩
+instance (R S) [Semiring R] [Semiring S] : RingHomSurjective (snd R S) := ⟨(⟨⟨0, ·⟩, rfl⟩)⟩
+
variable {R S}
@[simp]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -398,7 +398,7 @@ instance [OrderedSemiring α] [OrderedSemiring β] : OrderedSemiring (α × β)
instance [OrderedCommSemiring α] [OrderedCommSemiring β] : OrderedCommSemiring (α × β) :=
{ inferInstanceAs (OrderedSemiring (α × β)), inferInstanceAs (CommSemiring (α × β)) with }
--- porting note: compile fails with `inferInstanceAs (OrderedSemiring (α × β))`
+-- Porting note: compile fails with `inferInstanceAs (OrderedSemiring (α × β))`
instance [OrderedRing α] [OrderedRing β] : OrderedRing (α × β) :=
{ inferInstanceAs (Ring (α × β)), inferInstanceAs (OrderedAddCommGroup (α × β)) with
zero_le_one := ⟨zero_le_one, zero_le_one⟩
@@ -7,6 +7,7 @@ import Mathlib.Data.Int.Cast.Prod
import Mathlib.Algebra.Group.Prod
import Mathlib.Algebra.Ring.Equiv
import Mathlib.Algebra.Order.Group.Prod
+import Mathlib.Algebra.Order.Ring.Defs
#align_import algebra.ring.prod from "leanprover-community/mathlib"@"cd391184c85986113f8c00844cfe6dda1d34be3d"
attribute [simp] ... in
-> attribute [local simp] ... in
(#7678)
Mathlib.Logic.Unique contains the line attribute [simp] eq_iff_true_of_subsingleton in ...
:
Despite what the in
part may imply, this adds the lemma to the simp set "globally", including for downstream files; it is likely that attribute [local simp] eq_iff_true_of_subsingleton in ...
was meant instead (or maybe scoped simp
, but I think "scoped" refers to the current namespace). Indeed, the relevant lemma is not marked with @[simp]
for possible slowness: https://github.com/leanprover/std4/blob/846e9e1d6bb534774d1acd2dc430e70987da3c18/Std/Logic.lean#L749. Adding it to the simp set causes the example at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Regression.20in.20simp to slow down.
This PR changes this and fixes the relevant downstream simp
s. There was also one ocurrence of attribute [simp] FullSubcategory.comp_def FullSubcategory.id_def in
in Mathlib.CategoryTheory.Monoidal.Subcategory but that was much easier to fix.
@@ -352,7 +352,7 @@ def prodZeroRing : R ≃+* R × S where
map_add' := by simp
map_mul' := by simp
left_inv x := rfl
- right_inv x := by cases x; simp
+ right_inv x := by cases x; simp [eq_iff_true_of_subsingleton]
#align ring_equiv.prod_zero_ring RingEquiv.prodZeroRing
#align ring_equiv.prod_zero_ring_symm_apply RingEquiv.prodZeroRing_symm_apply
#align ring_equiv.prod_zero_ring_apply RingEquiv.prodZeroRing_apply
@@ -365,7 +365,7 @@ def zeroRingProd : R ≃+* S × R where
map_add' := by simp
map_mul' := by simp
left_inv x := rfl
- right_inv x := by cases x; simp
+ right_inv x := by cases x; simp [eq_iff_true_of_subsingleton]
#align ring_equiv.zero_ring_prod RingEquiv.zeroRingProd
#align ring_equiv.zero_ring_prod_symm_apply RingEquiv.zeroRingProd_symm_apply
#align ring_equiv.zero_ring_prod_apply RingEquiv.zeroRingProd_apply
@@ -153,7 +153,7 @@ theorem snd_comp_prod : (snd S T).comp (f.prod g) = g :=
#align non_unital_ring_hom.snd_comp_prod NonUnitalRingHom.snd_comp_prod
theorem prod_unique (f : R →ₙ+* S × T) : ((fst S T).comp f).prod ((snd S T).comp f) = f :=
- ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
+ ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply]
#align non_unital_ring_hom.prod_unique NonUnitalRingHom.prod_unique
end Prod
@@ -240,7 +240,7 @@ theorem snd_comp_prod : (snd S T).comp (f.prod g) = g :=
#align ring_hom.snd_comp_prod RingHom.snd_comp_prod
theorem prod_unique (f : R →+* S × T) : ((fst S T).comp f).prod ((snd S T).comp f) = f :=
- ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
+ ext fun x => by simp only [prod_apply, coe_fst, coe_snd, comp_apply]
#align ring_hom.prod_unique RingHom.prod_unique
end Prod
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -25,7 +25,7 @@ trivial `simp` lemmas, and define the following operations on `RingHom`s and sim
-/
-variable {α β R R' S S' T T' : Type _}
+variable {α β R R' S S' T T' : Type*}
namespace Prod
@@ -373,7 +373,7 @@ def zeroRingProd : R ≃+* S × R where
end RingEquiv
/-- The product of two nontrivial rings is not a domain -/
-theorem false_of_nontrivial_of_product_domain (R S : Type _) [Ring R] [Ring S] [IsDomain (R × S)]
+theorem false_of_nontrivial_of_product_domain (R S : Type*) [Ring R] [Ring S] [IsDomain (R × S)]
[Nontrivial R] [Nontrivial S] : False := by
have :=
NoZeroDivisors.eq_zero_or_eq_zero_of_mul_eq_zero (show ((0 : R), (1 : S)) * (1, 0) = 0 by simp)
@@ -30,67 +30,72 @@ variable {α β R R' S S' T T' : Type _}
namespace Prod
/-- Product of two distributive types is distributive. -/
-instance [Distrib R] [Distrib S] : Distrib (R × S) :=
+instance instDistrib [Distrib R] [Distrib S] : Distrib (R × S) :=
{ left_distrib := fun _ _ _ => mk.inj_iff.mpr ⟨left_distrib _ _ _, left_distrib _ _ _⟩
right_distrib := fun _ _ _ => mk.inj_iff.mpr ⟨right_distrib _ _ _, right_distrib _ _ _⟩ }
/-- Product of two `NonUnitalNonAssocSemiring`s is a `NonUnitalNonAssocSemiring`. -/
-instance [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] :
+instance instNonUnitalNonAssocSemiring [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] :
NonUnitalNonAssocSemiring (R × S) :=
{ inferInstanceAs (AddCommMonoid (R × S)),
inferInstanceAs (Distrib (R × S)),
inferInstanceAs (MulZeroClass (R × S)) with }
/-- Product of two `NonUnitalSemiring`s is a `NonUnitalSemiring`. -/
-instance [NonUnitalSemiring R] [NonUnitalSemiring S] : NonUnitalSemiring (R × S) :=
+instance instNonUnitalSemiring [NonUnitalSemiring R] [NonUnitalSemiring S] :
+ NonUnitalSemiring (R × S) :=
{ inferInstanceAs (NonUnitalNonAssocSemiring (R × S)),
inferInstanceAs (SemigroupWithZero (R × S)) with }
/-- Product of two `NonAssocSemiring`s is a `NonAssocSemiring`. -/
-instance [NonAssocSemiring R] [NonAssocSemiring S] : NonAssocSemiring (R × S) :=
+instance instNonAssocSemiring [NonAssocSemiring R] [NonAssocSemiring S] :
+ NonAssocSemiring (R × S) :=
{ inferInstanceAs (NonUnitalNonAssocSemiring (R × S)),
inferInstanceAs (MulZeroOneClass (R × S)),
inferInstanceAs (AddMonoidWithOne (R × S)) with }
/-- Product of two semirings is a semiring. -/
-instance [Semiring R] [Semiring S] : Semiring (R × S) :=
+instance instSemiring [Semiring R] [Semiring S] : Semiring (R × S) :=
{ inferInstanceAs (NonUnitalSemiring (R × S)),
inferInstanceAs (NonAssocSemiring (R × S)),
inferInstanceAs (MonoidWithZero (R × S)) with }
/-- Product of two `NonUnitalCommSemiring`s is a `NonUnitalCommSemiring`. -/
-instance [NonUnitalCommSemiring R] [NonUnitalCommSemiring S] : NonUnitalCommSemiring (R × S) :=
+instance instNonUnitalCommSemiring [NonUnitalCommSemiring R] [NonUnitalCommSemiring S] :
+ NonUnitalCommSemiring (R × S) :=
{ inferInstanceAs (NonUnitalSemiring (R × S)), inferInstanceAs (CommSemigroup (R × S)) with }
/-- Product of two commutative semirings is a commutative semiring. -/
-instance [CommSemiring R] [CommSemiring S] : CommSemiring (R × S) :=
+instance instCommSemiring [CommSemiring R] [CommSemiring S] : CommSemiring (R × S) :=
{ inferInstanceAs (Semiring (R × S)), inferInstanceAs (CommMonoid (R × S)) with }
-instance [NonUnitalNonAssocRing R] [NonUnitalNonAssocRing S] : NonUnitalNonAssocRing (R × S) :=
+instance instNonUnitalNonAssocRing [NonUnitalNonAssocRing R] [NonUnitalNonAssocRing S] :
+ NonUnitalNonAssocRing (R × S) :=
{ inferInstanceAs (AddCommGroup (R × S)),
inferInstanceAs (NonUnitalNonAssocSemiring (R × S)) with }
-instance [NonUnitalRing R] [NonUnitalRing S] : NonUnitalRing (R × S) :=
+instance instNonUnitalRing [NonUnitalRing R] [NonUnitalRing S] : NonUnitalRing (R × S) :=
{ inferInstanceAs (NonUnitalNonAssocRing (R × S)),
inferInstanceAs (NonUnitalSemiring (R × S)) with }
-instance [NonAssocRing R] [NonAssocRing S] : NonAssocRing (R × S) :=
+instance instNonAssocRing [NonAssocRing R] [NonAssocRing S] : NonAssocRing (R × S) :=
{ inferInstanceAs (NonUnitalNonAssocRing (R × S)),
inferInstanceAs (NonAssocSemiring (R × S)),
inferInstanceAs (AddGroupWithOne (R × S)) with }
/-- Product of two rings is a ring. -/
-instance [Ring R] [Ring S] : Ring (R × S) :=
+instance instRing [Ring R] [Ring S] : Ring (R × S) :=
{ inferInstanceAs (Semiring (R × S)),
inferInstanceAs (AddCommGroup (R × S)),
inferInstanceAs (AddGroupWithOne (R × S)) with }
/-- Product of two `NonUnitalCommRing`s is a `NonUnitalCommRing`. -/
-instance [NonUnitalCommRing R] [NonUnitalCommRing S] : NonUnitalCommRing (R × S) :=
+instance instNonUnitalCommRing [NonUnitalCommRing R] [NonUnitalCommRing S] :
+ NonUnitalCommRing (R × S) :=
{ inferInstanceAs (NonUnitalRing (R × S)), inferInstanceAs (CommSemigroup (R × S)) with }
/-- Product of two commutative rings is a commutative ring. -/
-instance [CommRing R] [CommRing S] : CommRing (R × S) :=
+instance instCommRing [CommRing R] [CommRing S] : CommRing (R × S) :=
{ inferInstanceAs (Ring (R × S)), inferInstanceAs (CommMonoid (R × S)) with }
end Prod
@@ -159,7 +164,7 @@ variable [NonUnitalNonAssocSemiring R'] [NonUnitalNonAssocSemiring S'] [NonUnita
variable (f : R →ₙ+* R') (g : S →ₙ+* S')
-/-- `prod.map` as a `NonUnitalRingHom`. -/
+/-- `Prod.map` as a `NonUnitalRingHom`. -/
def prodMap : R × S →ₙ+* R' × S' :=
(f.comp (fst R S)).prod (g.comp (snd R S))
#align non_unital_ring_hom.prod_map NonUnitalRingHom.prodMap
@@ -279,26 +284,26 @@ def prodComm : R × S ≃+* S × R :=
#align ring_equiv.prod_comm RingEquiv.prodComm
@[simp]
-theorem coe_prod_comm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
+theorem coe_prodComm : ⇑(prodComm : R × S ≃+* S × R) = Prod.swap :=
rfl
-#align ring_equiv.coe_prod_comm RingEquiv.coe_prod_comm
+#align ring_equiv.coe_prod_comm RingEquiv.coe_prodComm
@[simp]
-theorem coe_prod_comm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
+theorem coe_prodComm_symm : ⇑(prodComm : R × S ≃+* S × R).symm = Prod.swap :=
rfl
-#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prod_comm_symm
+#align ring_equiv.coe_prod_comm_symm RingEquiv.coe_prodComm_symm
@[simp]
-theorem fst_comp_coe_prod_comm :
+theorem fst_comp_coe_prodComm :
(RingHom.fst S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.snd R S :=
RingHom.ext fun _ => rfl
-#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prod_comm
+#align ring_equiv.fst_comp_coe_prod_comm RingEquiv.fst_comp_coe_prodComm
@[simp]
-theorem snd_comp_coe_prod_comm :
+theorem snd_comp_coe_prodComm :
(RingHom.snd S R).comp ↑(prodComm : R × S ≃+* S × R) = RingHom.fst R S :=
RingHom.ext fun _ => rfl
-#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_comm
+#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prodComm
section
@@ -2,17 +2,14 @@
Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Chris Hughes, Mario Carneiro, Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.ring.prod
-! leanprover-community/mathlib commit cd391184c85986113f8c00844cfe6dda1d34be3d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Int.Cast.Prod
import Mathlib.Algebra.Group.Prod
import Mathlib.Algebra.Ring.Equiv
import Mathlib.Algebra.Order.Group.Prod
+#align_import algebra.ring.prod from "leanprover-community/mathlib"@"cd391184c85986113f8c00844cfe6dda1d34be3d"
+
/-!
# Semiring, ring etc structures on `R × S`
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Chris Hughes, Mario Carneiro, Yury Kudryashov
! This file was ported from Lean 3 source module algebra.ring.prod
-! leanprover-community/mathlib commit 207cfac9fcd06138865b5d04f7091e46d9320432
+! leanprover-community/mathlib commit cd391184c85986113f8c00844cfe6dda1d34be3d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -274,7 +274,7 @@ end RingHom
namespace RingEquiv
-variable [NonAssocSemiring R] [NonAssocSemiring S]
+variable [NonAssocSemiring R] [NonAssocSemiring S] [NonAssocSemiring R'] [NonAssocSemiring S']
/-- Swapping components as an equivalence of (semi)rings. -/
def prodComm : R × S ≃+* S × R :=
@@ -303,6 +303,43 @@ theorem snd_comp_coe_prod_comm :
RingHom.ext fun _ => rfl
#align ring_equiv.snd_comp_coe_prod_comm RingEquiv.snd_comp_coe_prod_comm
+section
+
+variable (R R' S S')
+
+/-- Four-way commutativity of `prod`. The name matches `mul_mul_mul_comm`. -/
+@[simps apply]
+def prodProdProdComm : (R × R') × S × S' ≃+* (R × S) × R' × S' :=
+ { AddEquiv.prodProdProdComm R R' S S', MulEquiv.prodProdProdComm R R' S S' with
+ toFun := fun rrss => ((rrss.1.1, rrss.2.1), (rrss.1.2, rrss.2.2))
+ invFun := fun rsrs => ((rsrs.1.1, rsrs.2.1), (rsrs.1.2, rsrs.2.2)) }
+#align ring_equiv.prod_prod_prod_comm RingEquiv.prodProdProdComm
+
+@[simp]
+theorem prodProdProdComm_symm : (prodProdProdComm R R' S S').symm = prodProdProdComm R S R' S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_symm RingEquiv.prodProdProdComm_symm
+
+@[simp]
+theorem prodProdProdComm_toAddEquiv :
+ (prodProdProdComm R R' S S' : _ ≃+ _) = AddEquiv.prodProdProdComm R R' S S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_to_add_equiv RingEquiv.prodProdProdComm_toAddEquiv
+
+@[simp]
+theorem prodProdProdComm_toMulEquiv :
+ (prodProdProdComm R R' S S' : _ ≃* _) = MulEquiv.prodProdProdComm R R' S S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_to_mul_equiv RingEquiv.prodProdProdComm_toMulEquiv
+
+@[simp]
+theorem prodProdProdComm_toEquiv :
+ (prodProdProdComm R R' S S' : _ ≃ _) = Equiv.prodProdProdComm R R' S S' :=
+ rfl
+#align ring_equiv.prod_prod_prod_comm_to_equiv RingEquiv.prodProdProdComm_toEquiv
+
+end
+
variable (R S) [Subsingleton S]
/-- A ring `R` is isomorphic to `R × S` when `S` is the zero ring -/
@@ -315,7 +315,7 @@ def prodZeroRing : R ≃+* R × S where
left_inv x := rfl
right_inv x := by cases x; simp
#align ring_equiv.prod_zero_ring RingEquiv.prodZeroRing
-#align ring_equiv.prod_zero_ring_symm_apply RingEquiv.prodZeroRing_symmApply
+#align ring_equiv.prod_zero_ring_symm_apply RingEquiv.prodZeroRing_symm_apply
#align ring_equiv.prod_zero_ring_apply RingEquiv.prodZeroRing_apply
/-- A ring `R` is isomorphic to `S × R` when `S` is the zero ring -/
@@ -328,7 +328,7 @@ def zeroRingProd : R ≃+* S × R where
left_inv x := rfl
right_inv x := by cases x; simp
#align ring_equiv.zero_ring_prod RingEquiv.zeroRingProd
-#align ring_equiv.zero_ring_prod_symm_apply RingEquiv.zeroRingProd_symmApply
+#align ring_equiv.zero_ring_prod_symm_apply RingEquiv.zeroRingProd_symm_apply
#align ring_equiv.zero_ring_prod_apply RingEquiv.zeroRingProd_apply
end RingEquiv
This PR is the result of a slight variant on the following "algorithm"
_
and make all uppercase letters into lowercase_
and make all uppercase letters into lowercase(original_lean3_name, OriginalLean4Name)
#align
statement just before the next empty line#align
statement to have been inserted too early)@@ -315,6 +315,8 @@ def prodZeroRing : R ≃+* R × S where
left_inv x := rfl
right_inv x := by cases x; simp
#align ring_equiv.prod_zero_ring RingEquiv.prodZeroRing
+#align ring_equiv.prod_zero_ring_symm_apply RingEquiv.prodZeroRing_symmApply
+#align ring_equiv.prod_zero_ring_apply RingEquiv.prodZeroRing_apply
/-- A ring `R` is isomorphic to `S × R` when `S` is the zero ring -/
@[simps]
@@ -326,6 +328,8 @@ def zeroRingProd : R ≃+* S × R where
left_inv x := rfl
right_inv x := by cases x; simp
#align ring_equiv.zero_ring_prod RingEquiv.zeroRingProd
+#align ring_equiv.zero_ring_prod_symm_apply RingEquiv.zeroRingProd_symmApply
+#align ring_equiv.zero_ring_prod_apply RingEquiv.zeroRingProd_apply
end RingEquiv
@@ -16,14 +16,14 @@ import Mathlib.Algebra.Order.Group.Prod
/-!
# Semiring, ring etc structures on `R × S`
-In this file we define two-binop (`semiring`, `ring` etc) structures on `R × S`. We also prove
-trivial `simp` lemmas, and define the following operations on `ring_hom`s and similarly for
-`non_unital_ring_hom`s:
-
-* `fst R S : R × S →+* R`, `snd R S : R × S →+* S`: projections `prod.fst` and `prod.snd`
- as `ring_hom`s;
-* `f.prod g : `R →+* S × T`: sends `x` to `(f x, g x)`;
-* `f.prod_map g : `R × S → R' × S'`: `prod.map f g` as a `ring_hom`,
+In this file we define two-binop (`Semiring`, `Ring` etc) structures on `R × S`. We also prove
+trivial `simp` lemmas, and define the following operations on `RingHom`s and similarly for
+`NonUnitalRingHom`s:
+
+* `fst R S : R × S →+* R`, `snd R S : R × S →+* S`: projections `Prod.fst` and `Prod.snd`
+ as `RingHom`s;
+* `f.prod g : R →+* S × T`: sends `x` to `(f x, g x)`;
+* `f.prod_map g : R × S → R' × S'`: `Prod.map f g` as a `RingHom`,
sends `(x, y)` to `(f x, g y)`.
-/
@@ -37,19 +37,19 @@ instance [Distrib R] [Distrib S] : Distrib (R × S) :=
{ left_distrib := fun _ _ _ => mk.inj_iff.mpr ⟨left_distrib _ _ _, left_distrib _ _ _⟩
right_distrib := fun _ _ _ => mk.inj_iff.mpr ⟨right_distrib _ _ _, right_distrib _ _ _⟩ }
-/-- Product of two `non_unital_non_assoc_semiring`s is a `non_unital_non_assoc_semiring`. -/
+/-- Product of two `NonUnitalNonAssocSemiring`s is a `NonUnitalNonAssocSemiring`. -/
instance [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] :
NonUnitalNonAssocSemiring (R × S) :=
{ inferInstanceAs (AddCommMonoid (R × S)),
inferInstanceAs (Distrib (R × S)),
inferInstanceAs (MulZeroClass (R × S)) with }
-/-- Product of two `non_unital_semiring`s is a `non_unital_semiring`. -/
+/-- Product of two `NonUnitalSemiring`s is a `NonUnitalSemiring`. -/
instance [NonUnitalSemiring R] [NonUnitalSemiring S] : NonUnitalSemiring (R × S) :=
{ inferInstanceAs (NonUnitalNonAssocSemiring (R × S)),
inferInstanceAs (SemigroupWithZero (R × S)) with }
-/-- Product of two `non_assoc_semiring`s is a `non_assoc_semiring`. -/
+/-- Product of two `NonAssocSemiring`s is a `NonAssocSemiring`. -/
instance [NonAssocSemiring R] [NonAssocSemiring S] : NonAssocSemiring (R × S) :=
{ inferInstanceAs (NonUnitalNonAssocSemiring (R × S)),
inferInstanceAs (MulZeroOneClass (R × S)),
@@ -61,7 +61,7 @@ instance [Semiring R] [Semiring S] : Semiring (R × S) :=
inferInstanceAs (NonAssocSemiring (R × S)),
inferInstanceAs (MonoidWithZero (R × S)) with }
-/-- Product of two `non_unital_comm_semiring`s is a `non_unital_comm_semiring`. -/
+/-- Product of two `NonUnitalCommSemiring`s is a `NonUnitalCommSemiring`. -/
instance [NonUnitalCommSemiring R] [NonUnitalCommSemiring S] : NonUnitalCommSemiring (R × S) :=
{ inferInstanceAs (NonUnitalSemiring (R × S)), inferInstanceAs (CommSemigroup (R × S)) with }
@@ -88,7 +88,7 @@ instance [Ring R] [Ring S] : Ring (R × S) :=
inferInstanceAs (AddCommGroup (R × S)),
inferInstanceAs (AddGroupWithOne (R × S)) with }
-/-- Product of two `non_unital_comm_ring`s is a `non_unital_comm_ring`. -/
+/-- Product of two `NonUnitalCommRing`s is a `NonUnitalCommRing`. -/
instance [NonUnitalCommRing R] [NonUnitalCommRing S] : NonUnitalCommRing (R × S) :=
{ inferInstanceAs (NonUnitalRing (R × S)), inferInstanceAs (CommSemigroup (R × S)) with }
@@ -162,7 +162,7 @@ variable [NonUnitalNonAssocSemiring R'] [NonUnitalNonAssocSemiring S'] [NonUnita
variable (f : R →ₙ+* R') (g : S →ₙ+* S')
-/-- `prod.map` as a `non_unital_ring_hom`. -/
+/-- `prod.map` as a `NonUnitalRingHom`. -/
def prodMap : R × S →ₙ+* R' × S' :=
(f.comp (fst R S)).prod (g.comp (snd R S))
#align non_unital_ring_hom.prod_map NonUnitalRingHom.prodMap
@@ -249,7 +249,7 @@ variable [NonAssocSemiring R'] [NonAssocSemiring S'] [NonAssocSemiring T]
variable (f : R →+* R') (g : S →+* S')
-/-- `prod.map` as a `ring_hom`. -/
+/-- `Prod.map` as a `RingHom`. -/
def prodMap : R × S →+* R' × S' :=
(f.comp (fst R S)).prod (g.comp (snd R S))
#align ring_hom.prod_map RingHom.prodMap
@@ -307,7 +307,7 @@ variable (R S) [Subsingleton S]
/-- A ring `R` is isomorphic to `R × S` when `S` is the zero ring -/
@[simps]
-def prodZeroRing : R ≃+* R × S where
+def prodZeroRing : R ≃+* R × S where
toFun x := (x, 0)
invFun := Prod.fst
map_add' := by simp
@@ -318,7 +318,7 @@ def prodZeroRing : R ≃+* R × S where
/-- A ring `R` is isomorphic to `S × R` when `S` is the zero ring -/
@[simps]
-def zeroRingProd : R ≃+* S × R where
+def zeroRingProd : R ≃+* S × R where
toFun x := (0, x)
invFun := Prod.snd
map_add' := by simp
The unported dependencies are