# Equality in the fibers of a map

```agda
module foundation.equality-fibers-of-maps where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.transport-along-identifications
open import foundation.universe-levels

open import foundation-core.equality-dependent-pair-types
open import foundation-core.equivalences
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
```

</details>

## Idea

In the file
[`foundation-core.fibers-of-maps`](foundation-core.fibers-of-maps.md) we already
gave one characterization of the identity type of `fiber f b`, for an arbitrary
map `f : A → B`. Here we give a second characterization, using the fibers of the
action on identifications of `f`.

## Theorem

For any map `f : A → B` any `b : B` and any `x y : fiber f b`, there is an
equivalence

```text
(x = y) ≃ fiber (ap f) (pr2 x ∙ inv (pr2 y))
```

### Proof

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

  fiber-ap-eq-fiber-fiberwise :
    (s t : fiber f b) (p : pr1 s  pr1 t) 
    tr  (a : A)  f a  b) p (pr2 s)  pr2 t 
    ap f p  pr2 s  inv (pr2 t)
  fiber-ap-eq-fiber-fiberwise (.x' , p) (x' , refl) refl =
    inv  concat right-unit refl

  abstract
    is-fiberwise-equiv-fiber-ap-eq-fiber-fiberwise :
      (s t : fiber f b)  is-fiberwise-equiv (fiber-ap-eq-fiber-fiberwise s t)
    is-fiberwise-equiv-fiber-ap-eq-fiber-fiberwise (x , y) (.x , refl) refl =
      is-equiv-comp
        ( inv)
        ( concat right-unit refl)
        ( is-equiv-concat right-unit refl)
        ( is-equiv-inv (y  refl) refl)

  fiber-ap-eq-fiber :
    (s t : fiber f b)  s  t 
    fiber (ap f {x = pr1 s} {y = pr1 t}) (pr2 s  inv (pr2 t))
  pr1 (fiber-ap-eq-fiber s .s refl) = refl
  pr2 (fiber-ap-eq-fiber s .s refl) = inv (right-inv (pr2 s))

  triangle-fiber-ap-eq-fiber :
    (s t : fiber f b) 
    fiber-ap-eq-fiber s t ~
    tot (fiber-ap-eq-fiber-fiberwise s t)  pair-eq-Σ {s = s} {t}
  triangle-fiber-ap-eq-fiber (x , refl) .(x , refl) refl = refl

  abstract
    is-equiv-fiber-ap-eq-fiber :
      (s t : fiber f b)  is-equiv (fiber-ap-eq-fiber s t)
    is-equiv-fiber-ap-eq-fiber s t =
      is-equiv-left-map-triangle
        ( fiber-ap-eq-fiber s t)
        ( tot (fiber-ap-eq-fiber-fiberwise s t))
        ( pair-eq-Σ {s = s} {t})
        ( triangle-fiber-ap-eq-fiber s t)
        ( is-equiv-pair-eq-Σ s t)
        ( is-equiv-tot-is-fiberwise-equiv
          ( is-fiberwise-equiv-fiber-ap-eq-fiber-fiberwise s t))

  equiv-fiber-ap-eq-fiber :
    (s t : fiber f b) 
    (s  t)  fiber (ap f {x = pr1 s} {y = pr1 t}) (pr2 s  inv (pr2 t))
  pr1 (equiv-fiber-ap-eq-fiber s t) = fiber-ap-eq-fiber s t
  pr2 (equiv-fiber-ap-eq-fiber s t) = is-equiv-fiber-ap-eq-fiber s t

  map-inv-fiber-ap-eq-fiber :
    (s t : fiber f b) 
    fiber (ap f {x = pr1 s} {y = pr1 t}) (pr2 s  inv (pr2 t)) 
    s  t
  map-inv-fiber-ap-eq-fiber (x , refl) (.x , p) (refl , u) =
    eq-pair-eq-fiber (ap inv u  inv-inv p)

  ap-pr1-map-inv-fiber-ap-eq-fiber :
    (s t : fiber f b) 
    (v : fiber (ap f {x = pr1 s} {y = pr1 t}) (pr2 s  inv (pr2 t))) 
    ap pr1 (map-inv-fiber-ap-eq-fiber s t v)  pr1 v
  ap-pr1-map-inv-fiber-ap-eq-fiber (x , refl) (.x , p) (refl , u) =
    ap-pr1-eq-pair-eq-fiber (ap inv u  inv-inv p)

module _
  {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A  B) (x y : A)
  where

  eq-fiber-fiber-ap :
    (q : f x  f y)  (x , q)  (y , refl)  fiber (ap f {x} {y}) q
  eq-fiber-fiber-ap q =
    tr (fiber (ap f)) right-unit  fiber-ap-eq-fiber f (x , q) (y , refl)

  abstract
    is-equiv-eq-fiber-fiber-ap :
      (q : (f x)  f y)  is-equiv (eq-fiber-fiber-ap q)
    is-equiv-eq-fiber-fiber-ap q =
      is-equiv-comp
        ( tr (fiber (ap f)) right-unit)
        ( fiber-ap-eq-fiber f (x , q) (y , refl))
        ( is-equiv-fiber-ap-eq-fiber f (x , q) (y , refl))
        ( is-equiv-tr (fiber (ap f)) right-unit)
```

## Table of files about fibers of maps

The following table lists files that are about fibers of maps as a general
concept.

{{#include tables/fibers-of-maps.md}}

## See also

- Equality proofs in dependent pair types are characterized in
  [`foundation.equality-dependent-pair-types`](foundation.equality-dependent-pair-types.md).
- Equality proofs in dependent function types are characterized in
  [`foundation.equality-dependent-function-types`](foundation.equality-dependent-function-types.md).