Bundled non-unital subsemirings #
We define bundled non-unital subsemirings and some standard constructions:
CompleteLattice
structure, subtype
and inclusion
ring homomorphisms, non-unital subsemiring
map
, comap
and range (srange
) of a NonUnitalRingHom
etc.
NonUnitalSubsemiringClass S R
states that S
is a type of subsets s ⊆ R
that
are both an additive submonoid and also a multiplicative subsemigroup.
- zero_mem : ∀ (s : S), 0 ∈ s
Instances
Equations
- ⋯ = ⋯
A non-unital subsemiring of a NonUnitalNonAssocSemiring
inherits a
NonUnitalNonAssocSemiring
structure
Equations
- NonUnitalSubsemiringClass.toNonUnitalNonAssocSemiring s = Function.Injective.nonUnitalNonAssocSemiring Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- ⋯ = ⋯
The natural non-unital ring hom from a non-unital subsemiring of a non-unital semiring R
to
R
.
Equations
- NonUnitalSubsemiringClass.subtype s = { toFun := Subtype.val, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
A non-unital subsemiring of a NonUnitalSemiring
is a NonUnitalSemiring
.
Equations
- NonUnitalSubsemiringClass.toNonUnitalSemiring s = Function.Injective.nonUnitalSemiring Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯
A non-unital subsemiring of a NonUnitalCommSemiring
is a NonUnitalCommSemiring
.
Equations
- NonUnitalSubsemiringClass.toNonUnitalCommSemiring s = Function.Injective.nonUnitalCommSemiring Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯
Note: currently, there are no ordered versions of non-unital rings.
A non-unital subsemiring of a non-unital semiring R
is a subset s
that is both an additive
submonoid and a semigroup.
- carrier : Set R
- zero_mem' : 0 ∈ self.carrier
The product of two elements of a subsemigroup belongs to the subsemigroup.
Instances For
Reinterpret a NonUnitalSubsemiring
as a Subsemigroup
.
Equations
- self.toSubsemigroup = { carrier := self.carrier, mul_mem' := ⋯ }
Instances For
Equations
- NonUnitalSubsemiring.instSetLike = { coe := fun (s : NonUnitalSubsemiring R) => s.carrier, coe_injective' := ⋯ }
Equations
- ⋯ = ⋯
Two non-unital subsemirings are equal if they have the same elements.
Copy of a non-unital subsemiring with a new carrier
equal to the old one. Useful to fix
definitional equalities.
Equations
- S.copy s hs = { carrier := s, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
Construct a NonUnitalSubsemiring R
from a set s
, a subsemigroup sg
, and an additive
submonoid sa
such that x ∈ s ↔ x ∈ sg ↔ x ∈ sa
.
Equations
- NonUnitalSubsemiring.mk' s sg hg sa ha = { carrier := s, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
Note: currently, there are no ordered versions of non-unital rings.
The non-unital subsemiring R
of the non-unital semiring R
.
The ring equiv between the top element of NonUnitalSubsemiring R
and R
.
Equations
- NonUnitalSubsemiring.topEquiv = { toEquiv := Subsemigroup.topEquiv.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The preimage of a non-unital subsemiring along a non-unital ring homomorphism is a non-unital subsemiring.
Equations
- NonUnitalSubsemiring.comap f s = { carrier := ⇑f ⁻¹' ↑s, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
The image of a non-unital subsemiring along a ring homomorphism is a non-unital subsemiring.
Equations
- NonUnitalSubsemiring.map f s = { carrier := ⇑f '' ↑s, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
A non-unital subsemiring is isomorphic to its image under an injective function
Equations
- s.equivMapOfInjective f hf = { toEquiv := Equiv.Set.image (⇑f) (↑s) hf, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The range of a non-unital ring homomorphism is a non-unital subsemiring. See note [range copy pattern].
Equations
- NonUnitalRingHom.srange f = (NonUnitalSubsemiring.map ↑f ⊤).copy (Set.range ⇑f) ⋯
Instances For
The range of a morphism of non-unital semirings is finite if the domain is a finite.
Equations
- ⋯ = ⋯
Equations
- NonUnitalSubsemiring.instBot = { bot := { carrier := {0}, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ } }
The inf of two non-unital subsemirings is their intersection.
Equations
- One or more equations did not get rendered due to their size.
Equations
- NonUnitalSubsemiring.instInfSet = { sInf := fun (s : Set (NonUnitalSubsemiring R)) => NonUnitalSubsemiring.mk' (⋂ t ∈ s, ↑t) (⨅ t ∈ s, t.toSubsemigroup) ⋯ (⨅ t ∈ s, t.toAddSubmonoid) ⋯ }
Non-unital subsemirings of a non-unital semiring form a complete lattice.
Equations
- NonUnitalSubsemiring.instCompleteLattice = CompleteLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The center of a semiring R
is the set of elements that commute and associate with everything
in R
Equations
- NonUnitalSubsemiring.center R = { carrier := (Subsemigroup.center R).carrier, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
The center is commutative and associative.
A point-free means of proving membership in the center, for a non-associative ring.
This can be helpful when working with types that have ext lemmas for R →+ R
.
Equations
- NonUnitalSubsemiring.decidableMemCenter x = decidable_of_iff' (∀ (g : R), g * x = x * g) ⋯
The centralizer of a set as non-unital subsemiring.
Equations
- NonUnitalSubsemiring.centralizer s = { carrier := s.centralizer, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
The NonUnitalSubsemiring
generated by a set.
Equations
- NonUnitalSubsemiring.closure s = sInf {S : NonUnitalSubsemiring R | s ⊆ ↑S}
Instances For
The non-unital subsemiring generated by a set includes the set.
A non-unital subsemiring S
includes closure s
if and only if it includes s
.
Subsemiring closure of a set is monotone in its argument: if s ⊆ t
,
then closure s ≤ closure t
.
The additive closure of a non-unital subsemigroup is a non-unital subsemiring.
Equations
- M.nonUnitalSubsemiringClosure = { toAddSubmonoid := AddSubmonoid.closure ↑M, mul_mem' := ⋯ }
Instances For
The NonUnitalSubsemiring
generated by a multiplicative subsemigroup coincides with the
NonUnitalSubsemiring.closure
of the subsemigroup itself .
The elements of the non-unital subsemiring closure of M
are exactly the elements of the
additive closure of a multiplicative subsemigroup M
.
An induction principle for closure membership. If p
holds for 0
, 1
, and all elements
of s
, and is preserved under addition and multiplication, then p
holds for all elements
of the closure of s
.
An induction principle for closure membership for predicates with two arguments.
closure
forms a Galois insertion with the coercion to set.
Equations
- NonUnitalSubsemiring.gi R = { choice := fun (s : Set R) (x : ↑(NonUnitalSubsemiring.closure s) ≤ s) => NonUnitalSubsemiring.closure s, gc := ⋯, le_l_u := ⋯, choice_eq := ⋯ }
Instances For
Closure of a non-unital subsemiring S
equals S
.
Given NonUnitalSubsemiring
s s
, t
of semirings R
, S
respectively, s.prod t
is
s × t
as a non-unital subsemiring of R × S
.
Instances For
Product of non-unital subsemirings is isomorphic to their product as semigroups.
Equations
- s.prodEquiv t = { toEquiv := Equiv.Set.prod ↑s ↑t, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Restriction of a non-unital ring homomorphism to a non-unital subsemiring of the codomain.
Equations
- NonUnitalRingHom.codRestrict f s h = { toFun := fun (n : R) => ⟨f n, ⋯⟩, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Restriction of a non-unital ring homomorphism to its range interpreted as a non-unital subsemiring.
This is the bundled version of Set.rangeFactorization
.
Equations
Instances For
The range of a surjective non-unital ring homomorphism is the whole of the codomain.
The non-unital subsemiring of elements x : R
such that f x = g x
Equations
- NonUnitalRingHom.eqSlocus f g = { carrier := {x : R | f x = g x}, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯ }
Instances For
If two non-unital ring homomorphisms are equal on a set, then they are equal on its non-unital subsemiring closure.
The image under a ring homomorphism of the subsemiring generated by a set equals the subsemiring generated by the image of the set.
The non-unital ring homomorphism associated to an inclusion of non-unital subsemirings.
Equations
Instances For
Makes the identity isomorphism from a proof two non-unital subsemirings of a multiplicative monoid are equal.
Equations
- RingEquiv.nonUnitalSubsemiringCongr h = { toEquiv := Equiv.setCongr ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Restrict a non-unital ring homomorphism with a left inverse to a ring isomorphism to its
NonUnitalRingHom.srange
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given an equivalence e : R ≃+* S
of non-unital semirings and a non-unital subsemiring
s
of R
, non_unital_subsemiring_map e s
is the induced equivalence between s
and
s.map e
Equations
- e.nonUnitalSubsemiringMap s = { toEquiv := (e.toAddEquiv.addSubmonoidMap s.toAddSubmonoid).toEquiv, map_mul' := ⋯, map_add' := ⋯ }