# Descent for equivalences
```agda
module foundation.descent-equivalences where
```
<details><summary>Imports</summary>
```agda
open import foundation.cones-over-cospan-diagrams
open import foundation.dependent-universal-property-equivalences
open import foundation.equivalences
open import foundation.functoriality-fibers-of-maps
open import foundation.universe-levels
open import foundation-core.function-types
open import foundation-core.pullbacks
```
</details>
## Idea
The descent property of equivalences is a somewhat degenerate form of a descent
property. It asserts that in a commuting diagram of the form
```text
p q
A -----> B -----> C
| | |
f| g| |h
∨ ∨ ∨
X -----> Y -----> Z,
i j
```
if the maps `i` and `p` are equivalences, then the right square is a pullback if
and only if the outer rectangle is a pullback.
## Theorem
```agda
module _
{l1 l2 l3 l4 l5 l6 : Level}
{A : UU l1} {B : UU l2} {C : UU l3} {X : UU l4} {Y : UU l5} {Z : UU l6}
where
descent-is-equiv :
(i : X → Y) (j : Y → Z) (h : C → Z)
(c : cone j h B) (d : cone i (vertical-map-cone j h c) A) →
is-equiv i → is-equiv (horizontal-map-cone i (vertical-map-cone j h c) d) →
is-pullback (j ∘ i) h (pasting-horizontal-cone i j h c d) →
is-pullback j h c
descent-is-equiv i j h c d
is-equiv-i is-equiv-k is-pb-rectangle =
is-pullback-is-fiberwise-equiv-map-fiber-vertical-map-cone j h c
( map-inv-is-equiv-precomp-Π-is-equiv
( is-equiv-i)
( λ y → is-equiv (map-fiber-vertical-map-cone j h c y))
( λ x →
is-equiv-right-map-triangle
( map-fiber-vertical-map-cone (j ∘ i) h
( pasting-horizontal-cone i j h c d) x)
( map-fiber-vertical-map-cone j h c (i x))
( map-fiber-vertical-map-cone i (vertical-map-cone j h c) d x)
( preserves-pasting-horizontal-map-fiber-vertical-map-cone
( i)
( j)
( h)
( c)
( d)
( x))
( is-fiberwise-equiv-map-fiber-vertical-map-cone-is-pullback (j ∘ i) h
( pasting-horizontal-cone i j h c d)
( is-pb-rectangle)
( x))
( is-fiberwise-equiv-map-fiber-vertical-map-cone-is-pullback i
( vertical-map-cone j h c)
( d)
( is-pullback-is-equiv-horizontal-maps i
( vertical-map-cone j h c)
( d)
( is-equiv-i)
( is-equiv-k))
( x))))
descent-equiv :
(i : X ≃ Y) (j : Y → Z) (h : C → Z)
(c : cone j h B) (d : cone (map-equiv i) (vertical-map-cone j h c) A) →
is-equiv (horizontal-map-cone (map-equiv i) (vertical-map-cone j h c) d) →
is-pullback
( j ∘ map-equiv i)
( h)
( pasting-horizontal-cone (map-equiv i) j h c d) →
is-pullback j h c
descent-equiv i j h c d =
descent-is-equiv (map-equiv i) j h c d (is-equiv-map-equiv i)
```