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 RingHom
s and similarly for
NonUnitalRingHom
s:
Product of two distributive types is distributive.
Equations
- Prod.instDistrib = Distrib.mk ⋯ ⋯
Product of two NonUnitalNonAssocSemiring
s is a NonUnitalNonAssocSemiring
.
Equations
- One or more equations did not get rendered due to their size.
Product of two NonUnitalSemiring
s is a NonUnitalSemiring
.
Equations
- Prod.instNonUnitalSemiring = let __src := inferInstanceAs (NonUnitalNonAssocSemiring (R × S)); let __src_1 := inferInstanceAs (SemigroupWithZero (R × S)); NonUnitalSemiring.mk ⋯
Product of two NonAssocSemiring
s is a NonAssocSemiring
.
Equations
- One or more equations did not get rendered due to their size.
Product of two NonUnitalCommSemiring
s 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 NonUnitalCommRing
s 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 ⋯