Skip to content

Instantly share code, notes, and snippets.

@FrozenWinters
Last active March 13, 2023 21:29
Show Gist options
  • Select an option

  • Save FrozenWinters/1c708573c995486cff11c997aa9cb427 to your computer and use it in GitHub Desktop.

Select an option

Save FrozenWinters/1c708573c995486cff11c997aa9cb427 to your computer and use it in GitHub Desktop.
weak and strict 1-categories
{-# OPTIONS --cubical #-}
module weak-cat where
open import Agda.Primitive using (Level; lzero; lsuc; _βŠ”_) public
open import Cubical.Core.Everything public
open import Cubical.Foundations.Everything public
open import Cubical.Data.Sigma
private
variable
ℓ₁ β„“β‚‚ ℓ₃ β„“β‚„ : Level
-- Weak 1-Category
record WeakCat ℓ₁ β„“β‚‚ ℓ₃ : Type (lsuc (ℓ₁ βŠ” β„“β‚‚ βŠ” ℓ₃)) where
infixl 20 _β—Ύ_
field
π‘œπ‘β‚€ : Type ℓ₁
π‘œπ‘β‚ : π‘œπ‘β‚€ β†’ π‘œπ‘β‚€ β†’ Type β„“β‚‚
π‘œπ‘β‚‚ : {x y z : π‘œπ‘β‚€} β†’ π‘œπ‘β‚ x y β†’ π‘œπ‘β‚ x z β†’ π‘œπ‘β‚ y z β†’ Type ℓ₃
isProp-π‘œπ‘β‚‚ : {x y z : π‘œπ‘β‚€} (Ξ± : π‘œπ‘β‚ x y) (Ξ² : π‘œπ‘β‚ x z)
(Ξ³ : π‘œπ‘β‚ y z) β†’ isProp (π‘œπ‘β‚‚ Ξ± Ξ² Ξ³)
-- horn filling says that π‘œπ‘β‚‚ behavess like equality
-- inner horn comp
π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʸ : {x y z w : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ x z} {Ξ³ : π‘œπ‘β‚ y z}
(𝑓₁ : π‘œπ‘β‚‚ Ξ± Ξ² Ξ³) {Ξ΄ : π‘œπ‘β‚ x w} {Ξ΅ : π‘œπ‘β‚ y w} (𝑓₂ : π‘œπ‘β‚‚ Ξ± Ξ΄ Ξ΅)
{ΞΆ : π‘œπ‘β‚ z w} (𝑓₄ : π‘œπ‘β‚‚ Ξ³ Ξ΅ ΞΆ) β†’ π‘œπ‘β‚‚ Ξ² Ξ΄ ΞΆ
π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ᢻ : {x y z w : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ x z} {Ξ³ : π‘œπ‘β‚ y z}
(𝑓₁ : π‘œπ‘β‚‚ Ξ± Ξ² Ξ³) {Ξ΄ : π‘œπ‘β‚ x w} {Ξ΅ : π‘œπ‘β‚ y w}
{ΞΆ : π‘œπ‘β‚ z w} (𝑓₃ : π‘œπ‘β‚‚ Ξ² Ξ΄ ΞΆ) (𝑓₄ : π‘œπ‘β‚‚ Ξ³ Ξ΅ ΞΆ) β†’ π‘œπ‘β‚‚ Ξ± Ξ΄ Ξ΅
-- outer horn comp [not sure if needed?]
π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ˣ : {x y z w : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ x z} {Ξ³ : π‘œπ‘β‚ y z}
{Ξ΄ : π‘œπ‘β‚ x w} {Ξ΅ : π‘œπ‘β‚ y w} (𝑓₂ : π‘œπ‘β‚‚ Ξ± Ξ΄ Ξ΅) {ΞΆ : π‘œπ‘β‚ z w}
(𝑓₃ : π‘œπ‘β‚‚ Ξ² Ξ΄ ΞΆ) (𝑓₄ : π‘œπ‘β‚‚ Ξ³ Ξ΅ ΞΆ) β†’ π‘œπ‘β‚‚ Ξ± Ξ² Ξ³
π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʷ : {x y z w : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ x z} {Ξ³ : π‘œπ‘β‚ y z}
(𝑓₁ : π‘œπ‘β‚‚ Ξ± Ξ² Ξ³) {Ξ΄ : π‘œπ‘β‚ x w} {Ξ΅ : π‘œπ‘β‚ y w} (𝑓₂ : π‘œπ‘β‚‚ Ξ± Ξ΄ Ξ΅)
{ΞΆ : π‘œπ‘β‚ z w} (𝑓₃ : π‘œπ‘β‚‚ Ξ² Ξ΄ ΞΆ) β†’ π‘œπ‘β‚‚ Ξ³ Ξ΅ ΞΆ
_β—Ύ_ : {x y z : π‘œπ‘β‚€} β†’ π‘œπ‘β‚ x y β†’ π‘œπ‘β‚ y z β†’ π‘œπ‘β‚ x z
𝑓𝑖𝑙𝑙 : {x y z : π‘œπ‘β‚€} (Ξ± : π‘œπ‘β‚ x y) (Ξ² : π‘œπ‘β‚ y z) β†’ π‘œπ‘β‚‚ Ξ± (Ξ± β—Ύ Ξ²) Ξ²
𝑖𝑑 : (x : π‘œπ‘β‚€) β†’ π‘œπ‘β‚ x x
σ₁ : {x y : π‘œπ‘β‚€} (Ξ± : π‘œπ‘β‚ x y) β†’ π‘œπ‘β‚‚ Ξ± Ξ± (𝑖𝑑 y)
Οƒβ‚‚ : {x y : π‘œπ‘β‚€} (Ξ± : π‘œπ‘β‚ x y) β†’ π‘œπ‘β‚‚ (𝑖𝑑 x) Ξ± Ξ±
π‘Žπ‘ π‘ π‘œπ‘ΒΉ : {x y z w : π‘œπ‘β‚€} (Ξ± : π‘œπ‘β‚ x y) (Ξ² : π‘œπ‘β‚ y z) (Ξ³ : π‘œπ‘β‚ z w) β†’
π‘œπ‘β‚‚ (Ξ± β—Ύ Ξ²) (Ξ± β—Ύ (Ξ² β—Ύ Ξ³)) Ξ³
π‘Žπ‘ π‘ π‘œπ‘ΒΉ Ξ± Ξ² Ξ³ = π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʸ (𝑓𝑖𝑙𝑙 Ξ± Ξ²) (𝑓𝑖𝑙𝑙 Ξ± (Ξ²Β β—Ύ Ξ³)) (𝑓𝑖𝑙𝑙 Ξ² Ξ³)
π‘Žπ‘ π‘ π‘œπ‘Β² : {x y z w : π‘œπ‘β‚€} (Ξ± : π‘œπ‘β‚ x y) (Ξ² : π‘œπ‘β‚ y z) (Ξ³ : π‘œπ‘β‚ z w) β†’
π‘œπ‘β‚‚ Ξ± ((Ξ± β—Ύ Ξ²) β—Ύ Ξ³) (Ξ² β—Ύ Ξ³)
π‘Žπ‘ π‘ π‘œπ‘Β² Ξ± Ξ² Ξ³ = π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ᢻ (𝑓𝑖𝑙𝑙 Ξ± Ξ²) (𝑓𝑖𝑙𝑙 (Ξ± β—Ύ Ξ²) Ξ³) (𝑓𝑖𝑙𝑙 Ξ² Ξ³)
π‘–π‘ π‘œ : {x y : π‘œπ‘β‚€} β†’ π‘œπ‘β‚ x y β†’ Type (β„“β‚‚ βŠ” ℓ₃)
π‘–π‘ π‘œ {x} {y} Ξ± = Ξ£ (π‘œπ‘β‚ y x) (Ξ» Ξ² β†’ π‘œπ‘β‚‚ Ξ± (𝑖𝑑 x) Ξ² Γ— π‘œπ‘β‚‚ Ξ² (𝑖𝑑 y) Ξ±)
π‘π‘œπ‘šπ‘-π‘–π‘ π‘œ : {x y z : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ y z} {Ξ³ : π‘œπ‘β‚ x z} β†’
π‘œπ‘β‚‚ Ξ± Ξ³ Ξ² β†’ π‘–π‘ π‘œ Ξ± β†’ π‘–π‘ π‘œ Ξ² β†’ π‘–π‘ π‘œ Ξ³
π‘π‘œπ‘šπ‘-π‘–π‘ π‘œ 𝑓 p q =
fst q β—Ύ fst p ,
π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʸ 𝑓 (fst (snd p))
(π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ᢻ (fst (snd q)) (Οƒβ‚‚ (fst p)) (𝑓𝑖𝑙𝑙 (fst q) (fst p))) ,
π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ᢻ (π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʸ (𝑓𝑖𝑙𝑙 (fst q) (fst p)) (σ₁ (fst q)) (snd (snd p)))
(snd (snd q)) 𝑓
𝑖𝑑-π‘–π‘ π‘œ : (x : π‘œπ‘β‚€) β†’ π‘–π‘ π‘œ (𝑖𝑑 x)
𝑖𝑑-π‘–π‘ π‘œ x = 𝑖𝑑 x , σ₁ (𝑖𝑑 x) , Οƒβ‚‚ (𝑖𝑑 x)
β—Ύ-π‘–π‘ π‘œ : {x y z : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ y z} β†’ π‘–π‘ π‘œ Ξ± β†’ π‘–π‘ π‘œ Ξ² β†’ π‘–π‘ π‘œ (Ξ± β—Ύ Ξ²)
β—Ύ-π‘–π‘ π‘œ {Ξ± = Ξ±} {Ξ²} p q = π‘π‘œπ‘šπ‘-π‘–π‘ π‘œ (𝑓𝑖𝑙𝑙 Ξ± Ξ²) p q
-- Strict 1-Category
record Cat ℓ₁ β„“β‚‚ : Type (lsuc (ℓ₁ βŠ” β„“β‚‚)) where
field
π‘œπ‘ : Type ℓ₁
π‘šπ‘œπ‘Ÿ : π‘œπ‘ β†’ π‘œπ‘ β†’ Type β„“β‚‚
π‘π‘œπ‘šπ‘ : {x y z : π‘œπ‘} β†’ π‘šπ‘œπ‘Ÿ x y β†’ π‘šπ‘œπ‘Ÿ y z β†’ π‘šπ‘œπ‘Ÿ x z
π‘Žπ‘ π‘ π‘œπ‘ : {x y z w : π‘œπ‘} (Ξ± : π‘šπ‘œπ‘Ÿ x y) (Ξ² : π‘šπ‘œπ‘Ÿ y z) (Ξ³ : π‘šπ‘œπ‘Ÿ z w) β†’
π‘π‘œπ‘šπ‘ (π‘π‘œπ‘šπ‘ Ξ± Ξ²) Ξ³ ≑ π‘π‘œπ‘šπ‘ Ξ± (π‘π‘œπ‘šπ‘ Ξ² Ξ³)
𝑖𝑑 : (x : π‘œπ‘) β†’ π‘šπ‘œπ‘Ÿ x x
𝑖𝑑-L : {x y : π‘œπ‘} (Ξ± : π‘šπ‘œπ‘Ÿ x y) β†’ π‘π‘œπ‘šπ‘ (𝑖𝑑 x) Ξ± ≑ Ξ±
𝑖𝑑-R : {x y : π‘œπ‘} (Ξ± : π‘šπ‘œπ‘Ÿ x y) β†’ π‘π‘œπ‘šπ‘ Ξ± (𝑖𝑑 y) ≑ Ξ±
-- Strictification
module _ (π’ž : WeakCat ℓ₁ β„“β‚‚ ℓ₃) where
open WeakCat π’ž
data RezkMor : (x y : π‘œπ‘β‚€) β†’ Type (ℓ₁ βŠ” β„“β‚‚ βŠ” ℓ₃) where
Rβ‚€ : {x y : π‘œπ‘β‚€} β†’ π‘œπ‘β‚ x y β†’ RezkMor x y
R₁ : {x y z : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ y z} {Ξ³ : π‘œπ‘β‚ x z}
(𝑓 : π‘œπ‘β‚‚ Ξ± Ξ³ Ξ²) β†’ Rβ‚€ (Ξ± β—Ύ Ξ²) ≑ Rβ‚€ Ξ³
R-trunc : {x y : π‘œπ‘β‚€} β†’ isSet (RezkMor x y)
compR : {x y z : π‘œπ‘β‚€} β†’ RezkMor x y β†’ RezkMor y z β†’ RezkMor x z
compR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²) = Rβ‚€ (Ξ± β—Ύ Ξ²)
compR (Rβ‚€ Ξ±) (R₁ {Ξ± = Ξ²} {Ξ³} {Ξ΄} 𝑔 i) =
R₁ (π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ᢻ (𝑓𝑖𝑙𝑙 Ξ± Ξ²) (π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʸ (𝑓𝑖𝑙𝑙 Ξ± Ξ²) (𝑓𝑖𝑙𝑙 Ξ± Ξ΄) 𝑔) (𝑓𝑖𝑙𝑙 Ξ² Ξ³)) i
compR (Rβ‚€ Ξ±) (R-trunc Ξ² Ξ³ p q i j) =
R-trunc (compR (Rβ‚€ Ξ±) Ξ²) (compR (Rβ‚€ Ξ±) Ξ³)
(Ξ» k β†’ compR (Rβ‚€ Ξ±) (p k)) (Ξ» k β†’ compR (Rβ‚€ Ξ±) (q k)) i j
compR (R₁ {Ξ± = Ξ±} {Ξ²} {Ξ³} 𝑓 i) (Rβ‚€ Ξ΄) =
R₁ (π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ʸ (𝑓𝑖𝑙𝑙 Ξ± Ξ²) (π‘œπ‘β‚‚-𝑓𝑖𝑙𝑙ᢻ 𝑓 (𝑓𝑖𝑙𝑙 Ξ³ Ξ΄) (𝑓𝑖𝑙𝑙 Ξ² Ξ΄)) (𝑓𝑖𝑙𝑙 Ξ² Ξ΄)) i
compR (R₁ {Ξ± = Ξ±} {Ξ²} {Ξ³} 𝑓 i) (R₁ {Ξ± = Ξ΄} {Ξ΅} {ΞΆ} 𝑔 j) =
isSet→SquareP
(Ξ» i j β†’ R-trunc)
(Ξ» k β†’ compR (Rβ‚€ (Ξ± β—Ύ Ξ²)) (R₁ 𝑔 k))
(Ξ» k β†’ compR (Rβ‚€ Ξ³) (R₁ 𝑔 k))
(Ξ» k β†’ compR (R₁ 𝑓 k) (Rβ‚€ (Ξ΄ β—Ύ Ξ΅)))
(Ξ» k β†’ compR (R₁ 𝑓 k) (Rβ‚€ ΞΆ)) i j
compR (R₁ 𝑓 i) (R-trunc Ξ± Ξ² p q j k) =
R-trunc (compR (R₁ 𝑓 i) Ξ±) (compR (R₁ 𝑓 i) Ξ²)
(Ξ» k β†’ compR (R₁ 𝑓 i) (p k)) (Ξ» k β†’ compR (R₁ 𝑓 i) (q k)) j k
compR (R-trunc Ξ± Ξ² p q i j) Ξ³ =
R-trunc (compR Ξ± Ξ³) (compR Ξ² Ξ³)
(Ξ» k β†’ compR (p k) Ξ³) (Ξ» k β†’ compR (q k) Ξ³) i j
-- termination justified by Astra's theory of CW-HITs
-- can be avoided by doing a further case split
{-# TERMINATING #-}
assocR : {x y z w : π‘œπ‘β‚€} (Ξ± : RezkMor x y) (Ξ² : RezkMor y z) (Ξ³ : RezkMor z w) β†’
compR (compR Ξ± Ξ²) Ξ³ ≑ compR Ξ± (compR Ξ² Ξ³)
assocR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²) (Rβ‚€ Ξ³) = R₁ (π‘Žπ‘ π‘ π‘œπ‘ΒΉ Ξ± Ξ² Ξ³)
assocR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²) (R₁ {Ξ± = Ξ³} {Ξ΄} {Ξ΅} 𝑓 j) =
isSet→SquareP
(Ξ» i j β†’ R-trunc)
(R₁ (π‘Žπ‘ π‘ π‘œπ‘ΒΉ Ξ± Ξ² (Ξ³ β—Ύ Ξ΄)))
(R₁ (π‘Žπ‘ π‘ π‘œπ‘ΒΉ Ξ± Ξ² Ξ΅))
(Ξ» k β†’ compR (compR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²)) (R₁ 𝑓 k))
(Ξ» k β†’ compR (Rβ‚€ Ξ±) (compR (Rβ‚€ Ξ²) (R₁ 𝑓 k))) j
assocR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²) (R-trunc Ξ³ Ξ΄ p q j k) i =
R-trunc _ _ (Ξ» l β†’ assocR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²) (p l) i) (Ξ» l β†’ assocR (Rβ‚€ Ξ±) (Rβ‚€ Ξ²) (q l) i) j k
assocR (Rβ‚€ Ξ±) (R₁ {Ξ± = Ξ²} {Ξ³} {Ξ΄} 𝑓 j) Ξ΅ i =
isSet→SquareP
(Ξ» i j β†’ R-trunc)
(assocR (Rβ‚€ Ξ±) (Rβ‚€ (Ξ² β—Ύ Ξ³)) Ξ΅)
(assocR (Rβ‚€ Ξ±) (Rβ‚€ Ξ΄) Ξ΅)
(Ξ» k β†’ compR (compR (Rβ‚€ Ξ±) (R₁ 𝑓 k)) Ξ΅)
(Ξ» k β†’ compR (Rβ‚€ Ξ±) (compR (R₁ 𝑓 k) Ξ΅)) j i
assocR (Rβ‚€ Ξ±) (R-trunc Ξ² Ξ³ p q j k) Ξ΄ i =
R-trunc _ _ (Ξ» l β†’ assocR (Rβ‚€ Ξ±) (p l) Ξ΄ i) (Ξ» l β†’ assocR (Rβ‚€ Ξ±) (q l) Ξ΄ i) j k
assocR (R₁ {Ξ± = Ξ±} {Ξ²} {Ξ³} 𝑓 j) Ξ΄ Ξ΅ =
isSet→SquareP
(Ξ» i j β†’ R-trunc)
(assocR (Rβ‚€ (Ξ± β—Ύ Ξ²)) Ξ΄ Ξ΅)
(assocR (Rβ‚€ Ξ³) Ξ΄ Ξ΅ )
(Ξ» k β†’ compR (compR (R₁ 𝑓 k) Ξ΄) Ξ΅)
(Ξ» k β†’ compR (R₁ 𝑓 k) (compR Ξ΄ Ξ΅)) j
assocR (R-trunc Ξ± Ξ² p q j k) Ξ³ Ξ΄ i =
R-trunc _ _ (Ξ» l β†’ assocR (p l) Ξ³ Ξ΄ i) (Ξ» l β†’ assocR (q l) Ξ³ Ξ΄ i) j k
completion : Cat ℓ₁ (ℓ₁ βŠ” β„“β‚‚ βŠ” ℓ₃)
Cat.π‘œπ‘ completion = π‘œπ‘β‚€
Cat.π‘šπ‘œπ‘Ÿ completion x y = RezkMor x y
Cat.π‘π‘œπ‘šπ‘ completion Ξ± Ξ² = compR Ξ± Ξ²
Cat.π‘Žπ‘ π‘ π‘œπ‘ completion Ξ± Ξ² Ξ³ = assocR Ξ± Ξ² Ξ³
Cat.𝑖𝑑 completion x = Rβ‚€ (𝑖𝑑 x)
Cat.𝑖𝑑-L completion = {!!}
Cat.𝑖𝑑-R completion = {!!}
-- Rezk completion on objects [not used]
data RezkOb : Type (ℓ₁ βŠ” β„“β‚‚ βŠ” ℓ₃) where
Rβ‚€ : π‘œπ‘β‚€ β†’ RezkOb
R₁ : {x y : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} β†’ π‘–π‘ π‘œ Ξ± β†’ Rβ‚€ x ≑ Rβ‚€ y
Rβ‚‚ : {x y z : π‘œπ‘β‚€} {Ξ± : π‘œπ‘β‚ x y} {Ξ² : π‘œπ‘β‚ y z} {Ξ³ : π‘œπ‘β‚ x z}
(𝑓 : π‘œπ‘β‚‚ Ξ± Ξ³ Ξ²) (p : π‘–π‘ π‘œ Ξ±) (q : π‘–π‘ π‘œ Ξ²) β†’
R₁ p βˆ™ R₁ q ≑ R₁ (π‘π‘œπ‘šπ‘-π‘–π‘ π‘œ 𝑓 p q)
R-trunc : isGroupoid RezkOb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment