NonUnitalSubring
s #
Let R
be a non-unital ring. This file defines the "bundled" non-unital subring type
NonUnitalSubring R
, a type whose terms correspond to non-unital subrings of R
.
This is the preferred way to talk about non-unital subrings in mathlib.
We prove that non-unital subrings are a complete lattice, and that you can map
(pushforward) and
comap
(pull back) them along ring homomorphisms.
We define the closure
construction from Set R
to NonUnitalSubring R
, sending a subset of
R
to the non-unital subring it generates, and prove that it is a Galois insertion.
Main definitions #
Notation used here:
(R : Type u) [NonUnitalRing R] (S : Type u) [NonUnitalRing S] (f g : R →ₙ+* S)
(A : NonUnitalSubring R) (B : NonUnitalSubring S) (s : Set R)
NonUnitalSubring R
: the type of non-unital subrings of a ringR
.instance : CompleteLattice (NonUnitalSubring R)
: the complete lattice structure on the non-unital subrings.NonUnitalSubring.center
: the center of a non-unital ringR
.NonUnitalSubring.closure
: non-unital subring closure of a set, i.e., the smallest non-unital subring that includes the set.NonUnitalSubring.gi
:closure : Set M → NonUnitalSubring M
and coercioncoe : NonUnitalSubring M → Set M
form aGaloisInsertion
.comap f B : NonUnitalSubring A
: the preimage of a non-unital subringB
along the non-unital ring homomorphismf
map f A : NonUnitalSubring B
: the image of a non-unital subringA
along the non-unital ring homomorphismf
.Prod A B : NonUnitalSubring (R × S)
: the product of non-unital subringsf.range : NonUnitalSubring B
: the range of the non-unital ring homomorphismf
.eq_locus f g : NonUnitalSubring R
: given non-unital ring homomorphismsf g : R →ₙ+* S
, the non-unital subring ofR
wheref x = g x
Implementation notes #
A non-unital subring is implemented as a NonUnitalSubsemiring
which is also an
additive subgroup.
Lattice inclusion (e.g. ≤
and ⊓
) is used rather than set notation (⊆
and ∩
), although
∈
is defined as membership of a non-unital subring's underlying set.
Tags #
non-unital subring
NonUnitalSubringClass S R
states that S
is a type of subsets s ⊆ R
that
are both a multiplicative submonoid and an additive subgroup.
Instances
Equations
- ⋯ = ⋯
A non-unital subring of a non-unital ring inherits a non-unital ring structure
Equations
- NonUnitalSubringClass.toNonUnitalNonAssocRing s = Function.Injective.nonUnitalNonAssocRing Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
A non-unital subring of a non-unital ring inherits a non-unital ring structure
Equations
- NonUnitalSubringClass.toNonUnitalRing s = Function.Injective.nonUnitalRing Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
A non-unital subring of a NonUnitalCommRing
is a NonUnitalCommRing
.
Equations
- NonUnitalSubringClass.toNonUnitalCommRing s = Function.Injective.nonUnitalCommRing Subtype.val ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The natural non-unital ring hom from a non-unital subring of a non-unital ring R
to R
.
Equations
- NonUnitalSubringClass.subtype s = { toFun := Subtype.val, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
NonUnitalSubring R
is the type of non-unital subrings of R
. A non-unital subring of R
is a subset s
that is a multiplicative subsemigroup and an additive subgroup. Note in particular
that it shares the same 0 as R.
Instances For
Reinterpret a NonUnitalSubring
as an AddSubgroup
.
Equations
- self.toAddSubgroup = { toAddSubmonoid := self.toAddSubmonoid, neg_mem' := ⋯ }
Instances For
The underlying submonoid of a NonUnitalSubring
.
Equations
- s.toSubsemigroup = { carrier := s.carrier, mul_mem' := ⋯ }
Instances For
Equations
- NonUnitalSubring.instSetLike = { coe := fun (s : NonUnitalSubring R) => s.carrier, coe_injective' := ⋯ }
Equations
- ⋯ = ⋯
Two non-unital subrings are equal if they have the same elements.
Copy of a non-unital subring 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' := ⋯, neg_mem' := ⋯ }
Instances For
Construct a NonUnitalSubring R
from a set s
, a subsemigroup sm
, and an additive
subgroup sa
such that x ∈ s ↔ x ∈ sm ↔ x ∈ sa
.
Equations
- NonUnitalSubring.mk' s sm sa hm ha = { carrier := (sm.copy s ⋯).carrier, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯, neg_mem' := ⋯ }
Instances For
A non-unital subring contains the ring's 0.
A non-unital subring is closed under multiplication.
A non-unital subring is closed under addition.
A non-unital subring is closed under negation.
A non-unital subring is closed under subtraction
Sum of a list of elements in a non-unital subring is in the non-unital subring.
Sum of a multiset of elements in a NonUnitalSubring
of a NonUnitalRing
is
in the NonUnitalSubring
.
Sum of elements in a NonUnitalSubring
of a NonUnitalRing
indexed by a Finset
is in the NonUnitalSubring
.
A non-unital subring of a non-unital ring inherits a non-unital ring structure
Equations
- s.toNonUnitalRing = Function.Injective.nonUnitalRing (fun (a : ↥s) => ↑a) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
A non-unital subring of a NonUnitalCommRing
is a NonUnitalCommRing
.
Equations
- s.toNonUnitalCommRing = Function.Injective.nonUnitalCommRing (fun (a : ↥s) => ↑a) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Partial order #
top #
The non-unital subring R
of the ring R
.
The ring equiv between the top element of NonUnitalSubring R
and R
.
Equations
- NonUnitalSubring.topEquiv = NonUnitalSubsemiring.topEquiv
Instances For
comap #
The preimage of a NonUnitalSubring
along a ring homomorphism is a NonUnitalSubring
.
Equations
- NonUnitalSubring.comap f s = { carrier := ⇑f ⁻¹' s.carrier, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯, neg_mem' := ⋯ }
Instances For
map #
The image of a NonUnitalSubring
along a ring homomorphism is a NonUnitalSubring
.
Equations
- NonUnitalSubring.map f s = { carrier := ⇑f '' s.carrier, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯, neg_mem' := ⋯ }
Instances For
A NonUnitalSubring
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
range #
The range of a ring homomorphism, as a NonUnitalSubring
of the target.
See Note [range copy pattern].
Equations
- f.range = (NonUnitalSubring.map f ⊤).copy (Set.range ⇑f) ⋯
Instances For
The range of a ring homomorphism is a fintype, if the domain is a fintype.
Note: this instance can form a diamond with Subtype.fintype
in the
presence of Fintype S
.
Equations
- f.fintypeRange = Set.fintypeRange ⇑f
bot #
Equations
- NonUnitalSubring.instBot = { bot := NonUnitalRingHom.range 0 }
inf #
The inf of two NonUnitalSubring
s is their intersection.
Equations
- One or more equations did not get rendered due to their size.
Equations
- NonUnitalSubring.instInfSet = { sInf := fun (s : Set (NonUnitalSubring R)) => NonUnitalSubring.mk' (⋂ t ∈ s, ↑t) (⨅ t ∈ s, t.toSubsemigroup) (⨅ t ∈ s, t.toAddSubgroup) ⋯ ⋯ }
NonUnitalSubring
s of a ring form a complete lattice.
Equations
- NonUnitalSubring.instCompleteLattice = CompleteLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Center of a ring #
The center of a ring R
is the set of elements that commute with everything in R
Equations
- NonUnitalSubring.center R = { toNonUnitalSubsemiring := NonUnitalSubsemiring.center R, neg_mem' := ⋯ }
Instances For
The center is commutative and associative.
Equations
- NonUnitalSubring.decidableMemCenter x = decidable_of_iff' (∀ (g : R), g * x = x * g) ⋯
NonUnitalSubring
closure of a subset #
The NonUnitalSubring
generated by a set.
Equations
- NonUnitalSubring.closure s = sInf {S : NonUnitalSubring R | s ⊆ ↑S}
Instances For
The NonUnitalSubring
generated by a set includes the set.
A NonUnitalSubring
t
includes closure s
if and only if it includes s
.
NonUnitalSubring
closure of a set is monotone in its argument: if s ⊆ t
,
then closure s ≤ closure t
.
An induction principle for closure membership. If p
holds for 0
, 1
, and all elements
of s
, and is preserved under addition, negation, and multiplication, then p
holds for all
elements of the closure of s
.
The difference with NonUnitalSubring.closure_induction
is that this acts on the
subtype.
An induction principle for closure membership, for predicates with two arguments.
If all elements of s : Set A
commute pairwise, then closure s
is a commutative ring.
Equations
Instances For
closure
forms a Galois insertion with the coercion to set.
Equations
- NonUnitalSubring.gi R = { choice := fun (s : Set R) (x : ↑(NonUnitalSubring.closure s) ≤ s) => NonUnitalSubring.closure s, gc := ⋯, le_l_u := ⋯, choice_eq := ⋯ }
Instances For
Closure of a NonUnitalSubring
S
equals S
.
Given NonUnitalSubring
s s
, t
of rings R
, S
respectively, s.prod t
is s ×ˢ t
as a NonUnitalSubring
of R × S
.
Equations
Instances For
Product of NonUnitalSubring
s is isomorphic to their product as rings.
Equations
- s.prodEquiv t = { toEquiv := Equiv.Set.prod ↑s ↑t, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The underlying set of a non-empty directed Sup of NonUnitalSubring
s is just a union of the
NonUnitalSubring
s. Note that this fails without the directedness assumption (the union of two
NonUnitalSubring
s is typically not a NonUnitalSubring
)
Restriction of a ring homomorphism to its range interpreted as a NonUnitalSubring
.
This is the bundled version of Set.rangeFactorization
.
Equations
- f.rangeRestrict = NonUnitalRingHom.codRestrict f f.range ⋯
Instances For
The range of a surjective ring homomorphism is the whole of the codomain.
The NonUnitalSubring
of elements x : R
such that f x = g x
, i.e.,
the equalizer of f and g as a NonUnitalSubring
of R
Equations
Instances For
If two ring homomorphisms are equal on a set, then they are equal on its
NonUnitalSubring
closure.
The image under a ring homomorphism of the NonUnitalSubring
generated by a set equals
the NonUnitalSubring
generated by the image of the set.
The ring homomorphism associated to an inclusion of NonUnitalSubring
s.
Equations
Instances For
Makes the identity isomorphism from a proof two NonUnitalSubring
s of a multiplicative
monoid are equal.
Equations
- RingEquiv.nonUnitalSubringCongr h = { toEquiv := Equiv.setCongr ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Restrict a ring homomorphism with a left inverse to a ring isomorphism to its
RingHom.range
.
Equations
- One or more equations did not get rendered due to their size.