Martin Escardo, 19th May 2018. Properties of function extensionality. \begin{code} {-# OPTIONS --safe --without-K #-} module UF.FunExt-Properties where open import MLTT.Spartan open import UF.Base open import UF.FunExt open import UF.Equiv open import UF.Equiv-FunExt open import UF.Yoneda open import UF.Singleton-Properties open import UF.Subsingletons open import UF.Retracts \end{code} Vladimir Voevodsky proved in Coq that naive function extensionality (any two pointwise equal non-dependent functions are equal) implies function extensionality (happly is an equivalence, for dependent functions): https://github.com/vladimirias/Foundations/blob/master/Generalities/uu0.v Here is an Agda version, with explicit indication of the universe levels. \begin{code} naive-funext-gives-funext' : naive-funext π€ (π€ β π₯) β naive-funext π€ π€ β funext π€ π₯ naive-funext-gives-funext' {π€} {π₯} nfe nfe' = funext-via-singletons Ξ³ where Ξ³ : (X : π€ Μ ) (A : X β π₯ Μ ) β ((x : X) β is-singleton (A x)) β is-singleton (Ξ A) Ξ³ X A Ο = Ξ΄ where f : Ξ£ A β X f = prβ f-is-equiv : is-equiv f f-is-equiv = prβ-is-equiv X A Ο g : (X β Ξ£ A) β (X β X) g h = f β h g-is-equiv : is-equiv g g-is-equiv = equiv-post nfe nfe' f f-is-equiv e : β! h κ (X β Ξ£ A) , f β h οΌ id e = equivs-are-vv-equivs g g-is-equiv id r : (Ξ£ h κ (X β Ξ£ A) , f β h οΌ id) β Ξ A r (h , p) x = transport A (happly p x) (prβ (h x)) s : Ξ A β (Ξ£ h κ (X β Ξ£ A) , f β h οΌ id) s Ο = (Ξ» x β x , Ο x) , refl rs : β Ο β r (s Ο) οΌ Ο rs Ο = refl Ξ΄ : is-singleton (Ξ A) Ξ΄ = retract-of-singleton (r , s , rs) e naive-funext-gives-funext : naive-funext π€ π€ β funext π€ π€ naive-funext-gives-funext fe = naive-funext-gives-funext' fe fe naive-funext-gives-funextβ : naive-funext π€ π€ β funext π€ π€β naive-funext-gives-funextβ fe = naive-funext-gives-funext' fe fe \end{code} Added by Evan Cavallo on 13th March 2025. The equivalence extensionality axiom is the restriction of function extensionality to equivalences. By an argument similar to the proof of function extensionality from univalence, it implies full function extensionality. \begin{code} equivext : β π€ π₯ β π€ βΊ β π₯ βΊ Μ equivext π€ π₯ = {X : π€ Μ } {Y : π₯ Μ } (Ξ± Ξ² : X β Y) β is-equiv (Ξ» (p : Ξ± οΌ Ξ²) β happly (ap β_β p)) equivext-gives-funext : equivext π€ π€ β funext π€ π€ equivext-gives-funext {π€} ee = funext-via-singletons main where promote : (A : π€ Μ ) {X Y : π€ Μ } β X β Y β (A β X) β (A β Y) promote A Ξ± = qinveq (_β Ξ±) ( (_β β-sym Ξ±) , (Ξ» Ξ² β inverse _ (ee _ _) (inverses-are-retractions _ (prβ Ξ±) β β Ξ² β)) , (Ξ» Ξ³ β inverse _ (ee _ _) (inverses-are-sections _ (prβ Ξ±) β β Ξ³ β))) module _ (X : π€ Μ ) (Y : X β π€ Μ ) (cY : (x : X) β is-singleton (Y x)) where Ο : (Ξ£ Y) β X Ο = qinveq prβ ( (Ξ» x β x , prβ (cY x)) , (Ξ» (x , y) β to-Ξ£-οΌ (refl , prβ (cY x) y)) , βΌ-refl) sec : Ξ Y β fiber β promote X Ο β ππ sec f = ( qinveq (Ξ» x β x , f x) ( prβ , βΌ-refl , (Ξ» (x , y) β to-Ξ£-οΌ (refl , singletons-are-props (cY x) _ _))) , inverse _ (ee _ _) βΌ-refl) ret : fiber β promote X Ο β ππ β Ξ Y ret (Ξ± , p) x = transport Y (happly (ap β_β p) x) (prβ (prβ Ξ± x)) inv : ret β sec βΌ id inv f = ap (Ξ» h β Ξ» x β transport Y (h x) (prβ (prβ Ξ± x))) cancel where Ξ± = prβ (sec f) p = prβ (sec f) cancel : happly (ap β_β p) οΌ βΌ-refl cancel = inverses-are-sections _ (ee _ _) (βΌ-refl) main : is-singleton (Ξ Y) main = singleton-closed-under-retract (Ξ Y) (fiber β promote X Ο β ππ) (ret , sec , inv) (equivs-are-vv-equivs _ (prβ (promote X Ο)) ππ) \end{code} End of addition.