{-# OPTIONS --without-K #-}
module function.extensionality.dependent where
open import level using (_⊔_; ↑; lift)
open import sets.unit
open import sum
open import equality.core
open import equality.calculus
open import function.core using (_∘_; const)
open import function.extensionality.core
open import function.extensionality.nondep
open import hott.hlevel.core
open import hott.hlevel.properties
abstract
ext₀' : ∀ {i j} → Extensionality' i j
ext₀' {i} {j} {X = X} {Y = Y} {f}{g} h = cong (λ u → proj₁ ∘ u) p
where
U : (x : X) → Set j
U x = singleton (f x)
U-contr : contr ((x : X) → U x)
U-contr = Π-contr (λ x → singl-contr (f x))
f* : (x : X) → U x
f* x = f x , refl
g* : (x : X) → U x
g* x = g x , h x
p : f* ≡ g*
p = contr⇒prop U-contr f* g*
abstract
ext' : ∀ {i j} → Extensionality' i j
ext' h = ext₀' h ⊚ ext₀' (λ _ → refl) ⁻¹
ext-id' : ∀ {i j}{X : Set i}{Y : X → Set j}
→ (f : (x : X) → Y x)
→ ext' {f = f} {f} (λ _ → refl) ≡ refl
ext-id' f = left-inverse (ext₀' (λ _ → refl))