Jonathan Sterling, 22nd March 2023. \begin{code} {-# OPTIONS --safe --without-K #-} module Coslice.Hom where open import Coslice.Type open import MLTT.Spartan open import UF.Base open import UF.Embeddings open import UF.Equiv open import UF.EquivalenceExamples open import UF.FunExt open import UF.IdentitySystems open import UF.PairFun as PairFun open import UF.Retracts open import UF.Subsingletons open import UF.Subsingletons-Properties module _ {A : 𝓦 ̇ } where Hom-Str-Type : A ↓ 𝓤 → A ↓ 𝓥 → 𝓤 ⊔ 𝓥 ̇ Hom-Str-Type X Y = target X → target Y Hom-Coh-Type : (X : A ↓ 𝓤) (Y : A ↓ 𝓥) → Hom-Str-Type X Y → 𝓦 ⊔ 𝓥 ̇ Hom-Coh-Type X Y f = alg Y ∼ f ∘ alg X Hom : A ↓ 𝓤 → A ↓ 𝓥 → 𝓦 ⊔ 𝓤 ⊔ 𝓥 ̇ Hom X Y = Σ f ꞉ Hom-Str-Type X Y , Hom-Coh-Type X Y f module _ {X : A ↓ 𝓤} {Y : A ↓ 𝓥} where hom-fun : Hom X Y → Hom-Str-Type X Y hom-fun (f , α[f]) = f hom-alg : (f : Hom X Y) → Hom-Coh-Type X Y (hom-fun f) hom-alg (f , α[f]) = α[f] module _ (f g : Hom X Y) where Homotopy-Str-Type : 𝓤 ⊔ 𝓥 ̇ Homotopy-Str-Type = hom-fun f ∼ hom-fun g Homotopy-Coh-Type : Homotopy-Str-Type → 𝓦 ⊔ 𝓥 ̇ Homotopy-Coh-Type ϕ = Π a ꞉ A , hom-alg g a = hom-alg f a ∙ ϕ (alg X a) Hom-≈ : 𝓦 ⊔ 𝓤 ⊔ 𝓥 ̇ Hom-≈ = Σ Homotopy-Coh-Type module _ (fe : FunExt) (X : A ↓ 𝓤) (Y : A ↓ 𝓥) (f : Hom X Y) where open Id-Sys open Has-Id-Sys open Dep-Id-Sys private [f] = homotopy-id-sys (fe _ _) (hom-fun f) private module [f] = Id-Sys [f] private Aux = Σ ϕ ꞉ Hom-Coh-Type X Y (hom-fun f) , Homotopy-Coh-Type f (hom-fun f , ϕ) (λ _ → refl) Aux-singleton-type : singleton-type' (dfunext (fe _ _) (hom-alg f)) ≃ Aux Aux-singleton-type = pair-fun-equiv (happly , fe _ _ _ _) λ h → (ap happly , embedding-gives-embedding' _ (equivs-are-embeddings _ (fe _ _ _ _)) _ _) ● (_∙ happly-funext (fe _ _) _ _ (hom-alg f)) , ∙-is-equiv-right (happly-funext (fe _ _) _ _ (hom-alg f)) ● happly-≃ (fe _ _) abstract Aux-retract-singleton : Aux ◁ singleton-type' (dfunext (fe _ _) (hom-alg f)) Aux-retract-singleton = ≃-gives-◁ (≃-sym Aux-singleton-type) Aux-is-prop : is-prop Aux Aux-is-prop = retract-of-prop Aux-retract-singleton (singletons-are-props (singleton-types'-are-singletons _)) hom-coh-id-sys : Dep-Id-Sys (𝓤 ⊔ 𝓥) (𝓦 ⊔ 𝓥) (Hom-Str-Type X Y) (Hom-Coh-Type X Y) [f] (hom-alg f) fam hom-coh-id-sys g ϕ α[g] = Homotopy-Coh-Type f (g , α[g]) ϕ ctr (sys hom-coh-id-sys) a = refl ind (sys hom-coh-id-sys) P p α[f] H = transport (uncurry P) (Aux-is-prop _ _) p ind-β (sys hom-coh-id-sys) P p = ap (λ - → transport (uncurry P) - p) lem where lem : Aux-is-prop (hom-alg f , λ _ → refl) (hom-alg f , λ _ → refl) = refl lem = props-are-sets Aux-is-prop _ _ hom-id-sys : Id-Sys (𝓤 ⊔ 𝓥 ⊔ 𝓦) (Hom X Y) f hom-id-sys = pair-id-sys [f] hom-coh-id-sys module _ (fe : FunExt) (X Y : Coslice A) (f g : Hom X Y) where private [f] = hom-id-sys fe X Y f module [f] = Id-Sys [f] from-hom-≈ : Hom-≈ f g → f = g from-hom-≈ = [f].to-= g to-hom-≈-is-equiv : is-equiv from-hom-≈ to-hom-≈-is-equiv = [f].to-=-is-equiv g \end{code}