# Repetitions of values of maps

```agda
module foundation.repetitions-of-values where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.embeddings
open import foundation.equivalences
open import foundation.identity-types
open import foundation.negated-equality
open import foundation.pairs-of-distinct-elements
open import foundation.universe-levels

open import foundation-core.commuting-squares-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
```

</details>

## Idea

A repetition of values of a map `f : A → B` consists of a pair of distinct
points in `A` that get mapped to the same point in `B`.

## Definitions

### The predicate that a pair of distinct elements is a repetition of values

```agda
module _
  {l1 l2 : Level} {A : UU l1} {B : UU l2}
  where

  is-repetition-of-values :
    (f : A  B) (p : pair-of-distinct-elements A)  UU l2
  is-repetition-of-values f p =
    f (first-pair-of-distinct-elements p) 
    f (second-pair-of-distinct-elements p)

  repetition-of-values : (A  B)  UU (l1  l2)
  repetition-of-values f =
    Σ ( pair-of-distinct-elements A)
      ( is-repetition-of-values f)

module _
  {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A  B)
  (r : repetition-of-values f)
  where

  pair-of-distinct-elements-repetition-of-values : pair-of-distinct-elements A
  pair-of-distinct-elements-repetition-of-values = pr1 r

  first-repetition-of-values : A
  first-repetition-of-values =
    first-pair-of-distinct-elements
      pair-of-distinct-elements-repetition-of-values

  second-repetition-of-values : A
  second-repetition-of-values =
    second-pair-of-distinct-elements
      pair-of-distinct-elements-repetition-of-values

  distinction-repetition-of-values :
    first-repetition-of-values  second-repetition-of-values
  distinction-repetition-of-values =
    distinction-pair-of-distinct-elements
      pair-of-distinct-elements-repetition-of-values

  is-repetition-of-values-repetition-of-values :
    is-repetition-of-values f
      pair-of-distinct-elements-repetition-of-values
  is-repetition-of-values-repetition-of-values = pr2 r
```

### The predicate that an element is repeated

```agda
is-repeated-value :
  {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A  B) (a : A)  UU (l1  l2)
is-repeated-value {l1} {l2} {A} {B} f a =
  Σ (Σ A  x  a  x))  x  f a  f (pr1 x))
```

## Properties

### Repetitions of values of composite maps

```agda
repetition-of-values-comp :
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} (g : B  C)
  {f : A  B}  repetition-of-values f  repetition-of-values (g  f)
repetition-of-values-comp g ((x , y , s) , t) =
  ((x , y , s) , ap g t)

repetition-of-values-left-factor :
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {g : B  C}
  {f : A  B}  is-emb f  repetition-of-values (g  f)  repetition-of-values g
repetition-of-values-left-factor {g = g} {f} H ((a , b , K) , p) =
  ((f a , f b , λ q  K (is-injective-is-emb H q)) , p)

repetition-of-values-right-factor :
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {g : B  C}
  {f : A  B}  is-emb g  repetition-of-values (g  f)  repetition-of-values f
repetition-of-values-right-factor {g = g} {f} H ((a , b , K) , p) =
  ((a , b , K) , is-injective-is-emb H p)
```

### The type of repetitions of values is invariant under equivalences

```agda
module _
  {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
  (f : A  B) (g : C  D) (e : A  C) (d : B  D)
  (H : coherence-square-maps (map-equiv e) f g (map-equiv d))
  where

  equiv-repetition-of-values : repetition-of-values f  repetition-of-values g
  equiv-repetition-of-values =
    equiv-Σ
      ( λ p 
        ( g (first-pair-of-distinct-elements p)) 
        ( g (second-pair-of-distinct-elements p)))
      ( equiv-pair-of-distinct-elements e)
      ( λ p 
        ( ( equiv-concat'
            ( g (map-equiv e (first-pair-of-distinct-elements p)))
            ( H (second-pair-of-distinct-elements p))) ∘e
          ( equiv-concat
            ( inv (H (first-pair-of-distinct-elements p)))
            ( map-equiv d (f (second-pair-of-distinct-elements p))))) ∘e
        ( equiv-ap d
          ( f (first-pair-of-distinct-elements p))
          ( f (second-pair-of-distinct-elements p))))

  map-equiv-repetition-of-values :
    repetition-of-values f  repetition-of-values g
  map-equiv-repetition-of-values =
    map-equiv equiv-repetition-of-values

  map-inv-equiv-repetition-of-values :
    repetition-of-values g  repetition-of-values f
  map-inv-equiv-repetition-of-values = map-inv-equiv equiv-repetition-of-values

  is-section-map-inv-equiv-repetition-of-values :
    ( map-equiv-repetition-of-values  map-inv-equiv-repetition-of-values) ~ id
  is-section-map-inv-equiv-repetition-of-values =
    is-section-map-inv-equiv equiv-repetition-of-values

  is-retraction-map-inv-equiv-repetition-of-values :
    ( map-inv-equiv-repetition-of-values  map-equiv-repetition-of-values) ~ id
  is-retraction-map-inv-equiv-repetition-of-values =
    is-retraction-map-inv-equiv equiv-repetition-of-values
```

### Embeddings of repetitions values

```agda
module _
  {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
  (f : A  B) (g : C  D) (e : A  C) (d : B  D)
  (H : coherence-square-maps (map-emb e) f g (map-emb d))
  where

  emb-repetition-of-values : repetition-of-values f  repetition-of-values g
  emb-repetition-of-values =
    emb-Σ
      ( λ p 
        ( g (first-pair-of-distinct-elements p)) 
        ( g (second-pair-of-distinct-elements p)))
      ( emb-pair-of-distinct-elements e)
      ( λ p 
        emb-equiv
          ( ( ( equiv-concat'
                ( g (map-emb e (first-pair-of-distinct-elements p)))
                ( H (second-pair-of-distinct-elements p))) ∘e
              ( equiv-concat
                ( inv (H (first-pair-of-distinct-elements p)))
                ( map-emb d (f (second-pair-of-distinct-elements p))))) ∘e
            ( equiv-ap-emb d)))

  map-emb-repetition-of-values : repetition-of-values f  repetition-of-values g
  map-emb-repetition-of-values = map-emb emb-repetition-of-values

  is-emb-map-emb-repetition-of-values : is-emb map-emb-repetition-of-values
  is-emb-map-emb-repetition-of-values = is-emb-map-emb emb-repetition-of-values
```