{-# OPTIONS --without-K --rewriting --overlapping-instances #-}
open import HoTT
module homotopy.ConstantToSetExtendsToProp {i j}
{A : Type i} {B : Type j} {{_ : is-set B}}
(f : A → B) (f-is-const : ∀ a₁ a₂ → f a₁ == f a₂) where
private
Skel = SetQuot {A = A} (λ _ _ → Unit)
abstract
Skel-has-all-paths : has-all-paths Skel
Skel-has-all-paths =
SetQuot-elim
(λ a₁ →
SetQuot-elim {P = λ s₂ → q[ a₁ ] == s₂}
(λ _ → quot-rel _)
(λ _ → prop-has-all-paths-↓))
(λ {a₁ a₂} _ → ↓-Π-cst-app-in λ s₂ →
prop-has-all-paths-↓)
instance
Skel-is-prop : is-prop Skel
Skel-is-prop = all-paths-is-prop Skel-has-all-paths
Skel-lift : Skel → B
Skel-lift = SetQuot-rec f (λ {a₁ a₂} _ → f-is-const a₁ a₂)
ext : Trunc -1 A → B
ext = Skel-lift ∘ Trunc-rec q[_]
abstract
ext-is-const : ∀ a₁ a₂ → ext a₁ == ext a₂
ext-is-const = Trunc-elim
(λ a₁ → Trunc-elim
(λ a₂ → f-is-const a₁ a₂))
private
abstract
β : ext ∘ [_] == f
β = idp