# The universal property of the family of fibers of maps
```agda
module foundation.universal-property-family-of-fibers-of-maps where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.diagonal-maps-of-types
open import foundation.families-of-equivalences
open import foundation.function-extensionality
open import foundation.subtype-identity-principle
open import foundation.universe-levels
open import foundation-core.constant-maps
open import foundation-core.contractible-maps
open import foundation-core.contractible-types
open import foundation-core.equivalences
open import foundation-core.fibers-of-maps
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.precomposition-dependent-functions
open import foundation-core.retractions
open import foundation-core.sections
open import orthogonal-factorization-systems.extensions-double-lifts-families-of-elements
open import orthogonal-factorization-systems.lifts-families-of-elements
```
</details>
## Idea
Any map `f : A ā B` induces a type family `fiber f : B ā š°` of
[fibers](foundation-core.fibers-of-maps.md) of `f`. By
[precomposing](foundation.precomposition-type-families.md) with `f`, we obtain
the type family `(fiber f) ā f : A ā š°`, which always has a section given by
```text
Ī» a ā (a , refl) : (a : A) ā fiber f (f a).
```
We can uniquely characterize the family of fibers `fiber f : B ā š°` as the
initial type family equipped with such a section. Explicitly, the
{{#concept "universal property of the family of fibers" Disambiguation="maps" Agda=universal-property-family-of-fibers}}
`fiber f : B ā š°` of a map `f` is that the precomposition operation
```text
((b : B) ā fiber f b ā X b) ā ((a : A) ā X (f a))
```
is an [equivalence](foundation-core.equivalences.md) for any type family
`X : B ā š°`. Note that for any type family `X` over `B` and any map `f : A ā B`,
the type of
[lifts](orthogonal-factorization-systems.lifts-families-of-elements.md) of `f`
to `X` is precisely the type of sections
```text
(a : A) ā X (f a).
```
The family of fibers of `f` is therefore the initial type family over `B`
equipped with a lift of `f`.
This universal property is especially useful when `A` or `B` enjoy mapping out
universal properties. This lets us characterize the sections `(a : A) ā X (f a)`
in terms of the mapping out properties of `A` and the descent data of `B`.
**Note:** We disambiguate between the _universal property of the family of
fibers of a map_ and the _universal property of the fiber of a map_ at a point
in the codomain. The universal property of the family of fibers of a map is as
described above, while the universal property of the fiber `fiber f b` of a map
`f` at `b` is a special case of the universal property of pullbacks.
## Definitions
### The dependent universal property of the family of fibers of a map
Consider a map `f : A ā B` and a type family `F : B ā š°` equipped with a lift
`Ī“ : (a : A) ā F (f a)` of `f` to `F`. Then there is an evaluation map
```text
((b : B) (z : F b) ā X b z) ā ((a : A) ā X (f a) (Ī“ a))
```
for any binary type family `X : (b : B) ā F b ā š°`. This evaluation map takes a
binary family of elements of `X` to a
[double lift](orthogonal-factorization-systems.double-lifts-families-of-elements.md)
of `f` and `Ī“`. The
{{#concept "dependent universal property of the family of fibers of a map" Agda=dependent-universal-property-family-of-fibers}}
`f` asserts that this evaluation map is an equivalence.
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2}
where
dependent-universal-property-family-of-fibers :
{f : A ā B} (F : B ā UU l3) (Ī“ : lift-family-of-elements F f) ā UUĻ
dependent-universal-property-family-of-fibers F Ī“ =
{l : Level} (X : (b : B) ā F b ā UU l) ā
is-equiv (ev-double-lift-family-of-elements {B = F} {X} Ī“)
```
### The universal property of the family of fibers of a map
Consider a map `f : A ā B` and a type family `F : B ā š°` equipped with a lift
`Ī“ : (a : A) ā F (f a)` of `f` to `F`. Then there is an evaluation map
```text
((b : B) ā F b ā X b) ā ((a : A) ā X (f a))
```
for any binary type family `X : B ā š°`. This evaluation map takes a binary
family of elements of `X` to a double lift of `f` and `Ī“`. The universal
property of the family of fibers of `f` asserts that this evaluation map is an
equivalence.
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2}
where
universal-property-family-of-fibers :
{f : A ā B} (F : B ā UU l3) (Ī“ : lift-family-of-elements F f) ā UUĻ
universal-property-family-of-fibers F Ī“ =
{l : Level} (X : B ā UU l) ā
is-equiv (ev-double-lift-family-of-elements {B = F} {Ī» b _ ā X b} Ī“)
```
### The lift of any map to its family of fibers
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A ā B)
where
lift-family-of-elements-fiber : lift-family-of-elements (fiber f) f
pr1 (lift-family-of-elements-fiber a) = a
pr2 (lift-family-of-elements-fiber a) = refl
```
## Properties
### The family of fibers of a map satisfies the dependent universal property of the family of fibers of a map
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A ā B)
where
module _
{l3 : Level} (C : (y : B) (z : fiber f y) ā UU l3)
where
ev-lift-family-of-elements-fiber :
((y : B) (z : fiber f y) ā C y z) ā ((x : A) ā C (f x) (x , refl))
ev-lift-family-of-elements-fiber =
ev-double-lift-family-of-elements (lift-family-of-elements-fiber f)
extend-lift-family-of-elements-fiber :
((x : A) ā C (f x) (x , refl)) ā ((y : B) (z : fiber f y) ā C y z)
extend-lift-family-of-elements-fiber h .(f x) (x , refl) = h x
is-section-extend-lift-family-of-elements-fiber :
is-section
( ev-lift-family-of-elements-fiber)
( extend-lift-family-of-elements-fiber)
is-section-extend-lift-family-of-elements-fiber h = refl
is-retraction-extend-lift-family-of-elements-fiber' :
(h : (y : B) (z : fiber f y) ā C y z) (y : B) ā
extend-lift-family-of-elements-fiber
( ev-lift-family-of-elements-fiber h)
( y) ~
h y
is-retraction-extend-lift-family-of-elements-fiber' h .(f z) (z , refl) =
refl
is-retraction-extend-lift-family-of-elements-fiber :
is-retraction
( ev-lift-family-of-elements-fiber)
( extend-lift-family-of-elements-fiber)
is-retraction-extend-lift-family-of-elements-fiber h =
eq-htpy (eq-htpy ā is-retraction-extend-lift-family-of-elements-fiber' h)
is-equiv-extend-lift-family-of-elements-fiber :
is-equiv extend-lift-family-of-elements-fiber
is-equiv-extend-lift-family-of-elements-fiber =
is-equiv-is-invertible
( ev-lift-family-of-elements-fiber)
( is-retraction-extend-lift-family-of-elements-fiber)
( is-section-extend-lift-family-of-elements-fiber)
inv-equiv-dependent-universal-property-family-of-fibers :
((x : A) ā C (f x) (x , refl)) ā ((y : B) (z : fiber f y) ā C y z)
pr1 inv-equiv-dependent-universal-property-family-of-fibers =
extend-lift-family-of-elements-fiber
pr2 inv-equiv-dependent-universal-property-family-of-fibers =
is-equiv-extend-lift-family-of-elements-fiber
dependent-universal-property-family-of-fibers-fiber :
dependent-universal-property-family-of-fibers
( fiber f)
( lift-family-of-elements-fiber f)
dependent-universal-property-family-of-fibers-fiber C =
is-equiv-is-invertible
( extend-lift-family-of-elements-fiber C)
( is-section-extend-lift-family-of-elements-fiber C)
( is-retraction-extend-lift-family-of-elements-fiber C)
equiv-dependent-universal-property-family-of-fibers :
{l3 : Level} (C : (y : B) (z : fiber f y) ā UU l3) ā
((y : B) (z : fiber f y) ā C y z) ā
((x : A) ā C (f x) (x , refl))
pr1 (equiv-dependent-universal-property-family-of-fibers C) =
ev-lift-family-of-elements-fiber C
pr2 (equiv-dependent-universal-property-family-of-fibers C) =
dependent-universal-property-family-of-fibers-fiber C
```
### The family of fibers of a map satisfies the universal property of the family of fibers of a map
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A ā B)
where
universal-property-family-of-fibers-fiber :
universal-property-family-of-fibers
( fiber f)
( lift-family-of-elements-fiber f)
universal-property-family-of-fibers-fiber C =
dependent-universal-property-family-of-fibers-fiber f (Ī» y _ ā C y)
equiv-universal-property-family-of-fibers :
{l3 : Level} (C : B ā UU l3) ā
((y : B) ā fiber f y ā C y) ā lift-family-of-elements C f
equiv-universal-property-family-of-fibers C =
equiv-dependent-universal-property-family-of-fibers f (Ī» y _ ā C y)
```
### The inverse equivalence of the universal property of the family of fibers of a map
The inverse of the equivalence `equiv-universal-property-family-of-fibers` has a
reasonably nice definition, so we also record it here.
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (f : A ā B) (C : B ā UU l3)
where
inv-equiv-universal-property-family-of-fibers :
(lift-family-of-elements C f) ā ((y : B) ā fiber f y ā C y)
inv-equiv-universal-property-family-of-fibers =
inv-equiv-dependent-universal-property-family-of-fibers f (Ī» y _ ā C y)
```
### If a type family equipped with a lift of a map satisfies the universal property of the family of fibers, then it satisfies a unique extension property
```agda
module _
{l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {f : A ā B}
{F : B ā UU l3} {Ī“ : (a : A) ā F (f a)}
(u : universal-property-family-of-fibers F Ī“)
(G : B ā UU l4) (γ : (a : A) ā G (f a))
where
abstract
uniqueness-extension-universal-property-family-of-fibers :
is-contr
( extension-double-lift-family-of-elements (Ī» y (_ : F y) ā G y) Ī“ γ)
uniqueness-extension-universal-property-family-of-fibers =
is-contr-equiv
( fiber (ev-double-lift-family-of-elements Γ) γ)
( equiv-tot (Ī» h ā equiv-eq-htpy))
( is-contr-map-is-equiv (u G) γ)
abstract
extension-universal-property-family-of-fibers :
extension-double-lift-family-of-elements (Ī» y (_ : F y) ā G y) Ī“ γ
extension-universal-property-family-of-fibers =
center uniqueness-extension-universal-property-family-of-fibers
fiberwise-map-universal-property-family-of-fibers :
(b : B) ā F b ā G b
fiberwise-map-universal-property-family-of-fibers =
family-of-elements-extension-double-lift-family-of-elements
extension-universal-property-family-of-fibers
is-extension-fiberwise-map-universal-property-family-of-fibers :
is-extension-double-lift-family-of-elements
( Ī» y _ ā G y)
( Ī“)
( γ)
( fiberwise-map-universal-property-family-of-fibers)
is-extension-fiberwise-map-universal-property-family-of-fibers =
is-extension-extension-double-lift-family-of-elements
extension-universal-property-family-of-fibers
```
### The family of fibers of a map is uniquely unique
```agda
module _
{l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} (f : A ā B) (F : B ā UU l3)
(Ī“ : (a : A) ā F (f a)) (u : universal-property-family-of-fibers F Ī“)
(G : B ā UU l4) (γ : (a : A) ā G (f a))
(v : universal-property-family-of-fibers G γ)
where
is-retraction-extension-universal-property-family-of-fibers :
comp-extension-double-lift-family-of-elements
( extension-universal-property-family-of-fibers v F Ī“)
( extension-universal-property-family-of-fibers u G γ) ļ¼
id-extension-double-lift-family-of-elements Ī“
is-retraction-extension-universal-property-family-of-fibers =
eq-is-contr
( uniqueness-extension-universal-property-family-of-fibers u F Ī“)
is-section-extension-universal-property-family-of-fibers :
comp-extension-double-lift-family-of-elements
( extension-universal-property-family-of-fibers u G γ)
( extension-universal-property-family-of-fibers v F Ī“) ļ¼
id-extension-double-lift-family-of-elements γ
is-section-extension-universal-property-family-of-fibers =
eq-is-contr
( uniqueness-extension-universal-property-family-of-fibers v G γ)
is-retraction-fiberwise-map-universal-property-family-of-fibers :
(b : B) ā
is-retraction
( fiberwise-map-universal-property-family-of-fibers u G γ b)
( fiberwise-map-universal-property-family-of-fibers v F Ī“ b)
is-retraction-fiberwise-map-universal-property-family-of-fibers b =
htpy-eq
( htpy-eq
( ap
( pr1)
( is-retraction-extension-universal-property-family-of-fibers))
( b))
is-section-fiberwise-map-universal-property-family-of-fibers :
(b : B) ā
is-section
( fiberwise-map-universal-property-family-of-fibers u G γ b)
( fiberwise-map-universal-property-family-of-fibers v F Ī“ b)
is-section-fiberwise-map-universal-property-family-of-fibers b =
htpy-eq
( htpy-eq
( ap
( pr1)
( is-section-extension-universal-property-family-of-fibers))
( b))
is-fiberwise-equiv-fiberwise-map-universal-property-family-of-fibers :
is-fiberwise-equiv (fiberwise-map-universal-property-family-of-fibers u G γ)
is-fiberwise-equiv-fiberwise-map-universal-property-family-of-fibers b =
is-equiv-is-invertible
( family-of-elements-extension-double-lift-family-of-elements
( extension-universal-property-family-of-fibers v F Ī“)
( b))
( is-section-fiberwise-map-universal-property-family-of-fibers b)
( is-retraction-fiberwise-map-universal-property-family-of-fibers b)
uniquely-unique-family-of-fibers :
is-contr
( Σ ( fiberwise-equiv F G)
( Ī» h ā
ev-double-lift-family-of-elements Γ (map-fiberwise-equiv h) ~ γ))
uniquely-unique-family-of-fibers =
is-torsorial-Eq-subtype
( uniqueness-extension-universal-property-family-of-fibers u G γ)
( is-property-is-fiberwise-equiv)
( fiberwise-map-universal-property-family-of-fibers u G γ)
( is-extension-fiberwise-map-universal-property-family-of-fibers u G γ)
( is-fiberwise-equiv-fiberwise-map-universal-property-family-of-fibers)
extension-by-fiberwise-equiv-universal-property-family-of-fibers :
Ī£ ( fiberwise-equiv F G)
( Ī» h ā ev-double-lift-family-of-elements Ī“ (map-fiberwise-equiv h) ~ γ)
extension-by-fiberwise-equiv-universal-property-family-of-fibers =
center uniquely-unique-family-of-fibers
fiberwise-equiv-universal-property-of-fibers :
fiberwise-equiv F G
fiberwise-equiv-universal-property-of-fibers =
pr1 extension-by-fiberwise-equiv-universal-property-family-of-fibers
is-extension-fiberwise-equiv-universal-property-of-fibers :
is-extension-double-lift-family-of-elements
( Ī» y _ ā G y)
( Ī“)
( γ)
( map-fiberwise-equiv
( fiberwise-equiv-universal-property-of-fibers))
is-extension-fiberwise-equiv-universal-property-of-fibers =
pr2 extension-by-fiberwise-equiv-universal-property-family-of-fibers
```
### A type family `C` over `B` satisfies the universal property of the family of fibers of a map `f : A ā B` if and only if the constant map `C b ā (fiber f b ā C b)` is an equivalence for every `b : B`
In other words, the dependent type `C` is
`f`-[local](orthogonal-factorization-systems.local-types.md) if its fiber over
`b` is `fiber f b`-[null](orthogonal-factorization-systems.null-types.md) for
every `b : B`.
This condition simplifies, for example, the proof that
[connected maps](foundation.connected-maps.md) satisfy a dependent universal
property.
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {f : A ā B} {C : B ā UU l3}
where
is-equiv-precomp-Ī -fiber-condition :
((b : B) ā is-equiv (diagonal-exponential (C b) (fiber f b))) ā
is-equiv (precomp-Ī f C)
is-equiv-precomp-Ī -fiber-condition H =
is-equiv-comp
( ev-lift-family-of-elements-fiber f (Ī» b _ ā C b))
( map-Ī (Ī» b ā diagonal-exponential (C b) (fiber f b)))
( is-equiv-map-Ī -is-fiberwise-equiv H)
( universal-property-family-of-fibers-fiber f C)
```