{-# OPTIONS --without-K #-}

open import Base
open import Equality

module logic.Fibers {ℓᵢ ℓⱼ} {A : Type ℓᵢ} {B : Type ℓⱼ}  where

  -- The fiber of a map over a point is given by
  fib : (f : A  B)  B  Type (ℓᵢ  ℓⱼ)
  fib f b = Σ A  a  f a == b)
  
  -- A function applied over the fiber returns the original point
  fib-eq : {f : A  B}  {b : B}  (h : fib f b)  f (fst h) == b
  fib-eq (a , α) = α

  -- Each point is on the fiber of its image
  fib-image : {f : A  B}  {a : A}  fib f (f a)
  fib-image {f} {a} = a , refl (f a)