{-# OPTIONS --without-K --exact-split #-}
open import Transport
open import EquivalenceType
open import FunExtAxiom

Function extensionality transport case

module
  FunExtTransport {ℓ₁ ℓ₂ : Level}{X : Type ℓ₁} {A B : X  Type ℓ₂} {x y : X}
    where
funext-transport
  : (p : x == y)  (f : A x  B x)  (g : A y  B y)
  ------------------------------------------------------------
   (tr (λ z₁  (x : A z₁)  B z₁) p f == g)((a : A(x))  tr B p (f a) == g (tr A p a))

funext-transport idp f g = eqFunExt
funext-transport-l
  : (p : x == y)
   (f : A x  B x)
   (g : A y  B y)
   ((tr (λ z₁  (x : A z₁)  B z₁) p f == g)
  -------------------------------------------
   ((a : A(x))  tr B p (f a) == g (tr A p a)))

funext-transport-l p f g = lemap (funext-transport p _ _)
funext-transport-r
  : (p : x == y)
   (f : A x  B x)
   (g : A y  B y)
   ((a : A(x))  tr B p (f a) == g (tr A p a))
  -------------------------------------------
   (tr (λ z₁  (x : A z₁)  B z₁) p f == g)

funext-transport-r p f g = remap (funext-transport p _ _)