# The universal property of the unit type
```agda
module foundation.universal-property-unit-type where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.diagonal-maps-of-types
open import foundation.unit-type
open import foundation.universal-property-contractible-types
open import foundation.universal-property-equivalences
open import foundation.universe-levels
open import foundation-core.constant-maps
open import foundation-core.contractible-types
open import foundation-core.equivalences
open import foundation-core.homotopies
open import foundation-core.precomposition-functions
```
</details>
## Idea
The universal property of the unit type characterizes maps out of the unit type.
Similarly, the dependent universal property of the unit type characterizes
dependent functions out of the unit type.
In `foundation.contractible-types` we have alread proven related universal
properties of contractible types.
## Properties
```agda
ev-star :
{l : Level} (P : unit → UU l) → ((x : unit) → P x) → P star
ev-star P f = f star
ev-star' :
{l : Level} (Y : UU l) → (unit → Y) → Y
ev-star' Y = ev-star (λ t → Y)
abstract
dependent-universal-property-unit :
{l : Level} (P : unit → UU l) → is-equiv (ev-star P)
dependent-universal-property-unit =
dependent-universal-property-contr-is-contr star is-contr-unit
equiv-dependent-universal-property-unit :
{l : Level} (P : unit → UU l) → ((x : unit) → P x) ≃ P star
pr1 (equiv-dependent-universal-property-unit P) = ev-star P
pr2 (equiv-dependent-universal-property-unit P) =
dependent-universal-property-unit P
abstract
universal-property-unit :
{l : Level} (Y : UU l) → is-equiv (ev-star' Y)
universal-property-unit Y = dependent-universal-property-unit (λ t → Y)
equiv-universal-property-unit :
{l : Level} (Y : UU l) → (unit → Y) ≃ Y
pr1 (equiv-universal-property-unit Y) = ev-star' Y
pr2 (equiv-universal-property-unit Y) = universal-property-unit Y
inv-equiv-universal-property-unit :
{l : Level} (Y : UU l) → Y ≃ (unit → Y)
inv-equiv-universal-property-unit Y =
inv-equiv (equiv-universal-property-unit Y)
abstract
is-equiv-point-is-contr :
{l1 : Level} {X : UU l1} (x : X) →
is-contr X → is-equiv (point x)
is-equiv-point-is-contr x is-contr-X =
is-equiv-is-contr (point x) is-contr-unit is-contr-X
abstract
is-equiv-point-universal-property-unit :
{l1 : Level} (X : UU l1) (x : X) →
({l2 : Level} (Y : UU l2) → is-equiv (λ (f : X → Y) → f x)) →
is-equiv (point x)
is-equiv-point-universal-property-unit X x H =
is-equiv-is-equiv-precomp
( point x)
( λ Y →
is-equiv-right-factor
( ev-star' Y)
( precomp (point x) Y)
( universal-property-unit Y)
( H Y))
abstract
universal-property-unit-is-equiv-point :
{l1 : Level} {X : UU l1} (x : X) →
is-equiv (point x) →
({l2 : Level} (Y : UU l2) → is-equiv (λ (f : X → Y) → f x))
universal-property-unit-is-equiv-point x is-equiv-point Y =
is-equiv-comp
( ev-star' Y)
( precomp (point x) Y)
( is-equiv-precomp-is-equiv (point x) is-equiv-point Y)
( universal-property-unit Y)
abstract
universal-property-unit-is-contr :
{l1 : Level} {X : UU l1} (x : X) →
is-contr X →
({l2 : Level} (Y : UU l2) → is-equiv (λ (f : X → Y) → f x))
universal-property-unit-is-contr x is-contr-X =
universal-property-unit-is-equiv-point x
( is-equiv-point-is-contr x is-contr-X)
abstract
is-equiv-diagonal-exponential-is-equiv-point :
{l1 : Level} {X : UU l1} (x : X) →
is-equiv (point x) →
({l2 : Level} (Y : UU l2) → is-equiv (diagonal-exponential Y X))
is-equiv-diagonal-exponential-is-equiv-point x is-equiv-point Y =
is-equiv-is-section
( universal-property-unit-is-equiv-point x is-equiv-point Y)
( refl-htpy)
```