module GpdCont.HomotopySet where open import GpdCont.Prelude open import Cubical.Foundations.Equiv open import Cubical.Foundations.HLevels open import Cubical.Foundations.HLevels using (hSet) public open import Cubical.Foundations.Isomorphism open import Cubical.Data.Sigma as Sigma using (_×_) open import Cubical.Data.Sum as Sum using (_⊎_) open import Cubical.Data.Empty as Empty using (⊥*) open import Cubical.Data.Unit as Unit using (Unit*) private variable ℓ ℓ' : Level X Y : hSet ℓ hSet≡ : ⟨ X ⟩ ≡ ⟨ Y ⟩ → X ≡ Y hSet≡ = TypeOfHLevel≡ 2 hSet≡Equiv⁻ : (X ≡ Y) ≃ (⟨ X ⟩ ≡ ⟨ Y ⟩) hSet≡Equiv⁻ .fst = cong ⟨_⟩ hSet≡Equiv⁻ .snd = Sigma.isEmbeddingFstΣProp λ _ → isPropIsSet hSet≡Equiv : (⟨ X ⟩ ≡ ⟨ Y ⟩) ≃ (X ≡ Y) hSet≡Equiv = Sigma.Σ≡PropEquiv λ _ → isPropIsSet hSet≡-section : ∀ {X Y : hSet ℓ} → section (hSet≡ {X = X} {Y = Y}) (cong ⟨_⟩) hSet≡-section = retEq hSet≡Equiv⁻ _→Set_ : (X : hSet ℓ) (Y : hSet ℓ') → hSet _ _→Set_ X Y .fst = ⟨ X ⟩ → ⟨ Y ⟩ _→Set_ X Y .snd = isSet→ $ str Y ΠSet : {S : Type ℓ} (X : S → hSet ℓ') → hSet _ ΠSet X .fst = ∀ s → ⟨ X s ⟩ ΠSet X .snd = isSetΠ $ str ∘ X ΠSet' : {S : Type ℓ} (X : S → Type ℓ') → (∀ s → isSet (X s)) → hSet _ ΠSet' X is-set-X = ΠSet λ s → X s , is-set-X s _×Set_ : (X : hSet ℓ) (Y : hSet ℓ') → hSet _ (X ×Set Y) .fst = ⟨ X ⟩ × ⟨ Y ⟩ (X ×Set Y) .snd = isSet× (str X) (str Y) _⊎Set_ : (X : hSet ℓ) (Y : hSet ℓ') → hSet _ (X ⊎Set Y) .fst = ⟨ X ⟩ ⊎ ⟨ Y ⟩ (X ⊎Set Y) .snd = Sum.isSet⊎ (str X) (str Y) ΣSet : (X : hSet ℓ) (Y : ⟨ X ⟩ → hSet ℓ') → hSet _ ΣSet X Y .fst = Σ ⟨ X ⟩ $ ⟨_⟩ ∘ Y ΣSet X Y .snd = isSetΣ (str X) (str ∘ Y) EmptySet : (ℓ : Level) → hSet ℓ EmptySet ℓ .fst = ⊥* EmptySet ℓ .snd = isProp→isSet Empty.isProp⊥* UnitSet : (ℓ : Level) → hSet ℓ UnitSet ℓ .fst = Unit* UnitSet ℓ .snd = Unit.isSetUnit*