Home

特定のh-levelを持つ型は、より大きいh-levelも持つ

module foundations.greater-h-levels where
Imports
open import foundations.universe
open import foundations.natural-number
open import foundations.contractible-type
open import foundations.proposition
open import foundations.identity-type
open import foundations.h-level
open import foundations.sigma-type
open import foundations.groupoid-laws
open import foundations.set
open import foundations.dependent-map
open import foundations.transport
open import foundations.transport-identity
open import foundations.identity-type-reasoning

まずはbase caseを示す。

private variable
  ℓ : Level
  A : Type ℓ

isContr⇒isProp : isContr A → isProp A
isContr⇒isProp (a , f) x y = sym (f x) ∙ f y

isProp⇒isSet : isProp A → isSet A
isProp⇒isSet {A = A} f a b q r = toCanonical q ∙ sym (toCanonical r)
  where
    g : ∀ (y : A) → a = y
    g y = f a y

    h : ∀ {x y : A} → (p : x = y) → g x ∙ p = g y
    h p = sym (substCod p (f a _)) ∙ apd g p

    toCanonical : ∀ {x y : A} → (p : x = y) → p = sym (g x) ∙ g y
    toCanonical p =
      lcancelId (g _) p _ (h p ∙ sym (sym (assocId _ _ _) ∙ lelimId _ _ (rinvId _)))

後は帰納法を使う。

ofHLevelSuc : ∀ n → ofHLevel n A → ofHLevel (suc n) A
ofHLevelSuc zero f = isContr⇒isProp f
ofHLevelSuc (suc zero) f = isProp⇒isSet f
ofHLevelSuc (suc (suc n)) f a b = ofHLevelSuc (suc n) (f a b)