Congruence relations #
This file proves basic properties of the quotient of a type by a congruence relation.
The second half of the file concerns congruence relations on monoids, in which case the quotient by the congruence relation is also a monoid. There are results about the universal property of quotients of monoids, and the isomorphism theorems for monoids.
Implementation notes #
A congruence relation on a monoid M can be thought of as a submonoid of M × M for which
membership is an equivalence relation, but whilst this fact is established in the file, it is not
used, since this perspective adds more layers of definitional unfolding.
Tags #
congruence, congruence relation, quotient, quotient by congruence relation, monoid, quotient monoid, isomorphism theorems
Given types with additions M, N, the product of two congruence relations
c on M and d on N: (x₁, x₂), (y₁, y₂) ∈ M × N are related by c.prod d iff x₁
is related to y₁ by c and x₂ is related to y₂ by d.
Equations
- c.prod d = { toSetoid := c.prod d.toSetoid, add' := ⋯ }
Instances For
Makes an additive isomorphism of quotients by two additive congruence relations, given that the relations are equal.
Equations
- AddCon.congr h = { toEquiv := Quotient.congr (Equiv.refl M) ⋯, map_add' := ⋯ }
Instances For
The AddSubmonoid of M × M defined by an additive congruence
relation on an AddMonoid M.
Instances For
The submonoid of M × M defined by a congruence relation on a monoid M.
Instances For
The additive congruence relation on an AddMonoid M from
an AddSubmonoid of M × M for which membership is an equivalence relation.
Equations
- AddCon.ofAddSubmonoid N H = { r := fun (x y : M) => (x, y) ∈ N, iseqv := H, add' := ⋯ }
Instances For
The congruence relation on a monoid M from a submonoid of M × M for which membership
is an equivalence relation.
Equations
- Con.ofSubmonoid N H = { r := fun (x y : M) => (x, y) ∈ N, iseqv := H, mul' := ⋯ }
Instances For
Coercion from a congruence relation c on an AddMonoid M
to the AddSubmonoid of M × M whose elements are (x, y) such that x
is related to y by c.
Coercion from a congruence relation c on a monoid M to the submonoid of M × M whose
elements are (x, y) such that x is related to y by c.
Given an additive congruence relation c on an AddMonoid and a homomorphism f
constant on c's equivalence classes, f has the same image as the homomorphism that f induces
on the quotient.
Given a congruence relation c on a monoid and a homomorphism f constant on c's
equivalence classes, f has the same image as the homomorphism that f induces on the
quotient.
Given an AddMonoid homomorphism f, the induced homomorphism
on the quotient by f's kernel has the same image as f.
Given a monoid homomorphism f, the induced homomorphism on the quotient by f's kernel has
the same image as f.
The first isomorphism theorem for AddMonoids.
Equations
- AddCon.quotientKerEquivRange f = { toEquiv := Equiv.ofBijective ⇑((AddEquiv.addSubmonoidCongr ⋯).toAddMonoidHom.comp (AddCon.kerLift f).mrangeRestrict) ⋯, map_add' := ⋯ }
Instances For
The first isomorphism theorem for monoids.
Equations
- Con.quotientKerEquivRange f = { toEquiv := Equiv.ofBijective ⇑((MulEquiv.submonoidCongr ⋯).toMonoidHom.comp (Con.kerLift f).mrangeRestrict) ⋯, map_mul' := ⋯ }
Instances For
The first isomorphism theorem for AddMonoids in the case of a homomorphism
with right inverse.
Equations
- AddCon.quotientKerEquivOfRightInverse f g hf = { toFun := ⇑(AddCon.kerLift f), invFun := AddCon.toQuotient ∘ g, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
The first isomorphism theorem for monoids in the case of a homomorphism with right inverse.
Equations
- Con.quotientKerEquivOfRightInverse f g hf = { toFun := ⇑(Con.kerLift f), invFun := Con.toQuotient ∘ g, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
The first isomorphism theorem for AddMonoids in the case of a surjective
homomorphism.
For a computable version, see AddCon.quotientKerEquivOfRightInverse.
Equations
Instances For
The first isomorphism theorem for Monoids in the case of a surjective homomorphism.
For a computable version, see Con.quotientKerEquivOfRightInverse.
Equations
Instances For
The second isomorphism theorem for AddMonoids.
Equations
- c.comapQuotientEquiv f = (AddCon.congr ⋯).trans (AddCon.quotientKerEquivRange (c.mk'.comp f))
Instances For
The second isomorphism theorem for monoids.
Equations
- c.comapQuotientEquiv f = (Con.congr ⋯).trans (Con.quotientKerEquivRange (c.mk'.comp f))
Instances For
The third isomorphism theorem for AddMonoids.
Equations
- c.quotientQuotientEquivQuotient d h = { toEquiv := c.quotientQuotientEquivQuotient d.toSetoid h, map_add' := ⋯ }
Instances For
The third isomorphism theorem for monoids.
Equations
- c.quotientQuotientEquivQuotient d h = { toEquiv := c.quotientQuotientEquivQuotient d.toSetoid h, map_mul' := ⋯ }
Instances For
Equations
- c.instVAdd = { vadd := fun (a : α) => Quotient.map' (fun (x : M) => a +ᵥ x) ⋯ }
Equations
- c.instSMul = { smul := fun (a : α) => Quotient.map' (fun (x : M) => a • x) ⋯ }
Equations
- c.addAction = AddAction.mk ⋯ ⋯
Equations
- c.mulAction = MulAction.mk ⋯ ⋯
Equations
- c.mulDistribMulAction = MulDistribMulAction.mk ⋯ ⋯