Martin Escardo, 13th January 2021.
Interface to code from my MGS 2019 lecture notes.
\begin{code}
{-# OPTIONS --without-K --exact-split --safe --auto-inline #-}
module UF.Lower-FunExt where
open import MLTT.Spartan
open import UF.Base
open import UF.Equiv
open import UF.FunExt
open import MGS.TypeTopology-Interface
import MGS.Equivalences
import MGS.FunExt-from-Univalence
import MGS.Universe-Lifting
abstract
lower-DN-funext : ∀ 𝓦 𝓣 → DN-funext (𝓤 ⊔ 𝓦) (𝓥 ⊔ 𝓣) → DN-funext 𝓤 𝓥
lower-DN-funext {𝓤} {𝓥} 𝓦 𝓣 fe = MGS.Universe-Lifting.lower-dfunext 𝓦 𝓣 𝓤 𝓥 fe
DN-funext-gives-funext : {𝓤 𝓥 : Universe} → DN-funext 𝓤 𝓥 → funext 𝓤 𝓥
DN-funext-gives-funext dnfe {X} {A} f g = γ
where
h : f = g → f ∼ g
h = MGS.FunExt-from-Univalence.happly f g
a : is-equiv h
a = MGS-equivs-are-equivs h (MGS.FunExt-from-Univalence.dfunext-gives-hfunext dnfe f g)
b : is-equiv (happly' f g)
b = equiv-closed-under-∼ h (happly' f g) a (happly'-is-MGS-happly f g)
c : MGS.Equivalences.is-equiv (happly' f g)
c = equivs-are-MGS-equivs (happly' f g) b
γ : is-equiv (happly' f g)
γ = MGS-equivs-are-equivs (happly' f g) c
lower-funext : ∀ 𝓦 𝓣 → funext (𝓤 ⊔ 𝓦) (𝓥 ⊔ 𝓣) → funext 𝓤 𝓥
lower-funext {𝓤} {𝓥} 𝓦 𝓣 fe = DN-funext-gives-funext (lower-DN-funext 𝓦 𝓣 (dfunext fe))
lower-fun-ext : ∀ {𝓦} 𝓣 → funext (𝓤 ⊔ 𝓦) (𝓥 ⊔ 𝓣) → funext 𝓤 𝓥
lower-fun-ext {𝓤} {𝓥} {𝓦} 𝓣 fe = DN-funext-gives-funext (lower-DN-funext 𝓦 𝓣 (dfunext fe))
\end{code}