# Symmetric binary relations
```agda
module foundation.symmetric-binary-relations where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.binary-relations
open import foundation.dependent-pair-types
open import foundation.equivalence-extensionality
open import foundation.function-extensionality
open import foundation.morphisms-binary-relations
open import foundation.symmetric-operations
open import foundation.universe-levels
open import foundation.unordered-pairs
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.transport-along-identifications
open import univalent-combinatorics.standard-finite-types
```
</details>
## Idea
A **symmetric binary relation** on a type `A` is a type family `R` over the type
of [unordered pairs](foundation.unordered-pairs.md) of elements of `A`. Given a
symmetric binary relation `R` on `A` and an equivalence of unordered pairs
`p = q`, we have `R p ≃ R q`. In particular, we have
```text
R ({x,y}) ≃ R ({y,x})
```
for any two elements `x y : A`, where `{x,y}` is the _standard unordered pair_
consisting of `x` and `y`.
Note that a symmetric binary relation R on a type is just a
[symmetric operation](foundation.symmetric-operations.md) from `A` into a
universe `𝒰`.
## Definitions
### Symmetric binary relations
```agda
Symmetric-Relation :
{l1 : Level} (l2 : Level) → UU l1 → UU (l1 ⊔ lsuc l2)
Symmetric-Relation l2 A = symmetric-operation A (UU l2)
```
### Action on symmetries of symmetric binary relations
```agda
module _
{l1 l2 : Level} {A : UU l1} (R : Symmetric-Relation l2 A)
where
abstract
equiv-tr-Symmetric-Relation :
(p q : unordered-pair A) → Eq-unordered-pair p q → R p ≃ R q
equiv-tr-Symmetric-Relation p =
ind-Eq-unordered-pair p (λ q e → R p ≃ R q) id-equiv
compute-refl-equiv-tr-Symmetric-Relation :
(p : unordered-pair A) →
equiv-tr-Symmetric-Relation p p (refl-Eq-unordered-pair p) =
id-equiv
compute-refl-equiv-tr-Symmetric-Relation p =
compute-refl-ind-Eq-unordered-pair p (λ q e → R p ≃ R q) id-equiv
htpy-compute-refl-equiv-tr-Symmetric-Relation :
(p : unordered-pair A) →
htpy-equiv
( equiv-tr-Symmetric-Relation p p (refl-Eq-unordered-pair p))
( id-equiv)
htpy-compute-refl-equiv-tr-Symmetric-Relation p =
htpy-eq-equiv (compute-refl-equiv-tr-Symmetric-Relation p)
abstract
tr-Symmetric-Relation :
(p q : unordered-pair A) → Eq-unordered-pair p q → R p → R q
tr-Symmetric-Relation p q e =
map-equiv (equiv-tr-Symmetric-Relation p q e)
tr-inv-Symmetric-Relation :
(p q : unordered-pair A) → Eq-unordered-pair p q → R q → R p
tr-inv-Symmetric-Relation p q e =
map-inv-equiv (equiv-tr-Symmetric-Relation p q e)
is-section-tr-inv-Symmetric-Relation :
(p q : unordered-pair A) (e : Eq-unordered-pair p q) →
tr-Symmetric-Relation p q e ∘
tr-inv-Symmetric-Relation p q e ~
id
is-section-tr-inv-Symmetric-Relation p q e =
is-section-map-inv-equiv (equiv-tr-Symmetric-Relation p q e)
is-retraction-tr-inv-Symmetric-Relation :
(p q : unordered-pair A) (e : Eq-unordered-pair p q) →
tr-inv-Symmetric-Relation p q e ∘
tr-Symmetric-Relation p q e ~
id
is-retraction-tr-inv-Symmetric-Relation p q e =
is-retraction-map-inv-equiv (equiv-tr-Symmetric-Relation p q e)
compute-refl-tr-Symmetric-Relation :
(p : unordered-pair A) →
tr-Symmetric-Relation p p (refl-Eq-unordered-pair p) = id
compute-refl-tr-Symmetric-Relation p =
ap map-equiv (compute-refl-equiv-tr-Symmetric-Relation p)
htpy-compute-refl-tr-Symmetric-Relation :
(p : unordered-pair A) →
tr-Symmetric-Relation p p (refl-Eq-unordered-pair p) ~ id
htpy-compute-refl-tr-Symmetric-Relation p =
htpy-eq (compute-refl-tr-Symmetric-Relation p)
```
### The underlying binary relation of a symmetric binary relation
```agda
module _
{l1 l2 : Level} {A : UU l1} (R : Symmetric-Relation l2 A)
where
relation-Symmetric-Relation : Relation l2 A
relation-Symmetric-Relation x y = R (standard-unordered-pair x y)
equiv-symmetric-relation-Symmetric-Relation :
{x y : A} →
relation-Symmetric-Relation x y ≃
relation-Symmetric-Relation y x
equiv-symmetric-relation-Symmetric-Relation {x} {y} =
equiv-tr-Symmetric-Relation R
( standard-unordered-pair x y)
( standard-unordered-pair y x)
( swap-standard-unordered-pair x y)
symmetric-relation-Symmetric-Relation :
{x y : A} →
relation-Symmetric-Relation x y →
relation-Symmetric-Relation y x
symmetric-relation-Symmetric-Relation =
map-equiv equiv-symmetric-relation-Symmetric-Relation
```
### The forgetful functor from binary relations to symmetric binary relations
```agda
module _
{l1 l2 : Level} {A : UU l1} (R : Relation l2 A)
where
symmetric-relation-Relation : Symmetric-Relation l2 A
symmetric-relation-Relation p =
Σ ( type-unordered-pair p)
( λ i →
R (element-unordered-pair p i) (other-element-unordered-pair p i))
unit-symmetric-relation-Relation :
(x y : A) → R x y →
relation-Symmetric-Relation symmetric-relation-Relation x y
pr1 (unit-symmetric-relation-Relation x y r) = zero-Fin 1
pr2 (unit-symmetric-relation-Relation x y r) =
tr
( R x)
( inv (compute-other-element-standard-unordered-pair x y (zero-Fin 1)))
( r)
```
### Morphisms of symmetric binary relations
```agda
module _
{l1 l2 l3 : Level} {A : UU l1}
where
hom-Symmetric-Relation :
Symmetric-Relation l2 A → Symmetric-Relation l3 A →
UU (lsuc lzero ⊔ l1 ⊔ l2 ⊔ l3)
hom-Symmetric-Relation R S =
(p : unordered-pair A) → R p → S p
hom-relation-hom-Symmetric-Relation :
(R : Symmetric-Relation l2 A) (S : Symmetric-Relation l3 A) →
hom-Symmetric-Relation R S →
hom-Relation
( relation-Symmetric-Relation R)
( relation-Symmetric-Relation S)
hom-relation-hom-Symmetric-Relation R S f x y =
f (standard-unordered-pair x y)
```