Other Agda modules in this section (27)
- CoconeCalculus.CoconeBridgeReversal
- CoconeCalculus.CoconeCoreExtensions
- CoconeCalculus.CoconeCoreLifting
- CoconeCalculus.CoconePostAssociativity
- CoconeCalculus.CoconeRestrictionLifting
- CoconeCalculus.CoconeRestrictionPostcomposition
- CoconeCalculus.CoconeRestrictionUniversality
- CoconeCalculus.CoconeSpanRestriction
- CoconeCalculus.CoconeSquareRestriction
- CoconeCalculus.DiagramInterchange
- CoconeCalculus.RealizationCoconeComparison
- EmptyCore
- EmptySubcategory
- GeometricRealization
- GeometricRealizationCriteria
- GroupoidCriterion
- IsomorphismSubcategoryCore
- ObjectwiseNaturalIsomorphisms
- RealizationGroupoidCriterion
- RealizationOfGroupoids
- RealizationOfInterval
- RealizationPushouts
- RecognitionCalculus.ConstantFullSubcategory
- RecognitionCalculus.GroupoidRealizationInterval
- RecognitionCalculus.InvertingFromGroupoids
- RecognitionCalculus.InvertingInterval
- RecognitionCalculus.RealizationComparisons
Complete compiler-highlighted source. Follow a symbol to its declaration.
Corresponding book passages
# The fundamental groupoid theorem This assembles the seven conclusions of `prop:Equivalent_Conditions_Geometric_Realization` and proves `axiom:N_Fundamental_Groupoid_Axiom`, which is a proposition in the manuscript. No geometric-realization axiom is added. Start with the contractibility of the realized interval. Its universal property makes constant arrows a full subcategory. Fullness detects groupoids on the mapping anima of arrows. Apply this to the subcategory of isomorphisms, identify it with the core, and factor a localization through its core to see that every realization is a groupoid. ```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 Pullbacks 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 import SCT.VolumeI.Chapter01.Section05.Initial as Initial module SCT.VolumeI.Chapter03.Section04.FundamentalGroupoids {c m a : Level} (𝒯 : Theory c m a) (M : Mapping.MappingAnimae 𝒯) (ℱ : Categories.FunctorCategories 𝒯 M) (P : Pullbacks.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) (N : Recognition.RecognitionAxiom 𝒯 M ℱ P I E R) where open import SCT.VolumeI.Chapter01.Section05.Setup 𝒯 M open Walking.WalkingMorphism I open import SCT.VolumeI.Chapter01.Section04.Core 𝒯 M using (Core; coreInclusion) open import SCT.VolumeI.Chapter02.Section01.Morphisms 𝒯 M ℱ I using (identityArrow) open Rezk 𝒯 M ℱ P I E using (isoArrow) open import SCT.VolumeI.Chapter02.Section04.Groupoids 𝒯 M ℱ P I E R using (IsGroupoid) open Recognition.RecognitionAxiom N using (groupoid-isAn) open import SCT.VolumeI.Chapter03.Section01.SubcategoryAxiom 𝒯 M ℱ P I E S using (SubcategoryAxiom; SubcategoryPresentation) open import SCT.VolumeI.Chapter03.Section01.IsomorphismCollections 𝒯 M ℱ P I E S Q using (isomorphisms; constantMap) open import SCT.VolumeI.Chapter03.Section01.ClosureCalculus.IsomorphismClosure 𝒯 M ℱ P I E S Q R N using (isomorphisms-closed) open import SCT.VolumeI.Chapter03.Section01.Subcategories 𝒯 M P I using (IsSubcategory) open import SCT.VolumeI.Chapter03.Section02.FullSubcategories 𝒯 M P using (IsFullSubcategory) open import SCT.VolumeI.Chapter03.Section03.Localizations 𝒯 M ℱ P I E S Q R using (module WithSubcategories) open import SCT.VolumeI.Chapter03.Section04.GeometricRealization 𝒯 M ℱ P I E S Q R using (module Realization) open import SCT.VolumeI.Chapter03.Section04.RealizationOfInterval 𝒯 M ℱ P I E S Q R using (module Interval) open import SCT.VolumeI.Chapter03.Section04.RecognitionCalculus.ConstantFullSubcategory 𝒯 M ℱ P I E S Q R using (module FromContractible) open import SCT.VolumeI.Chapter03.Section04.GroupoidCriterion 𝒯 M ℱ P I E S Q R using (morphismwise-groupoid-criterion; isomorphism-full-from-constant-full) open import SCT.VolumeI.Chapter03.Section04.IsomorphismSubcategoryCore 𝒯 M ℱ P I E S Q R N using (module CoreComparison) open import SCT.VolumeI.Chapter03.Section04.RealizationGroupoidCriterion 𝒯 M ℱ P I E S Q R N using (module FromCore) import SCT.VolumeI.Chapter03.Section04.EmptySubcategory as Empty module Consequences (L : SubcategoryAxiom) (Z : WithSubcategories.LocalizationAxiom L) where module Geom = Realization L Z using (category; localization; universal) abstract realization-interval-contractible : IsContractible (Geom.category [1]) realization-interval-contractible = Interval.realization-interval-contractible L (Geom.category [1]) (Geom.localization [1]) (Geom.universal [1]) identityArrow-isFullSubcategory : (C : CAT) → IsFullSubcategory (identityArrow {C}) identityArrow-isFullSubcategory = FromContractible.At.identityArrow-isFullSubcategory L (Geom.category [1]) (Geom.localization [1]) (Geom.universal [1]) realization-interval-contractible isoArrow-isFullSubcategory : (C : CAT) → IsFullSubcategory (isoArrow {C}) isoArrow-isFullSubcategory C = isomorphism-full-from-constant-full C (identityArrow-isFullSubcategory C) morphismwise-groupoid : (C : CAT) → IsEquiv (constantMap C) → IsGroupoid C morphismwise-groupoid C = morphismwise-groupoid-criterion C (identityArrow-isFullSubcategory C) module IsomorphismSubcategory (C : CAT) where abstract presentation : SubcategoryPresentation (isomorphisms C) presentation = SubcategoryAxiom.generated L (isomorphisms C) (isomorphisms-closed C) category = SubcategoryPresentation.subcategory presentation inclusion = SubcategoryPresentation.inclusion presentation module CoreData = CoreComparison C presentation using (from-core; from-core-over-C; constantMap-isEquiv; module IfGroupoid) abstract isGroupoid : IsGroupoid category isGroupoid = morphismwise-groupoid category CoreData.constantMap-isEquiv from-core : MAP (Core C) category from-core = CoreData.from-core from-core-over-C : (inclusion ∘ from-core) =₁ coreInclusion C from-core-over-C = CoreData.from-core-over-C abstract from-core-isEquiv : IsEquiv from-core from-core-isEquiv = CoreData.IfGroupoid.from-core-isEquiv (groupoid-isAn isGroupoid) abstract realization-isGroupoid : (C : CAT) → IsGroupoid (Geom.category C) realization-isGroupoid C = FromCore.realization-isGroupoid L (Geom.localization C) (Geom.universal C) (IsomorphismSubcategory.presentation (Geom.category C)) (IsomorphismSubcategory.from-core (Geom.category C)) (IsomorphismSubcategory.from-core-isEquiv (Geom.category C)) (IsomorphismSubcategory.from-core-over-C (Geom.category C)) realization-isAn : (C : CAT) → isAn (Geom.category C) realization-isAn C = groupoid-isAn (realization-isGroupoid C) ``` The empty example from Section 3.1 is now unconditional under the book's axioms. Its proof uses the criterion above, explaining its placement after the geometric-realization argument in the dependency graph. ```agda module WithInitial (O : Initial.InitialStructure 𝒯 M) (strict : Initial.StrictInitial 𝒯 M O) where open Initial.Initiality 𝒯 M O using (initiate) module Proof = Empty 𝒯 M ℱ P I E S Q R N O strict using (module FromCriterion) abstract empty-isSubcategory : (C : CAT) → IsSubcategory (initiate C) empty-isSubcategory = Proof.FromCriterion.empty-isSubcategory L morphismwise-groupoid empty-isFullSubcategory : (C : CAT) → IsFullSubcategory (initiate C) empty-isFullSubcategory = Proof.FromCriterion.empty-isFullSubcategory L morphismwise-groupoid ```