# Constant maps

```agda
module foundation.constant-maps where

open import foundation-core.constant-maps public
```

<details><summary>Imports</summary>

```agda
open import foundation.0-maps
open import foundation.action-on-homotopies-functions
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.faithful-maps
open import foundation.function-extensionality
open import foundation.functoriality-dependent-pair-types
open import foundation.images
open import foundation.morphisms-arrows
open import foundation.postcomposition-functions
open import foundation.propositional-truncations
open import foundation.retracts-of-maps
open import foundation.retracts-of-types
open import foundation.transposition-identifications-along-equivalences
open import foundation.type-arithmetic-unit-type
open import foundation.type-theoretic-principle-of-choice
open import foundation.unit-type
open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition

open import foundation-core.1-types
open import foundation-core.commuting-squares-of-maps
open import foundation-core.contractible-maps
open import foundation-core.contractible-types
open import foundation-core.embeddings
open import foundation-core.equivalences
open import foundation-core.fibers-of-maps
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.injective-maps
open import foundation-core.propositional-maps
open import foundation-core.propositions
open import foundation-core.sets
open import foundation-core.truncated-maps
open import foundation-core.truncated-types
open import foundation-core.truncation-levels
```

</details>

## Properties

### The action on homotopies of a constant map is constant

```agda
module _
  {l1 l2 l3 : Level}
  {A : UU l1} {B : A  UU l2} {C : UU l3}
  {f g : (x : A)  B x}
  where

  compute-action-htpy-function-const :
    (c : C) (H : f ~ g) 
    action-htpy-function (const ((x : A)  B x) c) H  refl
  compute-action-htpy-function-const c H = ap-const c (eq-htpy H)
```

### Computing the fibers of point inclusions

```agda
compute-fiber-point :
  {l : Level} {A : UU l} (x y : A)  fiber (point x) y  (x  y)
compute-fiber-point x y = left-unit-law-product
```

### A type is `k+1`-truncated if and only if all point inclusions are `k`-truncated maps

```agda
module _
  {l : Level} {A : UU l}
  where

  abstract
    is-trunc-map-point-is-trunc :
      (k : 𝕋)  is-trunc (succ-𝕋 k) A 
      (x : A)  is-trunc-map k (point x)
    is-trunc-map-point-is-trunc k is-trunc-A x y =
      is-trunc-equiv k
        ( x  y)
        ( compute-fiber-point x y)
        ( is-trunc-A x y)

  abstract
    is-trunc-is-trunc-map-point :
      (k : 𝕋)  ((x : A)  is-trunc-map k (point x)) 
      is-trunc (succ-𝕋 k) A
    is-trunc-is-trunc-map-point k is-trunc-point x y =
      is-trunc-equiv' k
        ( Σ unit  _  x  y))
        ( left-unit-law-Σ  _  x  y))
        ( is-trunc-point x y)

  abstract
    is-contr-map-point-is-prop :
      is-prop A  (x : A)  is-contr-map (point x)
    is-contr-map-point-is-prop = is-trunc-map-point-is-trunc neg-two-𝕋

  abstract
    is-equiv-point-is-prop :
      is-prop A  (x : A)  is-equiv (point x)
    is-equiv-point-is-prop H x =
      is-equiv-is-contr-map (is-contr-map-point-is-prop H x)

  abstract
    is-prop-map-point-is-set :
      is-set A  (x : A)  is-prop-map (point x)
    is-prop-map-point-is-set = is-trunc-map-point-is-trunc neg-one-𝕋

  abstract
    is-emb-point-is-set : is-set A  (x : A)  is-emb (point x)
    is-emb-point-is-set H x = is-emb-is-prop-map (is-prop-map-point-is-set H x)

  abstract
    is-0-map-point-is-1-type : is-1-type A  (x : A)  is-0-map (point x)
    is-0-map-point-is-1-type = is-trunc-map-point-is-trunc zero-𝕋

  abstract
    is-faithful-point-is-1-type :
      is-1-type A  (x : A)  is-faithful (point x)
    is-faithful-point-is-1-type H x =
      is-faithful-is-0-map (is-0-map-point-is-1-type H x)

  abstract
    is-prop-is-contr-map-point :
      ((x : A)  is-contr-map (point x))  is-prop A
    is-prop-is-contr-map-point = is-trunc-is-trunc-map-point neg-two-𝕋

  abstract
    is-prop-is-equiv-point :
      ((x : A)  is-equiv (point x))  is-prop A
    is-prop-is-equiv-point H =
      is-prop-is-contr-map-point (is-contr-map-is-equiv  H)

  abstract
    is-set-is-prop-map-point :
      ((x : A)  is-prop-map (point x))  is-set A
    is-set-is-prop-map-point = is-trunc-is-trunc-map-point neg-one-𝕋

  abstract
    is-set-is-emb-point :
      ((x : A)  is-emb (point x))  is-set A
    is-set-is-emb-point H =
      is-set-is-prop-map-point (is-prop-map-is-emb  H)

  abstract
    is-1-type-is-0-map-point :
      ((x : A)  is-0-map (point x))  is-1-type A
    is-1-type-is-0-map-point = is-trunc-is-trunc-map-point zero-𝕋

  abstract
    is-1-type-is-faithful-point :
      ((x : A)  is-faithful (point x))  is-1-type A
    is-1-type-is-faithful-point H =
      is-1-type-is-0-map-point (is-0-map-is-faithful  H)

point-equiv :
  {l : Level} (A : Prop l) (x : type-Prop A)  unit  type-Prop A
pr1 (point-equiv A x) = point x
pr2 (point-equiv A x) = is-equiv-point-is-prop (is-prop-type-Prop A) x

point-emb :
  {l : Level} (A : Set l) (x : type-Set A)  unit  type-Set A
pr1 (point-emb A x) = point x
pr2 (point-emb A x) = is-emb-point-is-set (is-set-type-Set A) x

point-faithful-map :
  {l : Level} (A : 1-Type l) (x : type-1-Type A) 
  faithful-map unit (type-1-Type A)
pr1 (point-faithful-map A x) = point x
pr2 (point-faithful-map A x) =
  is-faithful-point-is-1-type (is-1-type-type-1-Type A) x
```

### The image of a constant map into a set is contractible

```agda
abstract
  is-contr-im :
    {l1 l2 : Level} {A : UU l1} (B : Set l2) {f : A  type-Set B}
    (a : A) (H : (x : A)  f x  f a)  is-contr (im f)
  pr1 (is-contr-im B {f} a H) = map-unit-im f a
  pr2 (is-contr-im B {f} a H) (x , u) =
    apply-dependent-universal-property-trunc-Prop
      ( λ v  Id-Prop (im-Set B f) (map-unit-im f a) (x , v))
      ( u)
      ( λ where
        ( a' , refl) 
          eq-Eq-im f (map-unit-im f a) (map-unit-im f a') (inv (H a')))
```

## See also

- [Constant pointed maps](structured-types.constant-pointed-maps.md)