# 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))
```