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.domRestrict: restrict a monoid homomorphism to a submonoid of its domain;MonoidHom.restrict: restrict the domain and codomain of a monoid homomorphism;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 MonoidHom is a Submonoid.
Equations
- Submonoid.comap f S = { carrier := ⇑f ⁻¹' ↑S, mul_mem' := ⋯, one_mem' := ⋯ }
Instances For
The preimage of an AddSubmonoid along an AddMonoidHom is an AddSubmonoid.
Equations
- AddSubmonoid.comap f S = { carrier := ⇑f ⁻¹' ↑S, add_mem' := ⋯, zero_mem' := ⋯ }
Instances For
The image of a Submonoid along a MonoidHom is a Submonoid.
Equations
- Submonoid.map f S = { carrier := ⇑f '' ↑S, mul_mem' := ⋯, one_mem' := ⋯ }
Instances For
The image of an AddSubmonoid along an AddMonoidHom 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
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 AddSubgroup 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 AddSubmonoids is isomorphic to their product as AddMonoids.
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
Equations
Instances For
The range of a MonoidHom 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 MonoidHom is the whole of the codomain.
The range of a surjective AddMonoidHom is the whole of the codomain.
The image under a MonoidHom of the Submonoid generated by a set equals the Submonoid
generated by the image of the set.
The image under an AddMonoidHom of the AddSubmonoid generated by a set equals the
AddSubmonoid generated by the image of the set.
Restriction of a MonoidHom to a Submonoid of the domain.
Equations
- f.domRestrict s = f.comp (SubmonoidClass.subtype s)
Instances For
Restriction of an AddMonoidHom to an AddSubmonoid of the domain.
Equations
- f.domRestrict s = f.comp (AddSubmonoidClass.subtype s)
Instances For
Alias of MonoidHom.domRestrict_apply.
Alias of AddMonoidHom.domRestrict_apply.
Alias of MonoidHom.domRestrict_eq_one_iff.
Alias of AddMonoidHom.domRestrict_eq_zero_iff.
Alias of MonoidHom.domRestrict_mrange.
Alias of AddMonoidHom.domRestrict_mrange.
A version of MonoidHom.domRestrict as a homomorphism.
Equations
- MonoidHom.domRestrictHom M' A = { toFun := fun (f : M →* A) => f.domRestrict M', map_one' := ⋯, map_mul' := ⋯ }
Instances For
A version of AddMonoidHom.domRestrict as a homomorphism.
Equations
- AddMonoidHom.domRestrictHom M' A = { toFun := fun (f : M →+ A) => f.domRestrict M', map_zero' := ⋯, map_add' := ⋯ }
Instances For
Alias of MonoidHom.domRestrictHom.
A version of MonoidHom.domRestrict as a homomorphism.
Equations
Instances For
Alias of AddMonoidHom.domRestrictHom.
A version of AddMonoidHom.domRestrict as a homomorphism.
Equations
Instances For
Alias of MonoidHom.domRestrictHom_apply.
Alias of AddMonoidHom.domRestrictHom_apply.
Restriction of a MonoidHom to a Submonoid of the codomain.
Instances For
Restriction of an AddMonoidHom to an AddSubmonoid of the codomain.
Instances For
Restriction of a MonoidHom to its range interpreted as a Submonoid.
Equations
- f.mrangeRestrict = f.codRestrict (MonoidHom.mrange f) ⋯
Instances For
Restriction of an AddMonoidHom to its range interpreted as an AddSubmonoid.
Equations
- f.mrangeRestrict = f.codRestrict (AddMonoidHom.mrange f) ⋯
Instances For
The multiplicative kernel of a MonoidHom is the Submonoid of elements x : G such that
f x = 1.
Equations
Instances For
The additive kernel of an AddMonoidHom 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) ⋯
Alias of MonoidHom.domRestrict_mker.
Alias of AddMonoidHom.domRestrict_mker.
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 AddSubmonoid 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 AddSubmonoid to its image.
See AddEquiv.AddSubmonoidMap for a variant for AddEquivs.
Equations
Instances For
The MonoidHom associated to an inclusion of Submonoids.
Equations
- Submonoid.inclusion h = S.subtype.codRestrict T ⋯
Instances For
The AddMonoidHom associated to an inclusion of AddSubmonoids.
Equations
- AddSubmonoid.inclusion h = S.subtype.codRestrict T ⋯
Instances For
An AddSubmonoid is either the trivial AddSubmonoid or nontrivial.
An AddSubmonoid is either the trivial AddSubmonoid or contains a nonzero element.
A version of Set.pi for Submonoids. Given an index set I and a family of Submonoids
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 AddSubmonoids 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
Restrict the domain and codomain of a MonoidHom.
Equations
- MonoidHom.restrict h = (f.domRestrict M').codRestrict N' ⋯
Instances For
Restrict the domain and codomain of an AddMonoidHom.
Equations
- AddMonoidHom.restrict h = (f.domRestrict M').codRestrict N' ⋯
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.mrangeRestrict.
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.mrangeRestrict.
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
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.