{-# OPTIONS --safe --cubical-compatible --guardedness --exact-split --double-check #-}
module ALMA.SecondPass.CumulativeHierarchyInner where
open import Agda.Primitive using (Level)
open import Agda.Builtin.Sigma using (_,_)
open import Data.Product.Base using (proj₁)
open import Categories.Category.Core using (Category)
open import Categories.Functor.Core using (Functor)
open import ALMA.Cosmos.ContCategory using (ContCat)
open import ALMA.Cosmos.ContCategoryLemmas using (actSOf)
open import ALMA.Cosmos.ContCatEquiv using (ShapeCat)
open import ALMA.SecondPass.Unfolding using (Unfolding)
open import ALMA.SecondPass.Cosmos using (Cosmos; out)
open import ALMA.SecondPass.CumulativeHierarchy
using (FC∘π; EmbeddingData; embed-compat; ShapeCat-id-comm)
embed-unfoldFunctor-inner
: ∀ {o h e s p} {C : Category o h e}
→ (FC : Functor C (ContCat s p))
→ Functor (ShapeCat (ShapeCat C FC) (FC∘π FC)) (ShapeCat C FC)
embed-unfoldFunctor-inner {C = C} FC = record
{ F₀ = proj₁
; F₁ = proj₁
; identity = λ {A} → Equiv.refl {proj₁ (proj₁ A)} {proj₁ (proj₁ A)}
; homomorphism = λ {X} {Y} {Z} {f} {g} →
Equiv.refl {proj₁ (proj₁ X)} {proj₁ (proj₁ Z)}
{proj₁ (proj₁ g) ∘ proj₁ (proj₁ f)}
; F-resp-≈ = λ f≈g → f≈g
}
where open Category C
embed-inner
: ∀ {o h e s p} {C : Category o h e} {FC : Functor C (ContCat s p)}
→ (x : Cosmos C FC) → EmbeddingData x
→ Cosmos (ShapeCat C FC) (FC∘π FC)
embed-inner {C = C} {FC = FC} x ed .out = record
{ unfoldFunctor = embed-unfoldFunctor-inner FC
; unfold-next = λ { {A , _} p → embed-inner (UX.unfold-next p) (next p) }
; pos-to-shape = λ { {A , _} p q → actSOf FC (retract p) (UX.pos-to-shape p q) }
; pos-actS-compat = λ { {A , _} {B , _} {s} {t} (f , _) eq p →
embed-compat ed f eq p }
}
where
open EmbeddingData ed
module C = Category C
module FC = Functor FC
UX = out x
module UX = Unfolding UX
module _ {o h e s p : Level}
{C : Category o h e}
{FC : Functor C (ContCat s p)} where
private
module SCat = Category (ShapeCat C FC)
inner-self-embedding
: (x : Cosmos C FC) (ed : EmbeddingData x)
→ EmbeddingData (embed-inner x ed)
inner-self-embedding x ed .EmbeddingData.retract =
λ _ → SCat.id
inner-self-embedding x ed .EmbeddingData.retract-natural
{A} {B} {s} {t} f' eq' =
ShapeCat-id-comm {C = C} {FC = FC} A B f'
inner-self-embedding x ed .EmbeddingData.next =
λ s → inner-self-embedding (Unfolding.unfold-next (out x) s)
(EmbeddingData.next ed s)