Operations on Submonoids #
In this file we define various operations on Submonoids and MonoidHoms.
Main definitions #
Conversion between multiplicative and additive definitions #
Submonoid.toAddSubmonoid,Submonoid.toAddSubmonoid',AddSubmonoid.toSubmonoid,AddSubmonoid.toSubmonoid': convert between multiplicative and additive submonoids ofM,Multiplicative M, andAdditive M. These are stated asOrderIsos.
(Commutative) monoid structure on a submonoid #
Submonoid.toMonoid,Submonoid.toCommMonoid: a submonoid inherits a (commutative) monoid structure.
Group actions by submonoids #
Submonoid.MulAction,Submonoid.DistribMulAction: a submonoid inherits (distributive) multiplicative actions.
Operations on submonoids #
Submonoid.comap: preimage of a submonoid under a monoid homomorphism as a submonoid of the domain;Submonoid.map: image of a submonoid under a monoid homomorphism as a submonoid of the codomain;Submonoid.prod: product of two submonoidss : Submonoid Mandt : Submonoid Nas a submonoid ofM × N;
Monoid homomorphisms between submonoid #
Submonoid.subtype: embedding of a submonoid into the ambient monoid.Submonoid.inclusion: given two submonoidsS,Tsuch thatS ≤ T,S.inclusion Tis the inclusion ofSintoTas a monoid homomorphism;MulEquiv.submonoidCongr: converts a proof ofS = Tinto a monoid isomorphism betweenSandT.Submonoid.prodEquiv: monoid isomorphism betweens.prod tands × t;
Operations on MonoidHoms #
MonoidHom.mrange: range of a monoid homomorphism as a submonoid of the codomain;MonoidHom.mker: kernel of a monoid homomorphism as a submonoid of the domain;MonoidHom.restrict: restrict a monoid homomorphism to a submonoid;MonoidHom.codRestrict: restrict the codomain of a monoid homomorphism to a submonoid;MonoidHom.mrangeRestrict: restrict a monoid homomorphism to its range;
Tags #
submonoid, range, product, map, comap
Conversion to/from Additive/Multiplicative #
Submonoids of monoid M are isomorphic to additive submonoids of Additive M.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Additive submonoids of an additive monoid Additive M are isomorphic to submonoids of M.
Instances For
Additive submonoids of an additive monoid A are isomorphic to
multiplicative submonoids of Multiplicative A.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Submonoids of a monoid Multiplicative A are isomorphic to additive submonoids of A.
Instances For
The preimage of a submonoid along a monoid homomorphism is a submonoid.
Equations
- Submonoid.comap f S = { carrier := ⇑f ⁻¹' ↑S, mul_mem' := ⋯, one_mem' := ⋯ }
Instances For
The preimage of an AddSubmonoid along an AddMonoid homomorphism is an AddSubmonoid.
Equations
- AddSubmonoid.comap f S = { carrier := ⇑f ⁻¹' ↑S, add_mem' := ⋯, zero_mem' := ⋯ }
Instances For
The image of a submonoid along a monoid homomorphism is a submonoid.
Equations
- Submonoid.map f S = { carrier := ⇑f '' ↑S, mul_mem' := ⋯, one_mem' := ⋯ }
Instances For
The image of an AddSubmonoid along an AddMonoid homomorphism is an AddSubmonoid.
Equations
- AddSubmonoid.map f S = { carrier := ⇑f '' ↑S, add_mem' := ⋯, zero_mem' := ⋯ }
Instances For
map f and comap f form a GaloisCoinsertion when f is injective.
Equations
Instances For
map f and comap f form a GaloisCoinsertion when f is injective.
Equations
Instances For
map f and comap f form a GaloisInsertion when f is surjective.
Equations
Instances For
map f and comap f form a GaloisInsertion when f is surjective.
Equations
Instances For
The top submonoid is isomorphic to the monoid.
Equations
Instances For
The top additive submonoid is isomorphic to the additive monoid.
Equations
Instances For
A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
use MulEquiv.submonoidMap for better definitional equalities.
Equations
- S.equivMapOfInjective f hf = { toEquiv := Equiv.Set.image (⇑f) (↑S) hf, map_mul' := ⋯ }
Instances For
An additive subgroup is isomorphic to its image under an injective function. If
you have an isomorphism, use AddEquiv.addSubmonoidMap for better definitional equalities.
Equations
- S.equivMapOfInjective f hf = { toEquiv := Equiv.Set.image (⇑f) (↑S) hf, map_add' := ⋯ }
Instances For
Given submonoids s, t of monoids M, N respectively, s × t as a submonoid
of M × N.
Instances For
Given AddSubmonoids s, t of AddMonoids A, B respectively, s × t
as an AddSubmonoid of A × B.
Instances For
The product of submonoids is isomorphic to their product as monoids.
Equations
- s.prodEquiv t = { toEquiv := Equiv.Set.prod ↑s ↑t, map_mul' := ⋯ }
Instances For
The product of additive submonoids is isomorphic to their product as additive monoids.
Equations
- s.prodEquiv t = { toEquiv := Equiv.Set.prod ↑s ↑t, map_add' := ⋯ }
Instances For
For many categories (monoids, modules, rings, ...) the set-theoretic image of a morphism f is
a subobject of the codomain. When this is the case, it is useful to define the range of a morphism
in such a way that the underlying carrier set of the range subobject is definitionally
Set.range f. In particular this means that the types ↥(Set.range f) and ↥f.range are
interchangeable without proof obligations.
A convenient candidate definition for range which is mathematically correct is map ⊤ f, just as
Set.range could have been defined as f '' Set.univ. However, this lacks the desired definitional
convenience, in that it both does not match Set.range, and that it introduces a redundant x ∈ ⊤
term which clutters proofs. In such a case one may resort to the copy
pattern. A copy function converts the definitional problem for the carrier set of a subobject
into a one-off propositional proof obligation which one discharges while writing the definition of
the definitionally convenient range (the parameter hs in the example below).
A good example is the case of a morphism of monoids. A convenient definition for
MonoidHom.mrange would be (⊤ : Submonoid M).map f. However since this lacks the required
definitional convenience, we first define Submonoid.copy as follows:
protected def copy (S : Submonoid M) (s : Set M) (hs : s = S) : Submonoid M :=
{ carrier := s,
one_mem' := hs.symm ▸ S.one_mem',
mul_mem' := hs.symm ▸ S.mul_mem' }
and then finally define:
def mrange (f : M →* N) : Submonoid N :=
((⊤ : Submonoid M).map f).copy (Set.range f) Set.image_univ.symm
Instances For
The range of a monoid homomorphism is a submonoid. See Note [range copy pattern].
Equations
- MonoidHom.mrange f = (Submonoid.map f ⊤).copy (Set.range ⇑f) ⋯
Instances For
The range of an AddMonoidHom is an AddSubmonoid.
Equations
- AddMonoidHom.mrange f = (AddSubmonoid.map f ⊤).copy (Set.range ⇑f) ⋯
Instances For
The range of a surjective monoid hom is the whole of the codomain.
The range of a surjective AddMonoid hom is the whole of the codomain.
The image under a monoid hom of the submonoid generated by a set equals the submonoid generated by the image of the set.
The image under an AddMonoid hom of the AddSubmonoid generated by a set equals
the AddSubmonoid generated by the image of the set.
Restriction of a monoid hom to a submonoid of the domain.
Equations
- f.restrict s = f.comp (SubmonoidClass.subtype s)
Instances For
Restriction of an AddMonoid hom to an AddSubmonoid of the domain.
Equations
- f.restrict s = f.comp (AddSubmonoidClass.subtype s)
Instances For
Restriction of a monoid hom to a submonoid of the codomain.
Instances For
Restriction of an AddMonoid hom to an AddSubmonoid of the codomain.
Instances For
Restriction of a monoid hom to its range interpreted as a submonoid.
Equations
- f.mrangeRestrict = f.codRestrict (MonoidHom.mrange f) ⋯
Instances For
Restriction of an AddMonoid hom to its range interpreted as a submonoid.
Equations
- f.mrangeRestrict = f.codRestrict (AddMonoidHom.mrange f) ⋯
Instances For
The multiplicative kernel of a monoid hom is the submonoid of elements x : G such
that f x = 1.
Equations
Instances For
The additive kernel of an AddMonoid hom is the AddSubmonoid of elements such that
f x = 0.
Equations
Instances For
Equations
- MonoidHom.decidableMemMker f x = decidable_of_iff (f x = 1) ⋯
Equations
- AddMonoidHom.decidableMemMker f x = decidable_of_iff (f x = 0) ⋯
The MonoidHom from the preimage of a submonoid to itself.
Equations
- f.submonoidComap N' = { toFun := fun (x : ↥(Submonoid.comap f N')) => ⟨f ↑x, ⋯⟩, map_one' := ⋯, map_mul' := ⋯ }
Instances For
The AddMonoidHom from the preimage of an additive submonoid to itself.
Equations
- f.addSubmonoidComap N' = { toFun := fun (x : ↥(AddSubmonoid.comap f N')) => ⟨f ↑x, ⋯⟩, map_zero' := ⋯, map_add' := ⋯ }
Instances For
The MonoidHom from a submonoid to its image.
See MulEquiv.SubmonoidMap for a variant for MulEquivs.
Instances For
The AddMonoidHom from an additive submonoid to its image. See AddEquiv.AddSubmonoidMap
for a variant for AddEquivs.
Equations
Instances For
The monoid hom associated to an inclusion of submonoids.
Equations
- Submonoid.inclusion h = S.subtype.codRestrict T ⋯
Instances For
The AddMonoid hom associated to an inclusion of submonoids.
Equations
- AddSubmonoid.inclusion h = S.subtype.codRestrict T ⋯
Instances For
A submonoid is either the trivial submonoid or nontrivial.
An additive submonoid is either the trivial additive submonoid or nontrivial.
A submonoid is either the trivial submonoid or contains a nonzero element.
An additive submonoid is either the trivial additive submonoid or contains a nonzero element.
A version of Set.pi for submonoids. Given an index set I and a family of submodules
s : Π i, Submonoid f i, pi I s is the submonoid of dependent functions f : Π i, f i such that
f i belongs to Pi I s whenever i ∈ I.
Equations
Instances For
A version of Set.pi for AddSubmonoids. Given an index set I and a family
of submodules s : Π i, AddSubmonoid f i, pi I s is the AddSubmonoid of dependent functions
f : Π i, f i such that f i belongs to pi I s whenever i ∈ I.
Equations
Instances For
Makes the identity isomorphism from a proof that two submonoids of a multiplicative monoid are equal.
Equations
- MulEquiv.submonoidCongr h = { toEquiv := Equiv.setCongr ⋯, map_mul' := ⋯ }
Instances For
Makes the identity additive isomorphism from a proof two submonoids of an additive monoid are equal.
Equations
- AddEquiv.addSubmonoidCongr h = { toEquiv := Equiv.setCongr ⋯, map_add' := ⋯ }
Instances For
A monoid homomorphism f : M →* N with a left-inverse g : N → M defines a multiplicative
equivalence between M and f.mrange.
This is a bidirectional version of MonoidHom.mrange_restrict.
Equations
- MulEquiv.ofLeftInverse' f h = { toFun := ⇑f.mrangeRestrict, invFun := g ∘ ⇑(MonoidHom.mrange f).subtype, left_inv := h, right_inv := ⋯, map_mul' := ⋯ }
Instances For
An additive monoid homomorphism f : M →+ N with a left-inverse g : N → M defines an
additive equivalence between M and f.mrange. This is a bidirectional version of
AddMonoidHom.mrange_restrict.
Equations
- AddEquiv.ofLeftInverse' f h = { toFun := ⇑f.mrangeRestrict, invFun := g ∘ ⇑(AddMonoidHom.mrange f).subtype, left_inv := h, right_inv := ⋯, map_add' := ⋯ }
Instances For
A MulEquiv φ between two monoids M and N induces a MulEquiv between
a submonoid S ≤ M and the submonoid φ(S) ≤ N.
See MonoidHom.submonoidMap for a variant for MonoidHoms.
Equations
- e.submonoidMap S = { toEquiv := (↑e).image ↑S, map_mul' := ⋯ }
Instances For
An AddEquiv φ between two additive monoids M and N induces an AddEquiv
between a submonoid S ≤ M and the submonoid φ(S) ≤ N. See
AddMonoidHom.addSubmonoidMap for a variant for AddMonoidHoms.
Equations
- e.addSubmonoidMap S = { toEquiv := (↑e).image ↑S, map_add' := ⋯ }
Instances For
Alias of AddEquiv.addSubmonoidMap_symm_apply.
The multiplicative equivalence between the type of units of M and the submonoid of unit
elements of M.
Equations
- Submonoid.unitsTypeEquivIsUnitSubmonoid = { toFun := fun (x : Mˣ) => ⟨↑x, ⋯⟩, invFun := fun (x : ↥(IsUnit.submonoid M)) => IsUnit.unit ⋯, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
The additive equivalence between the type of additive units of
M and the additive submonoid whose elements are the additive units of M.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Alias of Nat.addSubmonoidClosure_one.