open import Cubical.Foundations.Prelude hiding (Sub) open import Cubical.Foundations.Transport open import Cubical.Foundations.HLevels open import Cubical.Data.Unit open import Cubical.Data.Empty.Base module TT.Set.ConPath (X : hSet ℓ-zero) (Y : X .fst → hSet ℓ-zero) where open import TT.Set.Syntax X Y Cover : Con → Con → Type decode : (Γ₀ Γ₁ : Con) → Cover Γ₀ Γ₁ → Γ₀ ≡ Γ₁ Cover ◇ ◇ = Unit Cover (Γ₀ ▹ A₀) (Γ₁ ▹ A₁) = Σ[ Γ₀₁ ∈ Cover Γ₀ Γ₁ ] PathP (λ i → Ty (decode Γ₀ Γ₁ Γ₀₁ i)) A₀ A₁ {-# CATCHALL #-} Cover _ _ = ⊥ decode ◇ ◇ tt = refl decode (Γ₀ ▹ A₀) (Γ₁ ▹ A₁) (Γ₀₁ , A₀₁) = cong₂ _▹_ (decode Γ₀ Γ₁ Γ₀₁) A₀₁ reflCode : (Γ : Con) → Cover Γ Γ decodeRefl : (Γ : Con) → decode Γ Γ (reflCode Γ) ≡ refl reflCode ◇ = tt reflCode (Γ ▹ A) = reflCode Γ , filler i1 module reflCode-▹ where filler : (i : I) → PathP (λ j → Ty (decodeRefl Γ (~ i) j)) A A filler i = transport⁻-filler (λ i → PathP (λ j → Ty (decodeRefl Γ i j)) A A) refl i decodeRefl ◇ i = refl decodeRefl (Γ ▹ A) i = cong₂ _▹_ (decodeRefl Γ i) (reflCode-▹.filler Γ A (~ i)) encode : (Γ₀ Γ₁ : Con) → Γ₀ ≡ Γ₁ → Cover Γ₀ Γ₁ encode Γ₀ Γ₁ Γ₀₁ = transport (λ i → Cover Γ₀ (Γ₀₁ i)) (reflCode Γ₀) decodeEncode : (Γ₀ Γ₁ : Con) (Γ₀₁ : Γ₀ ≡ Γ₁) → decode Γ₀ Γ₁ (encode Γ₀ Γ₁ Γ₀₁) ≡ Γ₀₁ decodeEncode Γ₀ Γ₁ Γ₀₁ = J (λ Γ₁ Γ₀₁ → decode Γ₀ Γ₁ (encode Γ₀ Γ₁ Γ₀₁) ≡ Γ₀₁) (cong (decode Γ₀ Γ₀) (transportRefl _) ∙ decodeRefl Γ₀) Γ₀₁ isPropCover : (Γ₀ Γ₁ : Con) → isProp (Cover Γ₀ Γ₁) isPropCover ◇ ◇ = isPropUnit isPropCover (Γ₀ ▹ A₀) (Γ₁ ▹ A₁) = isPropΣ (isPropCover Γ₀ Γ₁) λ Γ₀₁ → isOfHLevelPathP' 1 (isSetTy Γ₁) A₀ A₁ isSetCon : isSet Con isSetCon Γ₀ Γ₁ = isPropRetract (encode Γ₀ Γ₁) (decode Γ₀ Γ₁) (decodeEncode Γ₀ Γ₁) (isPropCover Γ₀ Γ₁)