{-# OPTIONS --without-K #-}
module segal.preliminaries where
open import equality
open import hott.level
open import function.isomorphism
open import function.extensionality
open import function.fibration
open import level
open import sum
module _ {i} {A : Set i} where
private
Singleton : Set (lsuc i)
Singleton = Σ (A → Set i) λ P → contr (Σ A P)
f : A → Singleton
f a = ((λ b → a ≡ b), singl-contr a)
g : Singleton → A
g (_ , (a , _) , _) = a
α : (a : A) → g (f a) ≡ a
α a = refl
β : (s : Singleton) → f (g s) ≡ s
β (P , (x , p) , h) = unapΣ (lem , h1⇒prop (hn-h1 0 _) _ _)
where
t-iso : singleton x ≅ Σ A P
t-iso = contr-⊤-iso (singl-contr x)
·≅ sym≅ (contr-⊤-iso ((x , p), h))
t-iso-β : (b : A)(p : x ≡ b) → proj₁ (apply≅ t-iso (b , p)) ≡ b
t-iso-β .x refl = refl
lem : (λ b → x ≡ b) ≡ P
lem = funext λ b → ≅⇒≡ (family-eq-iso t-iso t-iso-β b)
contr-predicate : Singleton ≅ A
contr-predicate = iso g f β α
contr-predicate-η : (a : A) → proj₁ (invert≅ contr-predicate a) ≡ (λ b → a ≡ b)
contr-predicate-η a = refl
add-contr : {B : A → Set i}
→ ((a : A) → contr (B a))
→ A ≅ Σ A B
add-contr {B = B} hB = sym≅ ( Σ-ap-iso₂ (λ a → contr-⊤-iso (hB a))
·≅ ×-right-unit)
module _ {i} {A B : Set i} where
iso-adjunct : {a : A}{b : B}(φ : A ≅ B)
→ apply≅ φ a ≡ b
→ a ≡ invert≅ φ b
iso-adjunct {a} φ p = sym (_≅_.iso₁ φ a) · ap (invert≅ φ) p