The precategory of orbits of a monoid action
module group-theory.orbits-monoid-actions where
Imports
open import category-theory.precategories open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types open import foundation.propositions open import foundation.sets open import foundation.subtype-identity-principle open import foundation.universe-levels open import group-theory.monoid-actions open import group-theory.monoids
Idea
Given a monoid action M → endo-Monoid X
we can define a category in which the
objects are the elements of the set X
and a morphism from x
to y
is an
element m
of the monoid M
such that mx = y
.
Definition
The precategory of orbits of a monoid action
module _ {l1 l2 : Level} (M : Monoid l1) (X : Monoid-Action l2 M) where hom-orbit-Monoid-Action : (x y : type-Monoid-Action M X) → UU (l1 ⊔ l2) hom-orbit-Monoid-Action x y = Σ (type-Monoid M) ( λ m → Id (mul-Monoid-Action M X m x) y) element-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} → hom-orbit-Monoid-Action x y → type-Monoid M element-hom-orbit-Monoid-Action f = pr1 f eq-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f : hom-orbit-Monoid-Action x y) → Id (mul-Monoid-Action M X (element-hom-orbit-Monoid-Action f) x) y eq-hom-orbit-Monoid-Action f = pr2 f htpy-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f g : hom-orbit-Monoid-Action x y) → UU l1 htpy-hom-orbit-Monoid-Action {x} {y} f g = Id ( element-hom-orbit-Monoid-Action f) ( element-hom-orbit-Monoid-Action g) refl-htpy-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f : hom-orbit-Monoid-Action x y) → htpy-hom-orbit-Monoid-Action f f refl-htpy-hom-orbit-Monoid-Action f = refl htpy-eq-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f g : hom-orbit-Monoid-Action x y) → Id f g → htpy-hom-orbit-Monoid-Action f g htpy-eq-hom-orbit-Monoid-Action f .f refl = refl-htpy-hom-orbit-Monoid-Action f is-contr-total-htpy-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f : hom-orbit-Monoid-Action x y) → is-contr (Σ (hom-orbit-Monoid-Action x y) (htpy-hom-orbit-Monoid-Action f)) is-contr-total-htpy-hom-orbit-Monoid-Action {x} {y} f = is-contr-total-Eq-subtype ( is-contr-total-path (element-hom-orbit-Monoid-Action f)) ( λ u → is-set-type-Monoid-Action M X (mul-Monoid-Action M X u x) y) ( element-hom-orbit-Monoid-Action f) ( refl) ( eq-hom-orbit-Monoid-Action f) is-equiv-htpy-eq-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f g : hom-orbit-Monoid-Action x y) → is-equiv (htpy-eq-hom-orbit-Monoid-Action f g) is-equiv-htpy-eq-hom-orbit-Monoid-Action f = fundamental-theorem-id ( is-contr-total-htpy-hom-orbit-Monoid-Action f) ( htpy-eq-hom-orbit-Monoid-Action f) extensionality-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f g : hom-orbit-Monoid-Action x y) → Id f g ≃ htpy-hom-orbit-Monoid-Action f g pr1 (extensionality-hom-orbit-Monoid-Action f g) = htpy-eq-hom-orbit-Monoid-Action f g pr2 (extensionality-hom-orbit-Monoid-Action f g) = is-equiv-htpy-eq-hom-orbit-Monoid-Action f g eq-htpy-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} {f g : hom-orbit-Monoid-Action x y} → htpy-hom-orbit-Monoid-Action f g → Id f g eq-htpy-hom-orbit-Monoid-Action {x} {y} {f} {g} = map-inv-is-equiv (is-equiv-htpy-eq-hom-orbit-Monoid-Action f g) is-prop-htpy-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f g : hom-orbit-Monoid-Action x y) → is-prop (htpy-hom-orbit-Monoid-Action f g) is-prop-htpy-hom-orbit-Monoid-Action f g = is-set-type-Monoid M ( element-hom-orbit-Monoid-Action f) ( element-hom-orbit-Monoid-Action g) is-set-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} → is-set (hom-orbit-Monoid-Action x y) is-set-hom-orbit-Monoid-Action {x} {y} f g = is-prop-equiv ( extensionality-hom-orbit-Monoid-Action f g) ( is-prop-htpy-hom-orbit-Monoid-Action f g) hom-orbit-monoid-action-Set : (x y : type-Monoid-Action M X) → Set (l1 ⊔ l2) pr1 (hom-orbit-monoid-action-Set x y) = hom-orbit-Monoid-Action x y pr2 (hom-orbit-monoid-action-Set x y) = is-set-hom-orbit-Monoid-Action id-hom-orbit-Monoid-Action : (x : type-Monoid-Action M X) → hom-orbit-Monoid-Action x x pr1 (id-hom-orbit-Monoid-Action x) = unit-Monoid M pr2 (id-hom-orbit-Monoid-Action x) = unit-law-mul-Monoid-Action M X x comp-hom-orbit-Monoid-Action : {x y z : type-Monoid-Action M X} → hom-orbit-Monoid-Action y z → hom-orbit-Monoid-Action x y → hom-orbit-Monoid-Action x z pr1 (comp-hom-orbit-Monoid-Action g f) = mul-Monoid M ( element-hom-orbit-Monoid-Action g) ( element-hom-orbit-Monoid-Action f) pr2 (comp-hom-orbit-Monoid-Action {x} g f) = ( associative-mul-Monoid-Action M X ( element-hom-orbit-Monoid-Action g) ( element-hom-orbit-Monoid-Action f) ( x)) ∙ ( ( ap-mul-Monoid-Action M X (eq-hom-orbit-Monoid-Action f)) ∙ ( eq-hom-orbit-Monoid-Action g)) associative-comp-hom-orbit-Monoid-Action : {x y z w : type-Monoid-Action M X} (h : hom-orbit-Monoid-Action z w) (g : hom-orbit-Monoid-Action y z) (f : hom-orbit-Monoid-Action x y) → Id ( comp-hom-orbit-Monoid-Action (comp-hom-orbit-Monoid-Action h g) f) ( comp-hom-orbit-Monoid-Action h (comp-hom-orbit-Monoid-Action g f)) associative-comp-hom-orbit-Monoid-Action h g f = eq-htpy-hom-orbit-Monoid-Action ( associative-mul-Monoid M ( element-hom-orbit-Monoid-Action h) ( element-hom-orbit-Monoid-Action g) ( element-hom-orbit-Monoid-Action f)) left-unit-law-comp-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f : hom-orbit-Monoid-Action x y) → Id (comp-hom-orbit-Monoid-Action (id-hom-orbit-Monoid-Action y) f) f left-unit-law-comp-hom-orbit-Monoid-Action f = eq-htpy-hom-orbit-Monoid-Action ( left-unit-law-mul-Monoid M (element-hom-orbit-Monoid-Action f)) right-unit-law-comp-hom-orbit-Monoid-Action : {x y : type-Monoid-Action M X} (f : hom-orbit-Monoid-Action x y) → Id (comp-hom-orbit-Monoid-Action f (id-hom-orbit-Monoid-Action x)) f right-unit-law-comp-hom-orbit-Monoid-Action f = eq-htpy-hom-orbit-Monoid-Action ( right-unit-law-mul-Monoid M (element-hom-orbit-Monoid-Action f)) orbit-monoid-action-Precategoryegory : Precategory l2 (l1 ⊔ l2) pr1 orbit-monoid-action-Precategoryegory = type-Monoid-Action M X pr1 (pr2 orbit-monoid-action-Precategoryegory) = hom-orbit-monoid-action-Set pr1 (pr1 (pr2 (pr2 orbit-monoid-action-Precategoryegory))) = comp-hom-orbit-Monoid-Action pr2 (pr1 (pr2 (pr2 orbit-monoid-action-Precategoryegory))) = associative-comp-hom-orbit-Monoid-Action pr1 (pr2 (pr2 (pr2 orbit-monoid-action-Precategoryegory))) = id-hom-orbit-Monoid-Action pr1 (pr2 (pr2 (pr2 (pr2 orbit-monoid-action-Precategoryegory)))) = left-unit-law-comp-hom-orbit-Monoid-Action pr2 (pr2 (pr2 (pr2 (pr2 orbit-monoid-action-Precategoryegory)))) = right-unit-law-comp-hom-orbit-Monoid-Action