Chuangjie Xu 2013 (ported to TypeTopology in 2025)

\begin{code}

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

open import MLTT.Spartan
open import UF.FunExt using (DN-funext)

module C-Spaces.Preliminaries.FunExt (fe : DN-funext 𝓤₀ 𝓤₀) where

fe² : {X : Set}
      {Y : X  Set}
      {Z : (x : X)  (y : Y x)  Set} 
      {f g : (x : X)  (y : Y x)  Z x y}
     (∀ x y  f x y  g x y)  f  g
fe² ex = fe  x  fe (ex x))

fe³ : {X : Set}
      {Y : X  Set}
      {Z : (x : X)  Y x  Set}
      {W : (x : X)  (y : Y x)  Z x y  Set}
      {f g : (x : X)  (y : Y x)  (z : Z x y)  W x y z}
     (∀ x y z  f x y z  g x y z)  f  g
fe³ ex = fe  x  fe² (ex x))

fe⁴ : {X : Set}
      {Y : X  Set}
      {Z : (x : X)  Y x  Set}
      {W : (x : X)  (y : Y x)  Z x y  Set}
      {U : (x : X)  (y : Y x)  (z : Z x y)  (w : W x y z)  Set}
      {f g : (x : X)  (y : Y x)  (z : Z x y)  (w : W x y z)  U x y z w}
     (∀ x y z w  f x y z w  g x y z w)  f  g
fe⁴ ex = fe  x  fe³ (ex x))

fe⁵ : {X : Set}
      {Y : X  Set}
      {Z : (x : X)  Y x  Set}
      {W : (x : X)  (y : Y x)  Z x y  Set}
      {U : (x : X)  (y : Y x)  (z : Z x y)  W x y z  Set}
      {V : (x : X)  (y : Y x)  (z : Z x y)  (w : W x y z)  U x y z w  Set}
      {f g : (x : X)  (y : Y x)  (z : Z x y)  (w : W x y z)  (u : U x y z w)
            V x y z w u}
     (∀ x y z w u  f x y z w u  g x y z w u)  f  g
fe⁵ ex = fe  x  fe⁴ (ex x))

\end{code}