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 RingHoms and similarly for
NonUnitalRingHoms:
Product of two distributive types is distributive.
Equations
- Prod.instDistrib = Distrib.mk ⋯ ⋯
Product of two NonUnitalNonAssocSemirings is a NonUnitalNonAssocSemiring.
Equations
- One or more equations did not get rendered due to their size.
Product of two NonUnitalSemirings is a NonUnitalSemiring.
Equations
- Prod.instNonUnitalSemiring = let __src := inferInstanceAs (NonUnitalNonAssocSemiring (R × S)); let __src_1 := inferInstanceAs (SemigroupWithZero (R × S)); NonUnitalSemiring.mk ⋯
Product of two NonAssocSemirings is a NonAssocSemiring.
Equations
- One or more equations did not get rendered due to their size.
Product of two NonUnitalCommSemirings is a NonUnitalCommSemiring.
Equations
- Prod.instNonUnitalCommSemiring = let __src := inferInstanceAs (NonUnitalSemiring (R × S)); let __src_1 := inferInstanceAs (CommSemigroup (R × S)); NonUnitalCommSemiring.mk ⋯
Product of two commutative semirings is a commutative semiring.
Equations
- Prod.instCommSemiring = let __src := inferInstanceAs (Semiring (R × S)); let __src_1 := inferInstanceAs (CommMonoid (R × S)); CommSemiring.mk ⋯
Equations
- Prod.instNonUnitalNonAssocRing = let __src := inferInstanceAs (AddCommGroup (R × S)); let __src_1 := inferInstanceAs (NonUnitalNonAssocSemiring (R × S)); NonUnitalNonAssocRing.mk ⋯ ⋯ ⋯ ⋯
Equations
- Prod.instNonUnitalRing = let __src := inferInstanceAs (NonUnitalNonAssocRing (R × S)); let __src_1 := inferInstanceAs (NonUnitalSemiring (R × S)); NonUnitalRing.mk ⋯
Equations
- One or more equations did not get rendered due to their size.
Product of two NonUnitalCommRings is a NonUnitalCommRing.
Equations
- Prod.instNonUnitalCommRing = let __src := inferInstanceAs (NonUnitalRing (R × S)); let __src_1 := inferInstanceAs (CommSemigroup (R × S)); NonUnitalCommRing.mk ⋯
Product of two commutative rings is a commutative ring.
Equations
- Prod.instCommRing = let __src := inferInstanceAs (Ring (R × S)); let __src_1 := inferInstanceAs (CommMonoid (R × S)); CommRing.mk ⋯
Given non-unital semirings R, S, the natural projection homomorphism from R × S to R.
Equations
- NonUnitalRingHom.fst R S = let __src := MulHom.fst R S; let __src := AddMonoidHom.fst R S; { toFun := Prod.fst, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given non-unital semirings R, S, the natural projection homomorphism from R × S to S.
Equations
- NonUnitalRingHom.snd R S = let __src := MulHom.snd R S; let __src := AddMonoidHom.snd R S; { toFun := Prod.snd, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
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)
Equations
- f.prod g = let __src := (↑f).prod ↑g; let __src := (↑f).prod ↑g; { toFun := fun (x : R) => (f x, g x), map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Prod.map as a NonUnitalRingHom.
Equations
- f.prodMap g = (f.comp (NonUnitalRingHom.fst R S)).prod (g.comp (NonUnitalRingHom.snd R S))
Instances For
Given semirings R, S, the natural projection homomorphism from R × S to R.
Equations
- RingHom.fst R S = let __src := MonoidHom.fst R S; let __src := AddMonoidHom.fst R S; { toFun := Prod.fst, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given semirings R, S, the natural projection homomorphism from R × S to S.
Equations
- RingHom.snd R S = let __src := MonoidHom.snd R S; let __src := AddMonoidHom.snd R S; { toFun := Prod.snd, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
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)
Equations
- f.prod g = let __src := (↑f).prod ↑g; let __src := (↑f).prod ↑g; { toFun := fun (x : R) => (f x, g x), map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Equations
- f.prodMap g = (f.comp (RingHom.fst R S)).prod (g.comp (RingHom.snd R S))
Instances For
Swapping components as an equivalence of (semi)rings.
Equations
- RingEquiv.prodComm = let __src := AddEquiv.prodComm; let __src_1 := MulEquiv.prodComm; { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Four-way commutativity of Prod. The name matches mul_mul_mul_comm.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A ring R is isomorphic to R × S when S is the zero ring
Equations
- RingEquiv.prodZeroRing R S = { toFun := fun (x : R) => (x, 0), invFun := Prod.fst, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A ring R is isomorphic to S × R when S is the zero ring
Equations
- RingEquiv.zeroRingProd R S = { toFun := fun (x : R) => (0, x), invFun := Prod.snd, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The product of two nontrivial rings is not a domain
Order #
Equations
- instOrderedSemiringProd = let __src := inferInstanceAs (Semiring (α × β)); let __src_1 := inferInstanceAs (OrderedAddCommMonoid (α × β)); OrderedSemiring.mk ⋯ ⋯ ⋯ ⋯
Equations
- instOrderedCommSemiringProd = let __src := inferInstanceAs (OrderedSemiring (α × β)); let __src_1 := inferInstanceAs (CommSemiring (α × β)); OrderedCommSemiring.mk ⋯
Equations
- instOrderedRingProd = let __src := inferInstanceAs (Ring (α × β)); let __src_1 := inferInstanceAs (OrderedAddCommGroup (α × β)); OrderedRing.mk ⋯ ⋯ ⋯
Equations
- instOrderedCommRingProd = let __src := inferInstanceAs (OrderedRing (α × β)); let __src_1 := inferInstanceAs (CommRing (α × β)); OrderedCommRing.mk ⋯