{-# OPTIONS --without-K --safe #-} open import Categories.Category module Categories.Category.Site {o ℓ e} (C : Category o ℓ e) where open import Level open import Data.Product using (Σ; _,_; ∃₂) open Category C private variable X Y Z : Obj record Coverage {i} j {I : Obj → Set i} (covering₀ : ∀ {X} → I X → Obj) (covering₁ : ∀ {X} (i : I X) → covering₀ i ⇒ X) : Set (i ⊔ suc j ⊔ o ⊔ ℓ ⊔ e) where field J : ∀ (g : Y ⇒ Z) → Set j universal₀ : ∀ {g : Y ⇒ Z} → J g → Obj universal₁ : ∀ {g : Y ⇒ Z} (j : J g) → universal₀ j ⇒ Y commute : ∀ {g : Y ⇒ Z} (j : J g) → ∃₂ (λ i k → g ∘ universal₁ j ≈ covering₁ i ∘ k) record Site i j : Set (suc i ⊔ suc j ⊔ o ⊔ ℓ ⊔ e) where field I : Obj → Set i covering₀ : ∀ {X} → I X → Obj covering₁ : ∀ {X} (i : I X) → covering₀ i ⇒ X coverage : Coverage j covering₀ covering₁ module coverage = Coverage coverage open coverage public