Other Agda modules in this section (52)
Corresponding book passages
# Composition of primitive identifications as morphisms

Retarget the full source-unit presentation at `x` by the three vertex
identifications `id`, `p`, and `q ∙ p`. Its first and long edges retain
the constant arrow at `x`. Changing the object of the second constant
arrow identifies it with the original conversion of `q` at `y`.
All three corner comparisons are transported together. The Segal
comparison with this presentation proves compatibility of the actual
conversion with composition, retaining both prescribed endpoint frames.

```agda
{-# OPTIONS --without-K #-}
module SCT.VolumeI.Chapter02.Section02.PrimitiveIdentificationComposition where
open import SCT.VolumeI.Chapter01.Section01.Vocabulary
open Operations
open import SCT.VolumeI.Chapter01.Section02.Coherence
  using (id₌; postWhisker-id₌; module Composition)
open Composition
open import SCT.VolumeI.Chapter01.Section02.Specialization using (comp₌-assoc; comp₌-cong)
open import SCT.VolumeI.Chapter01.Section03.Identifications.Inverses
  using (comp₌-unitˡ-One; comp₌-unitʳ-One)
open import SCT.VolumeI.Chapter02.Section01.Morphisms
  using (ev₀; ev₁; MorphismFamily; MorphismFamilyIdentification; identity-family; identification-family)
open import SCT.VolumeI.Chapter02.Section01.MorphismFamilyOperations
  using (retarget-family; family-comparison; module FamilyComparison)
open import SCT.VolumeI.Chapter02.Section01.IdentityFamilyTransport using (module IdentityFamilyChange)
open import SCT.VolumeI.Chapter02.Section02.SegalAxiom using (segal-isEquiv)
open import SCT.VolumeI.Chapter02.Section02.MorphismCompositionUnits using (module FamilyUnitPresentations)
open import SCT.VolumeI.Chapter02.Section02.FramedTrianglePresentations
  using (TrianglePresentation; presented-composition; module RetargetPresentation)
open import SCT.VolumeI.Chapter02.Section02.TrianglePresentationChange using (module ReplacePresentation)
import SCT.VolumeI.Chapter02.Section02.MorphismComposition as MC

private
  module ConvertedTriangle {Γ : Context} {P C : CAT Γ} {x y z : MAP P C}
    (p : x =₁ y) (q : y =₁ z) where
    private
      module X = MorphismFamily (identity-family x)
      module Y = MorphismFamily (identity-family y)
      module Changed = FamilyComparison (IdentityFamilyChange.value p)
        using (identification; source; target)

    normalized : {v : MAP P C} (r : x =₁ v)
      → MorphismFamilyIdentification One
          (retarget-family (identity-family x) (id₌ x) r) (identification-family r)
    normalized r = family-comparison _ _ (id₌ X.arrow)
      ((comp₌-unitˡ-One X.source-frame) ⁻¹ ∙
        (comp₌-unitʳ-One X.source-frame ∙
          comp₌-cong (id₌ X.source-frame) (postWhisker-id₌ ev₀ X.arrow)))
      (comp₌-unitʳ-One (r ∙ X.target-frame) ∙
        comp₌-cong (id₌ (r ∙ X.target-frame)) (postWhisker-id₌ ev₁ X.arrow))

    second : MorphismFamilyIdentification One
      (retarget-family (identity-family x) p (q ∙ p)) (identification-family q)
    second = family-comparison _ _ Changed.identification Changed.source
      ((comp₌-assoc q p X.target-frame) ⁻¹ ∙
        (comp₌-cong (id₌ q) Changed.target ∙
          comp₌-assoc q Y.target-frame (ev₁ ◁ Changed.identification)))

    presentation : TrianglePresentation
      (identification-family p) (identification-family q) (identification-family (q ∙ p))
    presentation = ReplacePresentation.value
      (RetargetPresentation.value (FamilyUnitPresentations.source (identity-family x))
        (id₌ x) p (q ∙ p))
      (normalized p) second (normalized (q ∙ p))

module _ {Γ : Context} {P C : CAT Γ} {x y z : MAP P C} where
  identification-composition : (p : x =₁ y) (q : y =₁ z)
    → MorphismFamilyIdentification One
        (MC.Composition.compose C (segal-isEquiv C)
          (identification-family q) (identification-family p))
        (identification-family (q ∙ p))
  identification-composition p q = presented-composition (segal-isEquiv C)
    (identification-family p) (identification-family q) (identification-family (q ∙ p))
    (ConvertedTriangle.presentation p q)
```