{-

Function extensionality axioms.

-}
module axiom.funext where

open import basic.prelude

private variable  ℓ' ℓ'' : Level

------------------------------------------------------------------------------------------
-- Function extensionality.
------------------------------------------------------------------------------------------

postulate
  funExt : {A : Type } {B : A  Type ℓ'} {f₀ f₁ : (a : A)  B a}
     ((a : A)  f₀ a  f₁ a)  f₀  f₁

funExt' : {A : Type } {B : A  Type ℓ'} {f₀ f₁ : (a : A)  B a}
   ({a : A}  f₀ a  f₁ a)  f₀  f₁
funExt' p = funExt λ _  p

------------------------------------------------------------------------------------------
-- Function extensionality for flat-modal functions.
------------------------------------------------------------------------------------------

postulate
  funExt♭ : {@ : Level} {ℓ' : Level}
     {@A : Type } {B : @A  Type ℓ'}
     {f₀ f₁ : (@a : A)  B a}
      ((@a : A)  f₀ a  f₁ a)  f₀  f₁

funExt♭' : {@ : Level} {ℓ' : Level}
   {@A : Type } {B : @A  Type ℓ'}
   {f₀ f₁ : (@a : A)  B a}
    ({@a : A}  f₀ a  f₁ a)  f₀  f₁
funExt♭' h = funExt♭ λ _  h