# Descent data for pushouts
```agda
module synthetic-homotopy-theory.descent-data-pushouts where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.function-types
open import foundation.span-diagrams
open import foundation.transport-along-identifications
open import foundation.universe-levels
open import synthetic-homotopy-theory.cocones-under-spans
```
</details>
## Idea
{{#concept "Descent data" Disambiguation="pushouts" Agda=descent-data-pushout WDID=NA}}
for the [pushout](synthetic-homotopy-theory.universal-property-pushouts.md) of a
[span diagram](foundation.span-diagrams.md) `๐ฎ`
```text
f g
A <-- S --> B
```
is a triple `(PA, PB, PS)`, where `PA : A โ ๐ฐ` is a type family over `A`,
`PB : B โ ๐ฐ` is a type family over `B`, and `PS` is a family of
[equivalences](foundation-core.equivalences.md)
```text
PS : (s : S) โ PA (f a) โ PB (g a).
```
In
[`descent-property-pushouts`](synthetic-homotopy-theory.descent-property-pushouts.md),
we show that this is exactly the data one needs to "glue together" a type family
`P : X โ ๐ฐ` over the pushout `X` of `๐ฎ`.
The [identity type](foundation-core.identity-types.md) of descent data is
characterized in
[`equivalences-descent-data-pushouts`](synthetic-homotopy-theory.equivalences-descent-data-pushouts.md).
It may not be immediately clear why "descent data" is an appropriate name for
this concept, because there is no apparent downward motion. Traditionally,
descent is studied in the context of a collection of objects `Xแตข` covering a
single object `X`, and local structure on the individual `Xแตข`'s descending onto
`X`, collecting into a global structure, given that the pieces are appropriately
compatible on any "overlaps". A pushout of `๐ฎ` is covered by `A` and `B`, and
the overlaps are encoded in `f` and `g`. Then structure on `A` and `B`,
expressed as type families `PA` and `PB`, "descends" to a structure on `X` (a
type family over `X`). Two elements "overlap" in `X` if there is an
identification between them coming from `S`, and the gluing/compatibility
condition exactly requires the local structure of `PA` and `PB` to agree on such
elements, i.e. asks for an equivalence `PA(fs) โ PB(gs)`.
## Definitions
### Descent data for pushouts
```agda
module _
{l1 l2 l3 : Level} (๐ฎ : span-diagram l1 l2 l3)
where
descent-data-pushout : (l4 : Level) โ UU (l1 โ l2 โ l3 โ lsuc l4)
descent-data-pushout l =
ฮฃ ( domain-span-diagram ๐ฎ โ UU l)
( ฮป PA โ
ฮฃ ( codomain-span-diagram ๐ฎ โ UU l)
( ฮป PB โ
(s : spanning-type-span-diagram ๐ฎ) โ
PA (left-map-span-diagram ๐ฎ s) โ PB (right-map-span-diagram ๐ฎ s)))
```
### Components of descent data for pushouts
```agda
module _
{l1 l2 l3 l4 : Level} {๐ฎ : span-diagram l1 l2 l3}
(P : descent-data-pushout ๐ฎ l4)
where
left-family-descent-data-pushout : domain-span-diagram ๐ฎ โ UU l4
left-family-descent-data-pushout = pr1 P
right-family-descent-data-pushout : codomain-span-diagram ๐ฎ โ UU l4
right-family-descent-data-pushout = pr1 (pr2 P)
equiv-family-descent-data-pushout :
(s : spanning-type-span-diagram ๐ฎ) โ
left-family-descent-data-pushout (left-map-span-diagram ๐ฎ s) โ
right-family-descent-data-pushout (right-map-span-diagram ๐ฎ s)
equiv-family-descent-data-pushout = pr2 (pr2 P)
map-family-descent-data-pushout :
(s : spanning-type-span-diagram ๐ฎ) โ
left-family-descent-data-pushout (left-map-span-diagram ๐ฎ s) โ
right-family-descent-data-pushout (right-map-span-diagram ๐ฎ s)
map-family-descent-data-pushout s =
map-equiv (equiv-family-descent-data-pushout s)
is-equiv-map-family-descent-data-pushout :
(s : spanning-type-span-diagram ๐ฎ) โ
is-equiv (map-family-descent-data-pushout s)
is-equiv-map-family-descent-data-pushout s =
is-equiv-map-equiv (equiv-family-descent-data-pushout s)
```
### Descent data induced by families over cocones
Given a [cocone](synthetic-homotopy-theory.cocones-under-spans.md)
```text
g
S -----> B
| |
f | | j
โจ โจ
A -----> X
i
```
and a family `P : X โ ๐ฐ`, we can obtain `PA` and `PB` by precomposing with `i`
and `j`, respectively. Then to produce an equivalence
`PS s : P (ifs) โ P (jgs)`, we
[transport](foundation-core.transport-along-identifications.md) along the
coherence `H s : ifs = jgs`, which is an equivalence.
```agda
module _
{l1 l2 l3 l4 : Level} {๐ฎ : span-diagram l1 l2 l3}
{X : UU l4} (c : cocone-span-diagram ๐ฎ X)
where
descent-data-family-cocone-span-diagram :
{l5 : Level} โ (X โ UU l5) โ descent-data-pushout ๐ฎ l5
pr1 (descent-data-family-cocone-span-diagram P) =
P โ horizontal-map-cocone _ _ c
pr1 (pr2 (descent-data-family-cocone-span-diagram P)) =
P โ vertical-map-cocone _ _ c
pr2 (pr2 (descent-data-family-cocone-span-diagram P)) s =
equiv-tr P (coherence-square-cocone _ _ c s)
```