# Equivalences of types equipped with automorphisms ```agda module structured-types.equivalences-types-equipped-with-automorphisms where ``` <details><summary>Imports</summary> ```agda open import foundation.commuting-squares-of-maps open import foundation.dependent-pair-types open import foundation.equivalence-extensionality open import foundation.equivalences open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.univalence open import foundation.universe-levels open import structured-types.equivalences-types-equipped-with-endomorphisms open import structured-types.morphisms-types-equipped-with-automorphisms open import structured-types.types-equipped-with-automorphisms ``` </details> ## Definition ### The predicate of being an equivalence of types equipped with automorphisms ```agda module _ {l1 l2 : Level} (X : Type-With-Automorphism l1) (Y : Type-With-Automorphism l2) where is-equiv-hom-Type-With-Automorphism : (h : hom-Type-With-Automorphism X Y) → UU (l1 ⊔ l2) is-equiv-hom-Type-With-Automorphism = is-equiv-hom-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) ``` ### Equivalences of types equipped with automorphisms ```agda module _ {l1 l2 : Level} (X : Type-With-Automorphism l1) (Y : Type-With-Automorphism l2) where equiv-Type-With-Automorphism : UU (l1 ⊔ l2) equiv-Type-With-Automorphism = equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) equiv-Type-With-Automorphism' : UU (l1 ⊔ l2) equiv-Type-With-Automorphism' = equiv-Type-With-Endomorphism' ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) compute-equiv-Type-With-Automorphism : equiv-Type-With-Automorphism' ≃ equiv-Type-With-Automorphism compute-equiv-Type-With-Automorphism = compute-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) equiv-equiv-Type-With-Automorphism : equiv-Type-With-Automorphism → type-Type-With-Automorphism X ≃ type-Type-With-Automorphism Y equiv-equiv-Type-With-Automorphism = equiv-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) map-equiv-Type-With-Automorphism : equiv-Type-With-Automorphism → type-Type-With-Automorphism X → type-Type-With-Automorphism Y map-equiv-Type-With-Automorphism = map-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) coherence-square-equiv-Type-With-Automorphism : (e : equiv-Type-With-Automorphism) → coherence-square-maps ( map-equiv-Type-With-Automorphism e) ( map-Type-With-Automorphism X) ( map-Type-With-Automorphism Y) ( map-equiv-Type-With-Automorphism e) coherence-square-equiv-Type-With-Automorphism = coherence-square-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) hom-equiv-Type-With-Automorphism : equiv-Type-With-Automorphism → hom-Type-With-Automorphism X Y hom-equiv-Type-With-Automorphism = hom-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) is-equiv-equiv-Type-With-Automorphism : (e : equiv-Type-With-Automorphism) → is-equiv-hom-Type-With-Automorphism X Y (hom-equiv-Type-With-Automorphism e) is-equiv-equiv-Type-With-Automorphism = is-equiv-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) ``` ### The identity equivalence ```agda module _ {l1 : Level} (X : Type-With-Automorphism l1) where id-equiv-Type-With-Automorphism : equiv-Type-With-Automorphism X X id-equiv-Type-With-Automorphism = id-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ``` ### Composition for equivalences of types equipped with automorphisms ```agda comp-equiv-Type-With-Automorphism : {l1 l2 l3 : Level} (X : Type-With-Automorphism l1) (Y : Type-With-Automorphism l2) (Z : Type-With-Automorphism l3) → equiv-Type-With-Automorphism Y Z → equiv-Type-With-Automorphism X Y → equiv-Type-With-Automorphism X Z comp-equiv-Type-With-Automorphism X Y Z = comp-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) ( type-with-endomorphism-Type-With-Automorphism Z) ``` ### Inverses of equivalences of types equipped with automorphisms ```agda inv-equiv-Type-With-Automorphism : {l1 l2 : Level} (X : Type-With-Automorphism l1) (Y : Type-With-Automorphism l2) → equiv-Type-With-Automorphism X Y → equiv-Type-With-Automorphism Y X inv-equiv-Type-With-Automorphism X Y = inv-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) ``` ### Homotopies of equivalences of types equipped with automorphisms ```agda module _ {l1 l2 : Level} (X : Type-With-Automorphism l1) (Y : Type-With-Automorphism l2) where htpy-equiv-Type-With-Automorphism : (e f : equiv-Type-With-Automorphism X Y) → UU (l1 ⊔ l2) htpy-equiv-Type-With-Automorphism = htpy-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) refl-htpy-equiv-Type-With-Automorphism : ( e : equiv-Type-With-Automorphism X Y) → htpy-equiv-Type-With-Automorphism e e refl-htpy-equiv-Type-With-Automorphism = refl-htpy-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) htpy-eq-equiv-Type-With-Automorphism : (e f : equiv-Type-With-Automorphism X Y) → e = f → htpy-equiv-Type-With-Automorphism e f htpy-eq-equiv-Type-With-Automorphism = htpy-eq-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) is-torsorial-htpy-equiv-Type-With-Automorphism : (e : equiv-Type-With-Automorphism X Y) → is-torsorial (htpy-equiv-Type-With-Automorphism e) is-torsorial-htpy-equiv-Type-With-Automorphism = is-torsorial-htpy-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) is-equiv-htpy-eq-equiv-Type-With-Automorphism : (e f : equiv-Type-With-Automorphism X Y) → is-equiv (htpy-eq-equiv-Type-With-Automorphism e f) is-equiv-htpy-eq-equiv-Type-With-Automorphism = is-equiv-htpy-eq-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) extensionality-equiv-Type-With-Automorphism : (e f : equiv-Type-With-Automorphism X Y) → (e = f) ≃ htpy-equiv-Type-With-Automorphism e f extensionality-equiv-Type-With-Automorphism = extensionality-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) eq-htpy-equiv-Type-With-Automorphism : (e f : equiv-Type-With-Automorphism X Y) → htpy-equiv-Type-With-Automorphism e f → e = f eq-htpy-equiv-Type-With-Automorphism = eq-htpy-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) ``` ## Properties ### Unit laws for composition of equivalences of types equipped with automorphisms ```agda module _ {l1 l2 : Level} (X : Type-With-Automorphism l1) (Y : Type-With-Automorphism l2) where left-unit-law-comp-equiv-Type-With-Automorphism : (e : equiv-Type-With-Automorphism X Y) → comp-equiv-Type-With-Automorphism X Y Y ( id-equiv-Type-With-Automorphism Y) e = e left-unit-law-comp-equiv-Type-With-Automorphism = left-unit-law-comp-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) right-unit-law-comp-equiv-Type-With-Automorphism : (e : equiv-Type-With-Automorphism X Y) → comp-equiv-Type-With-Automorphism X X Y e ( id-equiv-Type-With-Automorphism X) = e right-unit-law-comp-equiv-Type-With-Automorphism = right-unit-law-comp-equiv-Type-With-Endomorphism ( type-with-endomorphism-Type-With-Automorphism X) ( type-with-endomorphism-Type-With-Automorphism Y) ``` ### Extensionality of types equipped with automorphisms ```agda module _ {l1 : Level} (X : Type-With-Automorphism l1) where equiv-eq-Type-With-Automorphism : ( Y : Type-With-Automorphism l1) → X = Y → equiv-Type-With-Automorphism X Y equiv-eq-Type-With-Automorphism .X refl = id-equiv-Type-With-Automorphism X is-torsorial-equiv-Type-With-Automorphism : is-torsorial (equiv-Type-With-Automorphism X) is-torsorial-equiv-Type-With-Automorphism = is-torsorial-Eq-structure ( is-torsorial-equiv (type-Type-With-Automorphism X)) ( type-Type-With-Automorphism X , id-equiv) ( is-torsorial-htpy-equiv (automorphism-Type-With-Automorphism X)) is-equiv-equiv-eq-Type-With-Automorphism : ( Y : Type-With-Automorphism l1) → is-equiv (equiv-eq-Type-With-Automorphism Y) is-equiv-equiv-eq-Type-With-Automorphism = fundamental-theorem-id is-torsorial-equiv-Type-With-Automorphism equiv-eq-Type-With-Automorphism extensionality-Type-With-Automorphism : (Y : Type-With-Automorphism l1) → (X = Y) ≃ equiv-Type-With-Automorphism X Y pr1 (extensionality-Type-With-Automorphism Y) = equiv-eq-Type-With-Automorphism Y pr2 (extensionality-Type-With-Automorphism Y) = is-equiv-equiv-eq-Type-With-Automorphism Y eq-equiv-Type-With-Automorphism : (Y : Type-With-Automorphism l1) → equiv-Type-With-Automorphism X Y → X = Y eq-equiv-Type-With-Automorphism Y = map-inv-is-equiv (is-equiv-equiv-eq-Type-With-Automorphism Y) module _ {l : Level} (X : Type-With-Automorphism l) (Y : Type-With-Automorphism l) (Z : Type-With-Automorphism l) where preserves-concat-equiv-eq-Type-With-Automorphism : (p : X = Y) (q : Y = Z) → ( equiv-eq-Type-With-Automorphism X Z (p ∙ q)) = ( comp-equiv-Type-With-Automorphism X Y Z ( equiv-eq-Type-With-Automorphism Y Z q) ( equiv-eq-Type-With-Automorphism X Y p)) preserves-concat-equiv-eq-Type-With-Automorphism refl q = inv ( right-unit-law-comp-equiv-Type-With-Automorphism X Z ( equiv-eq-Type-With-Automorphism X Z q)) ```