Bundled non-unital subsemirings #
We define the CompleteLattice structure, and non-unital subsemiring
map, comap and range (srange) of a NonUnitalRingHom etc.
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
- 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
- One or more equations did not get rendered due to their size.
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.
Equations
- One or more equations did not get rendered due to their size.
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.
The center of isomorphic (not necessarily unital or associative) semirings are isomorphic.
Equations
- NonUnitalSubsemiring.centerCongr e = { toEquiv := (Subsemigroup.centerCongr ↑e).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The center of a (not necessarily unital or associative) semiring is isomorphic to the center of its opposite.
Equations
- NonUnitalSubsemiring.centerToMulOpposite = { toEquiv := Subsemigroup.centerToMulOpposite.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
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.
If all the elements of a set s commute, then closure s is a non-unital commutative
semiring.
Equations
- NonUnitalSubsemiring.closureNonUnitalCommSemiringOfComm hcomm = { toNonUnitalSemiring := NonUnitalSubsemiringClass.toNonUnitalSemiring (NonUnitalSubsemiring.closure s), mul_comm := ⋯ }
Instances For
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 NonUnitalSubsemirings 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 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.
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.
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' := ⋯ }