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.NotNotFunExt (dnfe : ¬¬ (DN-funext 𝓤₀ 𝓤₀)) where

fe : {X : Set} {Y : X  Set}
    {f g : (x : X)  Y x}
    f  g  ¬¬ (f  g)
fe e u = dnfe  z  u (z e))


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² {X} {Y} {Z} {f} {g} exy = goal
 where
  F G : (w : Σ \(x : X)  Y x)  Z (pr₁ w) (pr₂ w)
  F (x , y) = f x y
  G (x , y) = g x y
  Exy : (w : Σ \(x : X)  Y x)  F w  G w
  Exy (x , y) = exy x y
  E : ¬¬ (F  G)
  E = fe Exy
  goal : ¬¬ (f  g) 
  goal = ¬¬-functor (ap  φ x y  φ(x , y))) E


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³ {X} {Y} {Z} {W} {f} {g} exyz = goal
 where
  F G : (w : Σ \(x : X)  Σ \(y : Y x)  Z x y)  W (pr₁ w) (pr₁(pr₂ w)) (pr₂(pr₂ w))
  F (x , y , z) = f x y z
  G (x , y , z) = g x y z
  Exyz : (w : Σ \(x : X)  Σ \(y : Y x)  Z x y)  F w  G w
  Exyz (x , y , z) = exyz x y z
  E : ¬¬ (F  G)
  E = fe Exyz
  goal : ¬¬ (f  g)
  goal = ¬¬-functor (ap  φ x y z  φ(x , y , z))) E


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⁴ {X} {Y} {Z} {W} {U} {f} {g} ex = goal
 where
  Ω : Set
  Ω = Σ \(x : X)  Σ \(y : Y x)  Σ \(z : Z x y)  W x y z
  F G : (ω : Ω)  U (pr₁ ω) (pr₁(pr₂ ω)) (pr₁(pr₂(pr₂ ω))) (pr₂(pr₂(pr₂ ω)))
  F (x , y , z , w) = f x y z w
  G (x , y , z , w) = g x y z w
  Ex : (ω : Ω)  F ω  G ω
  Ex (x , y , z , w) = ex x y z w
  E : ¬¬ (F  G)
  E = fe Ex
  goal : ¬¬ (f  g)
  goal = ¬¬-functor (ap  φ x y z w  φ(x , y , z , w))) E


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⁵ {X} {Y} {Z} {W} {U} {V} {f} {g} ex = goal
 where
  Ω : Set
  Ω = Σ \(x : X)  Σ \(y : Y x)  Σ \(z : Z x y)  Σ \(w : W x y z)  U x y z w
  F G : (ω : Ω)  V (pr₁ ω) (pr₁(pr₂ ω)) (pr₁(pr₂(pr₂ ω))) (pr₁(pr₂(pr₂(pr₂ ω)))) (pr₂(pr₂(pr₂(pr₂ ω))))
  F (x , y , z , w , u) = f x y z w u
  G (x , y , z , w , u) = g x y z w u
  Ex : (ω : Ω)  F ω  G ω
  Ex (x , y , z , w , u) = ex x y z w u
  E : ¬¬ (F  G)
  E = fe Ex
  goal : ¬¬ (f  g)
  goal = ¬¬-functor (ap  φ x y z w u  φ(x , y , z , w , u))) E

\end{code}