# Large binary relations

```agda
module foundation.large-binary-relations where
```

<details><summary>Imports</summary>

```agda
open import foundation.binary-relations
open import foundation.dependent-pair-types
open import foundation.universe-levels

open import foundation-core.cartesian-product-types
open import foundation-core.propositions
```

</details>

## Idea

A
{{#concept "large binary relation" Disambiguation="valued in types" Agda=Large-Relation}}
on a family of types indexed by universe levels `A` is a family of types `R x y`
depending on two variables `x : A l1` and `y : A l2`. In the special case where
each `R x y` is a [proposition](foundation-core.propositions.md), we say that
the relation is valued in propositions. Thus, we take a general relation to mean
a _proof-relevant_ relation.

## Definition

### Large relations valued in types

```agda
module _
  {α : Level  Level} (β : Level  Level  Level)
  (A : (l : Level)  UU (α l))
  where

  Large-Relation : UUω
  Large-Relation = {l1 l2 : Level}  A l1  A l2  UU (β l1 l2)

  total-space-Large-Relation : Large-Relation  UUω
  total-space-Large-Relation R =
    (l1 l2 : Level)  Σ (A l1 × A l2)  (a , a')  R a a')
```

### Large relations valued in propositions

```agda
is-prop-Large-Relation :
  {α : Level  Level} {β : Level  Level  Level}
  (A : (l : Level)  UU (α l))  Large-Relation β A  UUω
is-prop-Large-Relation A R =
  {l1 l2 : Level} (x : A l1) (y : A l2)  is-prop (R x y)

Large-Relation-Prop :
  {α : Level  Level} (β : Level  Level  Level)
  (A : (l : Level)  UU (α l)) 
  UUω
Large-Relation-Prop β A = {l1 l2 : Level}  A l1  A l2  Prop (β l1 l2)

module _
  {α : Level  Level} {β : Level  Level  Level}
  (A : (l : Level)  UU (α l))
  (R : Large-Relation-Prop β A)
  where

  large-relation-Large-Relation-Prop : Large-Relation β A
  large-relation-Large-Relation-Prop x y = type-Prop (R x y)

  is-prop-large-relation-Large-Relation-Prop :
    is-prop-Large-Relation A large-relation-Large-Relation-Prop
  is-prop-large-relation-Large-Relation-Prop x y = is-prop-type-Prop (R x y)

  total-space-Large-Relation-Prop : UUω
  total-space-Large-Relation-Prop =
    (l1 l2 : Level) 
    Σ (A l1 × A l2)  (a , a')  large-relation-Large-Relation-Prop a a')
```

## Small relations from large relations

```agda
module _
  {α : Level  Level} {β : Level  Level  Level}
  (A : (l : Level)  UU (α l))
  where

  relation-Large-Relation :
    (R : Large-Relation β A) (l : Level)  Relation (β l l) (A l)
  relation-Large-Relation R l x y = R x y

  relation-prop-Large-Relation-Prop :
    (R : Large-Relation-Prop β A) (l : Level)  Relation-Prop (β l l) (A l)
  relation-prop-Large-Relation-Prop R l x y = R x y

  relation-Large-Relation-Prop :
    (R : Large-Relation-Prop β A) (l : Level)  Relation (β l l) (A l)
  relation-Large-Relation-Prop R =
    relation-Large-Relation (large-relation-Large-Relation-Prop A R)
```

## Specifications of properties of binary relations

```agda
module _
  {α : Level  Level} {β : Level  Level  Level}
  (A : (l : Level)  UU (α l))
  (R : Large-Relation β A)
  where

  is-reflexive-Large-Relation : UUω
  is-reflexive-Large-Relation = {l : Level} (x : A l)  R x x

  is-symmetric-Large-Relation : UUω
  is-symmetric-Large-Relation =
    {l1 l2 : Level} (x : A l1) (y : A l2)  R x y  R y x

  is-transitive-Large-Relation : UUω
  is-transitive-Large-Relation =
    {l1 l2 l3 : Level} (x : A l1) (y : A l2) (z : A l3)  R y z  R x y  R x z

  is-antisymmetric-Large-Relation : UUω
  is-antisymmetric-Large-Relation =
    {l : Level}  is-antisymmetric (relation-Large-Relation A R l)

module _
  {α : Level  Level} {β : Level  Level  Level}
  (A : (l : Level)  UU (α l))
  (R : Large-Relation-Prop β A)
  where

  is-reflexive-Large-Relation-Prop : UUω
  is-reflexive-Large-Relation-Prop =
    is-reflexive-Large-Relation A (large-relation-Large-Relation-Prop A R)

  is-symmetric-Large-Relation-Prop : UUω
  is-symmetric-Large-Relation-Prop =
    is-symmetric-Large-Relation A (large-relation-Large-Relation-Prop A R)

  is-transitive-Large-Relation-Prop : UUω
  is-transitive-Large-Relation-Prop =
    is-transitive-Large-Relation A (large-relation-Large-Relation-Prop A R)

  is-antisymmetric-Large-Relation-Prop : UUω
  is-antisymmetric-Large-Relation-Prop =
    is-antisymmetric-Large-Relation A (large-relation-Large-Relation-Prop A R)
```

## See also

- [(Small) binary relations](foundation.binary-relations.md)
- [Large preorders](order-theory.large-preorders.md)
- [Large posets](order-theory.large-posets.md)