{-# OPTIONS --without-K #-} module hott.loop.core where open import sum open import equality open import function.core open import function.isomorphism.core open import function.overloading open import pointed.core open import sets.nat.core Ω₁ : ∀ {i} → PSet i → PSet i Ω₁ (X , x) = ((x ≡ x) , refl) ΩP : ∀ {i} → ℕ → PSet i → PSet _ ΩP 0 𝓧 = 𝓧 ΩP (suc n) 𝓧 = ΩP n (Ω₁ 𝓧) Ω : ∀ {i} → ℕ → {X : Set i} → X → Set i Ω n {X} x = proj₁ (ΩP n (X , x)) refl' : ∀ {i} n {X : Set i}(x : X) → Ω n x refl' n {X} x = proj₂ (ΩP n (X , x)) mapΩ₁ : ∀ {i j} → {𝓧 : PSet i}{𝓨 : PSet j} → PMap 𝓧 𝓨 → PMap (Ω₁ 𝓧) (Ω₁ 𝓨) mapΩ₁ (f , refl) = ap f , refl mapΩP : ∀ {i j} n → {𝓧 : PSet i}{𝓨 : PSet j} → PMap 𝓧 𝓨 → PMap (ΩP n 𝓧) (ΩP n 𝓨) mapΩP zero f = f mapΩP (suc n) f = mapΩP n (mapΩ₁ f) mapΩ : ∀ {i j} n → {X : Set i}{Y : Set j}(f : X → Y) → {x : X} → Ω n x → Ω n (f x) mapΩ n f = proj₁ (mapΩP n (f , refl)) constP : ∀ {i j} (𝓧 : PSet i)(𝓨 : PSet j) → PMap 𝓧 𝓨 constP _ (Y , y) = (λ _ → y) , refl