# The symmetric identity types
```agda
module foundation.symmetric-identity-types where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.function-extensionality
open import foundation.functoriality-dependent-function-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.homotopy-induction
open import foundation.identity-types
open import foundation.structure-identity-principle
open import foundation.universe-levels
open import foundation.unordered-pairs
open import foundation-core.contractible-types
open import foundation-core.coproduct-types
open import foundation-core.equality-dependent-pair-types
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies
open import foundation-core.torsorial-type-families
open import univalent-combinatorics.standard-finite-types
```
</details>
## Idea
We construct a variant of the identity type equipped with a natural
`ℤ/2`-action.
## Definition
```agda
module _
{l : Level} {A : UU l}
where
symmetric-Id :
(a : unordered-pair A) → UU l
symmetric-Id a =
Σ A (λ x → (i : type-unordered-pair a) → x = element-unordered-pair a i)
module _
(a : unordered-pair A)
where
Eq-symmetric-Id :
(p q : symmetric-Id a) → UU l
Eq-symmetric-Id (x , H) q =
Σ (x = pr1 q) (λ p → (i : type-unordered-pair a) → H i = (p ∙ pr2 q i))
refl-Eq-symmetric-Id :
(p : symmetric-Id a) → Eq-symmetric-Id p p
pr1 (refl-Eq-symmetric-Id (x , H)) = refl
pr2 (refl-Eq-symmetric-Id (x , H)) i = refl
is-torsorial-Eq-symmetric-Id :
(p : symmetric-Id a) → is-torsorial (Eq-symmetric-Id p)
is-torsorial-Eq-symmetric-Id (x , H) =
is-torsorial-Eq-structure
( is-torsorial-Id x)
( x , refl)
( is-torsorial-htpy H)
Eq-eq-symmetric-Id :
(p q : symmetric-Id a) → p = q → Eq-symmetric-Id p q
Eq-eq-symmetric-Id p .p refl = refl-Eq-symmetric-Id p
is-equiv-Eq-eq-symmetric-Id :
(p q : symmetric-Id a) → is-equiv (Eq-eq-symmetric-Id p q)
is-equiv-Eq-eq-symmetric-Id p =
fundamental-theorem-id
( is-torsorial-Eq-symmetric-Id p)
( Eq-eq-symmetric-Id p)
extensionality-symmetric-Id :
(p q : symmetric-Id a) → (p = q) ≃ Eq-symmetric-Id p q
pr1 (extensionality-symmetric-Id p q) = Eq-eq-symmetric-Id p q
pr2 (extensionality-symmetric-Id p q) = is-equiv-Eq-eq-symmetric-Id p q
eq-Eq-symmetric-Id :
(p q : symmetric-Id a) → Eq-symmetric-Id p q → p = q
eq-Eq-symmetric-Id p q = map-inv-equiv (extensionality-symmetric-Id p q)
module _
(a b : A)
where
map-compute-symmetric-Id :
symmetric-Id (standard-unordered-pair a b) → a = b
map-compute-symmetric-Id (x , f) = inv (f (zero-Fin 1)) ∙ f (one-Fin 1)
map-inv-compute-symmetric-Id :
a = b → symmetric-Id (standard-unordered-pair a b)
pr1 (map-inv-compute-symmetric-Id p) = a
pr2 (map-inv-compute-symmetric-Id p) (inl (inr _)) = refl
pr2 (map-inv-compute-symmetric-Id p) (inr _) = p
is-section-map-inv-compute-symmetric-Id :
( map-compute-symmetric-Id ∘ map-inv-compute-symmetric-Id) ~ id
is-section-map-inv-compute-symmetric-Id refl = refl
abstract
is-retraction-map-inv-compute-symmetric-Id :
( map-inv-compute-symmetric-Id ∘ map-compute-symmetric-Id) ~ id
is-retraction-map-inv-compute-symmetric-Id (x , f) =
eq-Eq-symmetric-Id
( standard-unordered-pair a b)
( map-inv-compute-symmetric-Id (map-compute-symmetric-Id (x , f)))
( x , f)
( ( inv (f (zero-Fin 1))) ,
( λ where
( inl (inr _)) → inv (left-inv (f (zero-Fin 1)))
( inr _) → refl))
is-equiv-map-compute-symmetric-Id :
is-equiv (map-compute-symmetric-Id)
is-equiv-map-compute-symmetric-Id =
is-equiv-is-invertible
( map-inv-compute-symmetric-Id)
( is-section-map-inv-compute-symmetric-Id)
( is-retraction-map-inv-compute-symmetric-Id)
compute-symmetric-Id :
symmetric-Id (standard-unordered-pair a b) ≃ (a = b)
pr1 (compute-symmetric-Id) = map-compute-symmetric-Id
pr2 (compute-symmetric-Id) = is-equiv-map-compute-symmetric-Id
```
## Properties
### The action of functions on symmetric identity types
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where
map-symmetric-Id :
(f : A → B) (a : unordered-pair A) →
symmetric-Id a → symmetric-Id (map-unordered-pair f a)
map-symmetric-Id f a =
map-Σ
( λ b → (x : type-unordered-pair a) → b = f (element-unordered-pair a x))
( f)
( λ x → map-Π (λ i → ap f))
```
### The action of equivalences on symmetric identity types
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where
equiv-symmetric-Id :
(e : A ≃ B) (a : unordered-pair A) →
symmetric-Id a ≃ symmetric-Id (map-equiv-unordered-pair e a)
equiv-symmetric-Id e a =
equiv-Σ
( λ b →
(x : type-unordered-pair a) →
b = map-equiv e (element-unordered-pair a x))
( e)
( λ x →
equiv-Π-equiv-family (λ i → equiv-ap e x (element-unordered-pair a i)))
map-equiv-symmetric-Id :
(e : A ≃ B) (a : unordered-pair A) →
symmetric-Id a → symmetric-Id (map-equiv-unordered-pair e a)
map-equiv-symmetric-Id e a = map-equiv (equiv-symmetric-Id e a)
id-equiv-symmetric-Id :
{l : Level} {A : UU l} (a : unordered-pair A) →
map-equiv-symmetric-Id id-equiv a ~ id
id-equiv-symmetric-Id a (x , H) =
eq-pair-eq-fiber (eq-htpy (λ u → ap-id (H u)))
```
### Transport in the symmetric identity type along observational equality of unordered pairs
```agda
module _
{l : Level} {A : UU l}
where
equiv-tr-symmetric-Id :
(p q : unordered-pair A) → Eq-unordered-pair p q →
symmetric-Id p ≃ symmetric-Id q
equiv-tr-symmetric-Id (X , f) (Y , g) (e , H) =
equiv-tot (λ a → equiv-Π (λ x → a = g x) e (λ x → equiv-concat' a (H x)))
tr-symmetric-Id :
(p q : unordered-pair A)
(e : type-unordered-pair p ≃ type-unordered-pair q) →
(element-unordered-pair p ~ (element-unordered-pair q ∘ map-equiv e)) →
symmetric-Id p → symmetric-Id q
tr-symmetric-Id p q e H = map-equiv (equiv-tr-symmetric-Id p q (pair e H))
compute-pr2-tr-symmetric-Id :
(p q : unordered-pair A)
(e : type-unordered-pair p ≃ type-unordered-pair q) →
(H : element-unordered-pair p ~ (element-unordered-pair q ∘ map-equiv e)) →
{a : A}
(K : (x : type-unordered-pair p) → a = element-unordered-pair p x) →
(x : type-unordered-pair p) →
pr2 (tr-symmetric-Id p q e H (a , K)) (map-equiv e x) = (K x ∙ H x)
compute-pr2-tr-symmetric-Id (X , f) (Y , g) e H {a} =
compute-map-equiv-Π (λ x → a = g x) e (λ x → equiv-concat' a (H x))
refl-Eq-unordered-pair-tr-symmetric-Id :
(p : unordered-pair A) →
tr-symmetric-Id p p id-equiv refl-htpy ~ id
refl-Eq-unordered-pair-tr-symmetric-Id p (a , K) =
eq-pair-eq-fiber
( eq-htpy
( ( compute-pr2-tr-symmetric-Id p p id-equiv refl-htpy K) ∙h
( right-unit-htpy)))
```