NonUnitalSubrings #
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 Mand coercioncoe : NonUnitalSubring M → Set Mform aGaloisInsertion.comap f B : NonUnitalSubring A: the preimage of a non-unital subringBalong the non-unital ring homomorphismfmap f A : NonUnitalSubring B: the image of a non-unital subringAalong 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 ofRwheref 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 = let __src := NonUnitalSubsemiringClass.subtype s; let __src := ↑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 = let __src := 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 = let __src := 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 = let __src := sm.copy s ⋯; let __src_1 := sa.copy s ⋯; { carrier := __src.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
- One or more equations did not get rendered due to their size.
Instances For
map #
The image of a NonUnitalSubring along a ring homomorphism is a NonUnitalSubring.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A NonUnitalSubring is isomorphic to its image under an injective function
Equations
- s.equivMapOfInjective f hf = let __src := Equiv.Set.image (⇑f) (↑s) hf; { toEquiv := __src, 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 NonUnitalSubrings 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) ⋯ ⋯ }
NonUnitalSubrings of a ring form a complete lattice.
Equations
- NonUnitalSubring.instCompleteLattice = let __src := completeLatticeOfInf (NonUnitalSubring R) ⋯; 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 = let __src := NonUnitalSubsemiring.center R; { toNonUnitalSubsemiring := __src, neg_mem' := ⋯ }
Instances For
The center is commutative and associative.
Equations
- One or more equations did not get rendered due to their size.
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
- NonUnitalSubring.closureNonUnitalCommRingOfComm hcomm = let __src := (NonUnitalSubring.closure s).toNonUnitalRing; NonUnitalCommRing.mk ⋯
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 NonUnitalSubrings s, t of rings R, S respectively, s.prod t is s ×ˢ t
as a NonUnitalSubring of R × S.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Product of NonUnitalSubrings is isomorphic to their product as rings.
Equations
- s.prodEquiv t = let __src := Equiv.Set.prod ↑s ↑t; { toEquiv := __src, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The underlying set of a non-empty directed Sup of NonUnitalSubrings is just a union of the
NonUnitalSubrings. Note that this fails without the directedness assumption (the union of two
NonUnitalSubrings 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 NonUnitalSubrings.
Equations
Instances For
Makes the identity isomorphism from a proof two NonUnitalSubrings of a multiplicative
monoid are equal.
Equations
- RingEquiv.nonUnitalSubringCongr h = let __src := Equiv.setCongr ⋯; { toEquiv := __src, 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.