Other Agda modules in this section (5)

Complete compiler-highlighted source. Follow a symbol to its declaration.

Corresponding book passages
# Pullbacks of animae and the core embedding

Recognition turns the groupoid pullback theorem into
`lem:Pullback_Of_Animae_Over_Category`. For
`prop:Groupoid_Core_Embeds_Into_C`, use the equivalent first-projection
criterion for an embedding. Both its source and target are animae, so
testing against animae suffices. The core universal property makes each
test the pullback of an equivalence.

```agda
{-# OPTIONS --safe --without-K #-}
open import Agda.Primitive using (Level)
open import SCT.VolumeI.Chapter01.Theory using (Theory)
import SCT.VolumeI.Chapter01.Section04.MappingAnimae as Mapping
import SCT.VolumeI.Chapter01.Section07.FunctorCategories as Categories
import SCT.VolumeI.Chapter01.Section06.PullbackLaws as Laws
import SCT.VolumeI.Chapter02.Section01.WalkingMorphism as Walking
import SCT.VolumeI.Chapter02.Section01.IntervalEndpoints as Endpoints
import SCT.VolumeI.Chapter02.Section02.SegalAxiom as Segal
import SCT.VolumeI.Chapter02.Section01.CommutativeSquareAxiom as Squares
import SCT.VolumeI.Chapter02.Section03.RezkAxiom as Rezk
import SCT.VolumeI.Chapter02.Section05.Recognition as Recognition

module SCT.VolumeI.Chapter02.Section05.PullbackAnimae
  {c m a : Level} (𝒯 : Theory c m a) (M : Mapping.MappingAnimae 𝒯)
  (ℱ : Categories.FunctorCategories 𝒯 M) (P : Laws.PullbackStructure 𝒯)
  (I : Walking.WalkingMorphism 𝒯) (E : Endpoints.IntervalEndpoints 𝒯 M ℱ P I)
  (S : Segal.SegalAxiom 𝒯 M ℱ P I E)
  (Q : Squares.CommutativeSquareAxiom 𝒯 M ℱ P I E)
  (R : Rezk.RezkAxiom 𝒯 M ℱ P I E)
  (A : Recognition.RecognitionAxiom 𝒯 M ℱ P I E R) where

open Recognition 𝒯 M ℱ P I E R
open Consequences A
open Laws.PullbackStructure P
open import SCT.VolumeI.Chapter02.Section04.PullbackGroupoids 𝒯 M ℱ P I E S Q R
  using (pullback-isGroupoid)
open import SCT.VolumeI.Chapter01.Section04.Core 𝒯 M
open import SCT.VolumeI.Chapter01.Section04.Functoriality 𝒯 M using (mapPost)
open import SCT.VolumeI.Chapter01.Section04.EquivalenceDetection 𝒯 M using (post-tests-animae)
open import SCT.VolumeI.Chapter01.Section06.Embeddings 𝒯 P
open import SCT.VolumeI.Chapter01.Section06.MappingPullbacks 𝒯 M P using (module MappingPullback)
open import SCT.VolumeI.Chapter01.Section06.PullbackEquivalences 𝒯 P using (pullback-equivalence)

pullback-of-animae : {X Y C : CAT} (f : MAP X C) (g : MAP Y C) →
  isAn X → isAn Y → isAn (Pullback f g)
pullback-of-animae f g ex ey = groupoid-isAn
  (pullback-isGroupoid f g (anima-isGroupoid ex) (anima-isGroupoid ey))

coreInclusion-isEmbedding : (C : CAT) → IsEmbedding (coreInclusion C)
coreInclusion-isEmbedding C = projection-embedding i
  (post-tests-animae (pullback-of-animae i i (core-isAn C) (core-isAn C)) (core-isAn C)
    pullback₁ (λ X xAn → tested X xAn))
  where
  i = coreInclusion C
  tested : (X : CAT) → isAn X → IsEquiv (mapPost {C = X} (pullback₁ {f = i} {i}))
  tested X xAn = equiv-transport (pullbackLift-β₁ Test.square)
    (equiv-compose Test.comparison pullback₁ Test.square-isPullback
      (pullback-equivalence (mapPost i) (mapPost i) (core-universal X C xAn)))
    where module Test = MappingPullback X i i
```