# The universal property of identity types
```agda
module foundation.universal-property-identity-types where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.dependent-universal-property-equivalences
open import foundation.embeddings
open import foundation.equivalences
open import foundation.full-subtypes
open import foundation.function-extensionality
open import foundation.functoriality-dependent-function-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.identity-types
open import foundation.preunivalence
open import foundation.univalence
open import foundation.universe-levels
open import foundation-core.contractible-maps
open import foundation-core.contractible-types
open import foundation-core.families-of-equivalences
open import foundation-core.fibers-of-maps
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies
open import foundation-core.injective-maps
open import foundation-core.propositional-maps
open import foundation-core.propositions
open import foundation-core.torsorial-type-families
```
</details>
## Idea
The **universal property of identity types** characterizes families of maps out
of the [identity type](foundation-core.identity-types.md). This universal
property is also known as the **type theoretic Yoneda lemma**.
## Theorem
```agda
ev-refl :
{l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) → a = x → UU l2} →
((x : A) (p : a = x) → B x p) → B a refl
ev-refl a f = f a refl
ev-refl' :
{l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) → x = a → UU l2} →
((x : A) (p : x = a) → B x p) → B a refl
ev-refl' a f = f a refl
abstract
is-equiv-ev-refl :
{l1 l2 : Level} {A : UU l1} (a : A)
{B : (x : A) → a = x → UU l2} → is-equiv (ev-refl a {B})
is-equiv-ev-refl a =
is-equiv-is-invertible
( ind-Id a _)
( λ b → refl)
( λ f → eq-htpy
( λ x → eq-htpy
( ind-Id a
( λ x' p' → ind-Id a _ (f a refl) x' p' = f x' p')
( refl) x)))
equiv-ev-refl :
{l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) → a = x → UU l2} →
((x : A) (p : a = x) → B x p) ≃ (B a refl)
pr1 (equiv-ev-refl a) = ev-refl a
pr2 (equiv-ev-refl a) = is-equiv-ev-refl a
equiv-ev-refl' :
{l1 l2 : Level} {A : UU l1} (a : A) {B : (x : A) → x = a → UU l2} →
((x : A) (p : x = a) → B x p) ≃ B a refl
equiv-ev-refl' a {B} =
( equiv-ev-refl a) ∘e
( equiv-Π-equiv-family (λ x → equiv-precomp-Π (equiv-inv a x) (B x)))
is-equiv-ev-refl' :
{l1 l2 : Level} {A : UU l1} (a : A)
{B : (x : A) → x = a → UU l2} → is-equiv (ev-refl' a {B})
is-equiv-ev-refl' a = is-equiv-map-equiv (equiv-ev-refl' a)
```
### The type of fiberwise maps from `Id a` to a torsorial type family `B` is equivalent to the type of fiberwise equivalences
Note that the type of fiberwise equivalences is a
[subtype](foundation-core.subtypes.md) of the type of fiberwise maps. By the
[fundamental theorem of identity types](foundation.fundamental-theorem-of-identity-types.md),
it is a [full subtype](foundation.full-subtypes.md), hence it is equivalent to
the whole type of fiberwise maps.
```agda
module _
{l1 l2 : Level} {A : UU l1} (a : A) {B : A → UU l2}
(is-torsorial-B : is-torsorial B)
where
equiv-fam-map-fam-equiv-is-torsorial :
((x : A) → (a = x) ≃ B x) ≃ ((x : A) → (a = x) → B x)
equiv-fam-map-fam-equiv-is-torsorial =
( equiv-inclusion-is-full-subtype
( λ h → Π-Prop A (λ a → is-equiv-Prop (h a)))
( fundamental-theorem-id is-torsorial-B)) ∘e
( equiv-fiberwise-equiv-fam-equiv _ _)
```
### `Id : A → (A → 𝒰)` is an embedding
We first show that [the preunivalence axiom](foundation.preunivalence.md)
implies that the map `Id : A → (A → 𝒰)` is an
[embedding](foundation.embeddings.md). Since the
[univalence axiom](foundation.univalence.md) implies preunivalence, it follows
that `Id : A → (A → 𝒰)` is an embedding under the postulates of agda-unimath.
#### Preunivalence implies that `Id : A → (A → 𝒰)` is an embedding
The proof that preunivalence implies that `Id : A → (A → 𝒰)` is an embedding
proceeds via the
[fundamental theorem of identity types](foundation.fundamental-theorem-of-identity-types.md)
by showing that the [fiber](foundation.fibers-of-maps.md) of `Id` at `Id a` is
[contractible](foundation.contractible-types.md) for each `a : A`. To see this,
we first note that this fiber has an element `(a , refl)`. Therefore it suffices
to show that this fiber is a proposition. We do this by constructing an
embedding
```text
fiber Id (Id a) ↪ Σ A (Id a).
```
Since the codomain of this embedding is contractible, the claim follows. The
above embedding is constructed as the composite of the following embeddings
```text
Σ (x : A), Id x = Id a
↪ Σ (x : A), (y : A) → (x = y) = (a = y)
↪ Σ (x : A), (y : A) → (x = y) ≃ (a = y)
↪ Σ (x : A), Σ (e : (y : A) → (x = y) → (a = y)), (y : A) → is-equiv (e y)
↪ Σ (x : A), (y : A) → (x = y) → (a = y)
↪ Σ (x : A), a = x.
```
In this composite, we used preunivalence at the second step.
```agda
module _
{l : Level} (A : UU l)
(L : (a x y : A) → instance-preunivalence (Id x y) (Id a y))
where
emb-fiber-Id-preunivalent-Id :
(a : A) → fiber' Id (Id a) ↪ Σ A (Id a)
emb-fiber-Id-preunivalent-Id a =
comp-emb
( comp-emb
( emb-equiv
( equiv-tot
( λ x →
( equiv-ev-refl x) ∘e
( equiv-fam-map-fam-equiv-is-torsorial x (is-torsorial-Id a)))))
( emb-tot
( λ x →
comp-emb
( emb-Π (λ y → _ , L a x y))
( emb-equiv equiv-funext))))
( emb-equiv (inv-equiv (equiv-fiber Id (Id a))))
is-emb-Id-preunivalent-Id : is-emb (Id {A = A})
is-emb-Id-preunivalent-Id a =
fundamental-theorem-id
( ( a , refl) ,
( λ _ →
is-injective-emb
( emb-fiber-Id-preunivalent-Id a)
( eq-is-contr (is-torsorial-Id a))))
( λ _ → ap Id)
module _
(L : preunivalence-axiom) {l : Level} (A : UU l)
where
is-emb-Id-preunivalence-axiom : is-emb (Id {A = A})
is-emb-Id-preunivalence-axiom =
is-emb-Id-preunivalent-Id A (λ a x y → L (Id x y) (Id a y))
```
#### `Id : A → (A → 𝒰)` is an embedding
```agda
module _
{l : Level} (A : UU l)
where
is-emb-Id : is-emb (Id {A = A})
is-emb-Id = is-emb-Id-preunivalence-axiom preunivalence A
```
#### For any type family `B` over `A`, the type of pairs `(a , e)` consisting of `a : A` and a family of equivalences `e : (x : A) → (a = x) ≃ B x` is a proposition
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : A → UU l2}
where
is-proof-irrelevant-total-family-of-equivalences-Id :
is-proof-irrelevant (Σ A (λ a → (x : A) → (a = x) ≃ B x))
is-proof-irrelevant-total-family-of-equivalences-Id (a , e) =
is-contr-equiv
( Σ A (λ b → (x : A) → (b = x) ≃ (a = x)))
( equiv-tot
( λ b →
equiv-Π-equiv-family
( λ x → equiv-postcomp-equiv (inv-equiv (e x)) (b = x))))
( is-contr-equiv'
( fiber Id (Id a))
( equiv-tot
( λ b →
equiv-Π-equiv-family (λ x → equiv-univalence) ∘e equiv-funext))
( is-proof-irrelevant-is-prop
( is-prop-map-is-emb (is-emb-Id A) (Id a))
( a , refl)))
is-prop-total-family-of-equivalences-Id :
is-prop (Σ A (λ a → (x : A) → (a = x) ≃ B x))
is-prop-total-family-of-equivalences-Id =
is-prop-is-proof-irrelevant
( is-proof-irrelevant-total-family-of-equivalences-Id)
```
### The type of point-preserving fiberwise equivalences between `Id x` and a pointed torsorial type family is contractible
**Proof:** Since `ev-refl` is an equivalence, it follows that its fibers are
contractible. Explicitly, given a point `b : B a`, the type of maps
`h : (x : A) → (a = x) → B x` such that `h a refl = b` is contractible. But the
type of fiberwise maps is equivalent to the type of fiberwise equivalences.
```agda
module _
{l1 l2 : Level} {A : UU l1} {a : A} {B : A → UU l2} (b : B a)
(is-torsorial-B : is-torsorial B)
where
abstract
is-torsorial-pointed-fam-equiv-is-torsorial :
is-torsorial
( λ (e : (x : A) → (a = x) ≃ B x) →
map-equiv (e a) refl = b)
is-torsorial-pointed-fam-equiv-is-torsorial =
is-contr-equiv'
( fiber (ev-refl a {B = λ x _ → B x}) b)
( equiv-Σ _
( inv-equiv
( equiv-fam-map-fam-equiv-is-torsorial a is-torsorial-B))
( λ h →
equiv-inv-concat
( inv
( ap
( ev-refl a)
( is-section-map-inv-equiv
( equiv-fam-map-fam-equiv-is-torsorial a is-torsorial-B)
( h))))
( b)))
( is-contr-map-is-equiv
( is-equiv-ev-refl a)
( b))
```
## See also
- In
[`foundation.torsorial-type-families`](foundation.torsorial-type-families.md)
we will show that the fiber of `Id : A → (A → 𝒰)` at `B : A → 𝒰` is equivalent
to `is-torsorial B`.
## References
- The fact that preunivalence, or axiom L, is sufficient to prove that
`Id : A → (A → 𝒰)` is an embedding was first observed and formalized by Martín
Escardó,
[https://www.cs.bham.ac.uk//~mhe/TypeTopology/UF.IdEmbedding.html](https://www.cs.bham.ac.uk//~mhe/TypeTopology/UF.IdEmbedding.html).
{{#bibliography}} {{#reference TypeTopology}}