# Double arrows
```agda
module foundation.double-arrows where
```
<details><summary>Imports</summary>
```agda
open import foundation.cartesian-product-types
open import foundation.dependent-pair-types
open import foundation.universe-levels
```
</details>
## Idea
A {{#concept "double arrow" Disambiguation="between types" Agda=double-arrow}}
is a [pair](foundation.dependent-pair-types.md) of types `A`, `B`
[equipped](foundation.structure.md) with a pair of
[maps](foundation.function-types.md) `f, g : A → B`.
We draw a double arrow as
```text
A
| |
f | | g
| |
∨ ∨
B
```
where `f` is the first map in the structure and `g` is the second map in the
structure. We also call `f` the _left map_ and `g` the _right map_. By
convention, [homotopies](foundation-core.homotopies.md) go from left to right.
## Definitions
### Double arrows
```agda
double-arrow : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
double-arrow l1 l2 = Σ (UU l1) (λ A → Σ (UU l2) (λ B → (A → B) × (A → B)))
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
(f : A → B) (g : A → B)
where
make-double-arrow : double-arrow l1 l2
make-double-arrow = (A , B , f , g)
{-# INLINE make-double-arrow #-}
```
### Components of a double arrow
```agda
module _
{l1 l2 : Level} (a : double-arrow l1 l2)
where
domain-double-arrow : UU l1
domain-double-arrow = pr1 a
codomain-double-arrow : UU l2
codomain-double-arrow = pr1 (pr2 a)
left-map-double-arrow : domain-double-arrow → codomain-double-arrow
left-map-double-arrow = pr1 (pr2 (pr2 a))
right-map-double-arrow : domain-double-arrow → codomain-double-arrow
right-map-double-arrow = pr2 (pr2 (pr2 a))
```
## See also
- Colimits of double arrows are
[coequalizers](synthetic-homotopy-theory.coequalizers.md)