Other Agda modules in this section (3)
Corresponding book passages
# Recognizing animae

The groupoid recognition axiom identifies the primitive anima predicate with
the structural groupoid condition (`axiom:D_Groupoid_Core`). Its two directions
are the only assumptions introduced here. The groupoid condition uses the
chosen identity-arrow functor, through the equivalent characterization proved
in Section04.

Closure under equivalence and the fact that the initial category is an anima
are consequences. In particular, equivalence closure is not added to the
primitive anima interface of Chapter01.

```agda
{-# OPTIONS --without-K #-}
module SCT.VolumeI.Chapter02.Section05.Recognition where

open import SCT.VolumeI.Chapter01.Section01.Vocabulary
open import SCT.VolumeI.Chapter01.Section05.Initial using (Zero)
open import SCT.VolumeI.Chapter02.Section04.Groupoids
  using (IsGroupoid; empty-isGroupoid)
open import SCT.VolumeI.Chapter02.Section04.BasicClosure
  using (equivalence-preserves-groupoid; equivalence-reflects-groupoid)

module _ {Γ : Context} where
  postulate
    anima-isGroupoid : {C : CAT Γ} → isAn C → IsGroupoid C
    groupoid-isAn : {C : CAT Γ} → IsGroupoid C → isAn C

  equivalence-preserves-anima : {C D : CAT Γ} (f : MAP C D)
    → IsEquiv f → isAn C → isAn D
  equivalence-preserves-anima f e h =
    groupoid-isAn (equivalence-preserves-groupoid f e (anima-isGroupoid h))

  equivalence-reflects-anima : {C D : CAT Γ} (f : MAP C D)
    → IsEquiv f → isAn D → isAn C
  equivalence-reflects-anima f e h =
    groupoid-isAn (equivalence-reflects-groupoid f e (anima-isGroupoid h))

  zero-isAn : isAn (Zero {Γ = Γ})
  zero-isAn = groupoid-isAn empty-isGroupoid
```