# Weakly constant maps

```agda
module foundation.weakly-constant-maps where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.fixed-points-endofunctions
open import foundation.identity-types
open import foundation.iterated-dependent-product-types
open import foundation.universe-levels

open import foundation-core.contractible-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.propositions
open import foundation-core.sets
open import foundation-core.torsorial-type-families
```

</details>

## Idea

A map `f : A → B` is said to be
{{#concept "weakly constant" Disambiguation="map of types" Agda=is-weakly-constant}}
if any two elements in `A` are mapped to
[identical elements](foundation-core.identity-types.md) in `B`.

## Definitions

### The structure on a map of being weakly constant

```agda
is-weakly-constant :
  {l1 l2 : Level} {A : UU l1} {B : UU l2}  (A  B)  UU (l1  l2)
is-weakly-constant {A = A} f = (x y : A)  f x  f y
```

### The type of weakly constant maps

```agda
weakly-constant-map : {l1 l2 : Level} (A : UU l1) (B : UU l2)  UU (l1  l2)
weakly-constant-map A B = Σ (A  B) (is-weakly-constant)

module _
  {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : weakly-constant-map A B)
  where

  map-weakly-constant-map : A  B
  map-weakly-constant-map = pr1 f

  is-weakly-constant-weakly-constant-map :
    is-weakly-constant map-weakly-constant-map
  is-weakly-constant-weakly-constant-map = pr2 f
```

## Properties

### Being weakly constant is a property if the codomain is a set

```agda
module _
  {l1 l2 : Level} {A : UU l1} (B : Set l2) (f : A  type-Set B)
  where

  abstract
    is-prop-is-weakly-constant-Set : is-prop (is-weakly-constant f)
    is-prop-is-weakly-constant-Set =
      is-prop-iterated-Π 2  x y  is-set-type-Set B (f x) (f y))

  is-weakly-constant-prop-Set : Prop (l1  l2)
  pr1 is-weakly-constant-prop-Set = is-weakly-constant f
  pr2 is-weakly-constant-prop-Set = is-prop-is-weakly-constant-Set
```

### The action on identifications of a weakly constant map is weakly constant

This is Auxiliary Lemma 4.3 of {{#cite KECA17}}.

```agda
module _
  {l1 l2 : Level} {X : UU l1} {Y : UU l2} {f : X  Y}
  (W : is-weakly-constant f)
  where

  compute-ap-is-weakly-constant :
    {x y : X} (p : x  y)  inv (W x x)  W x y  ap f p
  compute-ap-is-weakly-constant {x} refl = left-inv (W x x)

  is-weakly-constant-ap : {x y : X}  is-weakly-constant (ap f {x} {y})
  is-weakly-constant-ap {x} {y} p q =
    ( inv (compute-ap-is-weakly-constant p)) 
    ( compute-ap-is-weakly-constant q)

module _
  {l1 l2 : Level} {X : UU l1} {Y : UU l2}
  (f : weakly-constant-map X Y)
  where

  ap-weakly-constant-map :
    {x y : X} 
    weakly-constant-map
      ( x  y)
      ( map-weakly-constant-map f x  map-weakly-constant-map f y)
  ap-weakly-constant-map {x} {y} =
    ( ap (map-weakly-constant-map f) {x} {y} ,
      is-weakly-constant-ap (is-weakly-constant-weakly-constant-map f))
```

### The type of fixed points of a weakly constant endomap is a proposition

This is Lemma 4.1 of {{#cite KECA17}}. We follow the second proof, due to
Christian Sattler.

```agda
module _
  {l : Level} {A : UU l} {f : A  A} (W : is-weakly-constant f)
  where

  is-proof-irrelevant-fixed-point-is-weakly-constant :
    is-proof-irrelevant (fixed-point f)
  is-proof-irrelevant-fixed-point-is-weakly-constant (x , p) =
    is-contr-equiv
      ( Σ A  z  f x  z))
      ( equiv-tot  z  equiv-concat (W x z) z))
      ( is-torsorial-Id (f x))

  is-prop-fixed-point-is-weakly-constant : is-prop (fixed-point f)
  is-prop-fixed-point-is-weakly-constant =
    is-prop-is-proof-irrelevant
      ( is-proof-irrelevant-fixed-point-is-weakly-constant)
```

## References

{{#bibliography}} {{#reference KECA17}}