Other Agda modules in this section (76)
- AbsoluteObjects
- Coherence
- Composition
- CompositionCalculus.CompositionInputBaseCalculus
- CompositionCalculus.CompositionInputCalculus
- CompositionCalculus.CompositionInputParameterChange
- CompositionCalculus.CompositionNaturality
- CompositionCalculus.CompositionParameterChange
- CompositionCalculus.CompositionRestrictionCalculus
- CompositionCalculus.InternalPentagon
- CompositionCalculus.RetainedComparisonLaws
- CompositionCalculus.RetainedCompositionBaseChange
- CompositionCalculus.RetainedCompositionParameterChange
- CompositionCalculus.RetainedCompositionRoutes
- CompositionCalculus.UniversalAssociatorRestriction
- CompositionCalculus.UniversalCoherence
- CompositionCalculus.UniversalCoherenceCalculus
- CompositionCalculus.UniversalUnitCalculus
- CompositionCalculus.UniversalUnitChange
- Core
- Currying
- EquivalenceDetection
- Everything
- Functoriality
- MappingAnimae
- MappingProducts
- Points
- ProductCalculus.PairSectionEvaluation
- ProductCalculus.ProductAssociativity
- ProductCalculus.ProductPairingComparisons
- ProductCalculus.ProductSecondCoordinate
- ProductCalculus.ProductSubstitution
- ProductCalculus.ProductSubstitutionPairing
- ProductCalculus.ProductSubstitutionUnits
- ProductCalculus.TerminalInsertion
- Setup
- SquareCalculus.EquivalenceSectionFrames
- SquareCalculus.FramedCornerCalculus
- SquareCalculus.ParameterSquareNaturality
- SquareCalculus.ParameterSquarePasting
- SquareCalculus.ParameterSquareUnits
- SquareCalculus.ProjectionSquares
- SquareCalculus.RetainedParameterChangeProjections
- SquareCalculus.SectionFrames
- SquareCalculus.SplitProjectionCalculus
- SquareCalculus.SplitProjectionNaturality
- SquareCalculus.SquareEvaluation
- SquareCalculus.SquareEvaluationPostcomposition
- SquareCalculus.SquareEvaluationVerticalPasting
- SquareCalculus.TriangleEvaluation
- Substitution.ApplicationRestriction
- Substitution.ApplicationRouteNormalization
- Substitution.CoherenceTransport
- Substitution.ComparisonCancellation
- Substitution.Compatibility
- Substitution.ConstantPointRestriction
- Substitution.ConstantSubstitution
- Substitution.DecodingNaturality
- Substitution.EvaluationInputChange
- Substitution.EvaluationParameterChange
- Substitution.IdentityParameterChange
- Substitution.IsomorphismReasoning
- Substitution.IteratedCompatibility
- Substitution.MappingProofCalculus
- Substitution.NestedApplicationRestriction
- Substitution.ParameterChange
- Substitution.ParameterChangeNaturality
- Substitution.PrecompositionNaturality
- Substitution.ProofCalculus
- Substitution.RetainedIdentityParameterChange
- Substitution.SectionComparisonEvaluation
- Substitution.SectionComparisonRestriction
- Substitution.Specialization
- Substitution.SubstitutionCoherence
- Substitution.UncurriedIdentityParameterChange
- Uncurrying
Complete compiler-highlighted source. Follow a symbol to its declaration.
Corresponding book passages
# Unitors and associators for mapping composition Each comparison is constructed by evaluating its boundary and lifting through the specified equivalence on isomorphism animae. The image witness of the lift is retained. Parameters are animae precisely where that lifting rule is used. ```agda {-# OPTIONS --safe --without-K #-} open import Agda.Primitive using (Level) open import SCT.VolumeI.Chapter01.Theory using (Theory) import SCT.VolumeI.Chapter01.Section04.Setup as Setup import SCT.VolumeI.Chapter01.Section04.MappingAnimae as MappingAnimae import SCT.VolumeI.Chapter01.Section04.Currying as Currying import SCT.VolumeI.Chapter01.Section04.Composition as MapComposition import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingCoherence as PairingCoherence import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingNaturality as PairingNaturality import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingUnits as PairingUnits module SCT.VolumeI.Chapter01.Section04.CompositionCalculus.InternalCoherence {c m a : Level} (𝒯 : Theory c m a) (M : MappingAnimae.MappingAnimae 𝒯) where open Setup 𝒯 open MappingAnimae.MappingAnimae M open Currying 𝒯 M open MapComposition 𝒯 M open PairingCoherence vocabulary terminal products productLaws composition vertical whiskering using (pair-cong-triangle₁; pair-cong-triangle₂; pair-cong-Iso₂; pair-cong-comp; pair-iso-extensionality) open PairingNaturality vocabulary terminal products productLaws composition vertical whiskering using (pair-pre-natural; cancel-left-reflect; cancel-right) open PairingUnits vocabulary terminal products productLaws composition vertical whiskering pentagonTriangle using (cancel-right-reflect) mapComp-β-natural : {Γ A B C : CAT} {r s : MAP Γ ((Map B C × Map A B) × A)} (α : r =₁ s) → ((mapComp-β ▷ s) ∙ (mapUncurry mapComp ◁ α)) =₂ ((doubleEvaluation ◁ α) ∙ (mapComp-β ▷ r)) mapComp-β-natural α = interchange-at mapComp-β α mapId-β-natural : {Γ C : CAT} {r s : MAP Γ (One × C)} (α : r =₁ s) → ((mapId-β C ▷ s) ∙ (mapUncurry (mapId C) ◁ α)) =₂ ((pr₂ ◁ α) ∙ (mapId-β C ▷ r)) mapId-β-natural {C = C} α = interchange-at (mapId-β C) α module ParameterRetaining (P : CAT) where retain : {C D : CAT} → MAP (P × C) D → MAP (P × C) (P × D) retain f = pair pr₁ f retain-cong : {C D : CAT} {f g : MAP (P × C) D} → f =₁ g → (retain f) =₁ (retain g) retain-cong α = pair-cong (idIso pr₁) α retain-projection : {C D : CAT} (f : MAP (P × C) D) → (pr₁ ∘ retain f) =₁ pr₁ retain-projection f = pair-β₁ pr₁ f retain-evaluation : {C D : CAT} (f : MAP (P × C) D) → (pr₂ ∘ retain f) =₁ f retain-evaluation f = pair-β₂ pr₁ f retain-compose : {C D E : CAT} (g : MAP (P × D) E) (f : MAP (P × C) D) → (retain g ∘ retain f) =₁ (retain (g ∘ retain f)) retain-compose g f = pair-cong (retain-projection f) (idIso (g ∘ retain f)) ∙ pair-pre pr₁ g (retain f) retain-id : (C : CAT) → (retain {C} pr₂) =₁ (id (P × C)) retain-id C = pair-projections retain-compose-natural : {C D E : CAT} {g g′ : MAP (P × D) E} {f f′ : MAP (P × C) D} (α : g =₁ g′) (β : f =₁ f′) → (retain-compose g′ f′ ∙ (retain-cong α ⋆ retain-cong β)) =₂ (retain-cong (α ⋆ retain-cong β) ∙ retain-compose g f) retain-compose-natural {g = g} {g′} {f} {f′} α β = let δ = retain-cong β changed = α ⋆ δ before = pair-pre pr₁ g (retain f) after = pair-pre pr₁ g′ (retain f′) normalize-before = pair-cong (retain-projection f) (idIso (g ∘ retain f)) normalize-after = pair-cong (retain-projection f′) (idIso (g′ ∘ retain f′)) natural = pair-pre-natural (idIso pr₁) α δ horizontal-unit = isoComp-unitˡ-at (pr₁ ◁ δ) ∙ isoComp-cong (preWhisker-idIso pr₁ (retain f′)) (idIso (pr₁ ◁ δ)) first = isoComp-unitˡ-at (retain-projection f) ∙ (pair-cong-triangle₁ (idIso pr₁) β ∙ isoComp-cong (idIso (retain-projection f′)) horizontal-unit) left-normal = isoComp-cong (pair-cong-Iso₂ first (isoComp-unitˡ-at changed) ∙ (pair-cong-comp (retain-projection f′) (idIso pr₁ ⋆ δ) (idIso (g′ ∘ retain f′)) changed) ⁻¹) (idIso before) ∙ ((isoComp-assoc-at normalize-after (pair-cong (idIso pr₁ ⋆ δ) changed) before) ⁻¹ ∙ (isoComp-cong (idIso normalize-after) (natural ⁻¹) ∙ isoComp-assoc-at normalize-after after (retain-cong α ⋆ δ))) right-normal = isoComp-cong (pair-cong-Iso₂ (isoComp-unitˡ-at (retain-projection f)) (isoComp-unitʳ-at changed) ∙ (pair-cong-comp (idIso pr₁) (retain-projection f) changed (idIso (g ∘ retain f))) ⁻¹) (idIso before) ∙ (isoComp-assoc-at (retain-cong changed) normalize-before before) ⁻¹ in right-normal ⁻¹ ∙ left-normal evaluate-compose : {P C D E : CAT} (g : MAP P (Map D E)) (f : MAP P (Map C D)) → (mapUncurry (composeTerm g f)) =₁ (applyTerm (g ∘ pr₁) (applyTerm (f ∘ pr₁) pr₂)) evaluate-compose g f = apply-compose (g ∘ pr₁) (f ∘ pr₁) pr₂ ∙ (applyTerm-cong (composeTerm-pre g f pr₁) (idIso pr₂) ∙ mapUncurry-as-apply (composeTerm g f)) uncurry-compose : {P C D E : CAT} (g : MAP P (Map D E)) (f : MAP P (Map C D)) → (mapUncurry (composeTerm g f)) =₁ (mapUncurry g ∘ ParameterRetaining.retain P (mapUncurry f)) uncurry-compose g f = (mapUncurry-at g pr₁ (mapUncurry f)) ⁻¹ ∙ (applyTerm-cong (idIso (g ∘ pr₁)) ((mapUncurry-as-apply f) ⁻¹) ∙ evaluate-compose g f) uncurry-identity : (P C : CAT) → (mapUncurry (identityTerm {P} C)) =₁ pr₂ uncurry-identity P C = apply-identity pr₂ ∙ (applyTerm-cong (const-pre (mapId C) pr₁) (idIso pr₂) ∙ mapUncurry-as-apply (identityTerm {P} C)) module RetainedEvaluation (P : CAT) where open ParameterRetaining P retained : {C D : CAT} → MAP P (Map C D) → MAP (P × C) (P × D) retained f = retain (mapUncurry f) retained-compose : {C D E : CAT} (g : MAP P (Map D E)) (f : MAP P (Map C D)) → (retained (composeTerm g f)) =₁ (retained g ∘ retained f) retained-compose g f = (retain-compose (mapUncurry g) (mapUncurry f)) ⁻¹ ∙ retain-cong (uncurry-compose g f) retained-identity : (C : CAT) → (retained (identityTerm C)) =₁ (id (P × C)) retained-identity C = retain-id C ∙ retain-cong (uncurry-identity P C) forget-comparison : {C D : CAT} {f g : MAP P (Map C D)} → (retained f) =₁ (retained g) → (mapUncurry f) =₁ (mapUncurry g) forget-comparison {f = f} {g} α = retain-evaluation (mapUncurry g) ∙ ((pr₂ ◁ α) ∙ (retain-evaluation (mapUncurry f)) ⁻¹) retainedIso : {C D : CAT} {f g : MAP P (Map C D)} → f =₁ g → (retained f) =₁ (retained g) retainedIso α = retain-cong (mapUncurryIso α) forget-retainedIso : {C D : CAT} {f g : MAP P (Map C D)} (α : f =₁ g) → (forget-comparison (retainedIso α)) =₂ (mapUncurryIso α) forget-retainedIso {f = f} {g} α = cancel-right (retain-evaluation (mapUncurry f)) (mapUncurryIso α) ∙ (isoComp-cong (pair-cong-triangle₂ (idIso pr₁) (mapUncurryIso α)) (idIso ((retain-evaluation (mapUncurry f)) ⁻¹)) ∙ (isoComp-assoc-at (retain-evaluation (mapUncurry g)) (pr₂ ◁ retainedIso α) ((retain-evaluation (mapUncurry f)) ⁻¹)) ⁻¹) forget-reflect-second : {C D : CAT} {f g : MAP P (Map C D)} {α β : (retained f) =₁ (retained g)} → (forget-comparison α) =₂ (forget-comparison β) → (pr₂ ◁ α) =₂ (pr₂ ◁ β) forget-reflect-second {f = f} {g} p = cancel-right-reflect ((retain-evaluation (mapUncurry f)) ⁻¹) (cancel-left-reflect (retain-evaluation (mapUncurry g)) p) BaseCompatible : {C D : CAT} {f g : MAP P (Map C D)} → (retained f) =₁ (retained g) → Set m BaseCompatible {f = f} {g} α = (retain-projection (mapUncurry g) ∙ (pr₁ ◁ α)) =₂ (retain-projection (mapUncurry f)) retainedIso-base : {C D : CAT} {f g : MAP P (Map C D)} (α : f =₁ g) → BaseCompatible (retainedIso α) retainedIso-base {f = f} α = isoComp-unitˡ-at (retain-projection (mapUncurry f)) ∙ pair-cong-triangle₁ (idIso pr₁) (mapUncurryIso α) retained-reflect : {C D : CAT} (pAn : isAn P) {f g : MAP P (Map C D)} → (retained f) =₁ (retained g) → f =₁ g retained-reflect pAn {f} {g} α = mapReflect pAn f g (forget-comparison α) retained-reflect-β₂ : {C D : CAT} (pAn : isAn P) {f g : MAP P (Map C D)} (α : (retained f) =₁ (retained g)) → (pr₂ ◁ retainedIso (retained-reflect pAn α)) =₂ (pr₂ ◁ α) retained-reflect-β₂ pAn {f} {g} α = forget-reflect-second (mapReflect-β pAn f g (forget-comparison α) ∙ forget-retainedIso (retained-reflect pAn α)) retained-reflect-β : {C D : CAT} (pAn : isAn P) {f g : MAP P (Map C D)} (α : (retained f) =₁ (retained g)) → BaseCompatible α → (retainedIso (retained-reflect pAn α)) =₂ α retained-reflect-β pAn {g = g} α compatible = pair-iso-extensionality (cancel-left-reflect (retain-projection (mapUncurry g)) (compatible ⁻¹ ∙ retainedIso-base (retained-reflect pAn α))) (retained-reflect-β₂ pAn α) left-unit-route : {C D : CAT} (f : MAP P (Map C D)) → (retained (composeTerm (identityTerm D) f)) =₁ (retained f) left-unit-route {D = D} f = comp-unitˡ (retained f) ∙ ((retained-identity D ▷ retained f) ∙ retained-compose (identityTerm D) f) right-unit-route : {C D : CAT} (f : MAP P (Map C D)) → (retained (composeTerm f (identityTerm C))) =₁ (retained f) right-unit-route {C = C} f = comp-unitʳ (retained f) ∙ ((retained f ◁ retained-identity C) ∙ retained-compose f (identityTerm C)) associator-route : {A B C D : CAT} (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (retained (composeTerm (composeTerm h g) f)) =₁ (retained (composeTerm h (composeTerm g f))) associator-route h g f = (retained-compose h (composeTerm g f)) ⁻¹ ∙ ((retained h ◁ retained-compose g f) ⁻¹ ∙ (comp-assoc (retained f) (retained g) (retained h) ∙ ((retained-compose h g ▷ retained f) ∙ retained-compose (composeTerm h g) f))) evaluate-retained-left-unit : {P C D : CAT} (f : MAP P (Map C D)) → (mapUncurry (composeTerm (identityTerm D) f)) =₁ (mapUncurry f) evaluate-retained-left-unit {P} f = RetainedEvaluation.forget-comparison P (RetainedEvaluation.left-unit-route P f) evaluate-retained-right-unit : {P C D : CAT} (f : MAP P (Map C D)) → (mapUncurry (composeTerm f (identityTerm C))) =₁ (mapUncurry f) evaluate-retained-right-unit {P} f = RetainedEvaluation.forget-comparison P (RetainedEvaluation.right-unit-route P f) evaluate-left-unit : {P C D : CAT} (f : MAP P (Map C D)) → (mapUncurry (composeTerm (identityTerm D) f)) =₁ (mapUncurry f) evaluate-left-unit {D = D} f = (mapUncurry-as-apply f) ⁻¹ ∙ (apply-identity (applyTerm (f ∘ pr₁) pr₂) ∙ (applyTerm-cong (const-pre (mapId D) pr₁) (idIso (applyTerm (f ∘ pr₁) pr₂)) ∙ evaluate-compose (identityTerm D) f)) evaluate-right-unit : {P C D : CAT} (f : MAP P (Map C D)) → (mapUncurry (composeTerm f (identityTerm C))) =₁ (mapUncurry f) evaluate-right-unit {C = C} f = (mapUncurry-as-apply f) ⁻¹ ∙ (applyTerm-cong (idIso (f ∘ pr₁)) (apply-identity pr₂ ∙ applyTerm-cong (const-pre (mapId C) pr₁) (idIso pr₂)) ∙ evaluate-compose f (identityTerm C)) compose-unitˡ : {P C D : CAT} (pAn : isAn P) (f : MAP P (Map C D)) → (composeTerm (identityTerm D) f) =₁ f compose-unitˡ pAn f = mapReflect pAn _ f (evaluate-retained-left-unit f) compose-unitʳ : {P C D : CAT} (pAn : isAn P) (f : MAP P (Map C D)) → (composeTerm f (identityTerm C)) =₁ f compose-unitʳ pAn f = mapReflect pAn _ f (evaluate-retained-right-unit f) compose-unitˡ-β : {P C D : CAT} (pAn : isAn P) (f : MAP P (Map C D)) → (mapUncurryIso (compose-unitˡ pAn f)) =₂ (evaluate-retained-left-unit f) compose-unitˡ-β pAn f = mapReflect-β pAn _ f (evaluate-retained-left-unit f) compose-unitʳ-β : {P C D : CAT} (pAn : isAn P) (f : MAP P (Map C D)) → (mapUncurryIso (compose-unitʳ pAn f)) =₂ (evaluate-retained-right-unit f) compose-unitʳ-β pAn f = mapReflect-β pAn _ f (evaluate-retained-right-unit f) ``` For three composable variables, both parenthesizations evaluate to the same nested application expression. We retain those useful comparisons below. The chosen associator instead uses `associator-route`, which transports the primitive associator between parameter-retaining functors, as in the book. ```agda evaluate-assoc-left : {P A B C D : CAT} (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (mapUncurry (composeTerm (composeTerm h g) f)) =₁ (applyTerm (h ∘ pr₁) (applyTerm (g ∘ pr₁) (applyTerm (f ∘ pr₁) pr₂))) evaluate-assoc-left h g f = apply-compose (h ∘ pr₁) (g ∘ pr₁) (applyTerm (f ∘ pr₁) pr₂) ∙ (applyTerm-cong (composeTerm-pre h g pr₁) (idIso (applyTerm (f ∘ pr₁) pr₂)) ∙ evaluate-compose (composeTerm h g) f) evaluate-assoc-right : {P A B C D : CAT} (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (mapUncurry (composeTerm h (composeTerm g f))) =₁ (applyTerm (h ∘ pr₁) (applyTerm (g ∘ pr₁) (applyTerm (f ∘ pr₁) pr₂))) evaluate-assoc-right h g f = applyTerm-cong (idIso (h ∘ pr₁)) (apply-compose (g ∘ pr₁) (f ∘ pr₁) pr₂ ∙ applyTerm-cong (composeTerm-pre g f pr₁) (idIso pr₂)) ∙ evaluate-compose h (composeTerm g f) evaluate-assoc-by-application : {P A B C D : CAT} (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (mapUncurry (composeTerm (composeTerm h g) f)) =₁ (mapUncurry (composeTerm h (composeTerm g f))) evaluate-assoc-by-application h g f = (evaluate-assoc-right h g f) ⁻¹ ∙ evaluate-assoc-left h g f evaluate-assoc : {P A B C D : CAT} (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (mapUncurry (composeTerm (composeTerm h g) f)) =₁ (mapUncurry (composeTerm h (composeTerm g f))) evaluate-assoc {P} h g f = RetainedEvaluation.forget-comparison P (RetainedEvaluation.associator-route P h g f) compose-assoc : {P A B C D : CAT} (pAn : isAn P) (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (composeTerm (composeTerm h g) f) =₁ (composeTerm h (composeTerm g f)) compose-assoc pAn h g f = mapReflect pAn _ _ (evaluate-assoc h g f) compose-assoc-β : {P A B C D : CAT} (pAn : isAn P) (h : MAP P (Map C D)) (g : MAP P (Map B C)) (f : MAP P (Map A B)) → (mapUncurryIso (compose-assoc pAn h g f)) =₂ (evaluate-assoc h g f) compose-assoc-β pAn h g f = mapReflect-β pAn _ _ (evaluate-assoc h g f) mapComp-unitˡ : (C D : CAT) → (composeTerm (identityTerm D) (id (Map C D))) =₁ (id (Map C D)) mapComp-unitˡ C D = compose-unitˡ (map-isAn C D) (id (Map C D)) mapComp-unitʳ : (C D : CAT) → (composeTerm (id (Map C D)) (identityTerm C)) =₁ (id (Map C D)) mapComp-unitʳ C D = compose-unitʳ (map-isAn C D) (id (Map C D)) mapComp-assoc : (A B C D : CAT) → let P = (Map C D × Map B C) × Map A B h : MAP P (Map C D) h = pr₁ ∘ pr₁ g : MAP P (Map B C) g = pr₂ ∘ pr₁ f : MAP P (Map A B) f = pr₂ in (composeTerm (composeTerm h g) f) =₁ (composeTerm h (composeTerm g f)) mapComp-assoc A B C D = compose-assoc (product-isAn (product-isAn (map-isAn C D) (map-isAn B C)) (map-isAn A B)) (pr₁ ∘ pr₁) (pr₂ ∘ pr₁) pr₂ ``` The displayed universal comparisons also act on terms with arbitrary common parameter. This uses substitution into those comparisons, rather than applying the currying rule with a non-anima parameter. ```agda composeTerm-evaluate : {Γ Δ A B C : CAT} (g : MAP Γ (Map B C)) (f : MAP Γ (Map A B)) (σ : MAP Δ Γ) {g′ : MAP Δ (Map B C)} {f′ : MAP Δ (Map A B)} → (g ∘ σ) =₁ g′ → (f ∘ σ) =₁ f′ → (composeTerm g f ∘ σ) =₁ (composeTerm g′ f′) composeTerm-evaluate g f σ α β = composeTerm-cong α β ∙ composeTerm-pre g f σ internalUnitˡ : {Γ C D : CAT} (f : MAP Γ (Map C D)) → (composeTerm (identityTerm D) f) =₁ f internalUnitˡ {C = C} {D} f = specialize (mapComp-unitˡ C D) f (composeTerm-evaluate (identityTerm D) (id (Map C D)) f (const-pre (mapId D) f) (comp-unitˡ f)) (comp-unitˡ f) internalUnitʳ : {Γ C D : CAT} (f : MAP Γ (Map C D)) → (composeTerm f (identityTerm C)) =₁ f internalUnitʳ {C = C} {D} f = specialize (mapComp-unitʳ C D) f (composeTerm-evaluate (id (Map C D)) (identityTerm C) f (comp-unitˡ f) (const-pre (mapId C) f)) (comp-unitˡ f) internalAssoc : {Γ A B C D : CAT} (h : MAP Γ (Map C D)) (g : MAP Γ (Map B C)) (f : MAP Γ (Map A B)) → (composeTerm (composeTerm h g) f) =₁ (composeTerm h (composeTerm g f)) internalAssoc {A = A} {B} {C} {D} h g f = let point = pair (pair h g) f first = pair-β₁ h g ∙ ((pr₁ ◁ pair-β₁ (pair h g) f) ∙ comp-assoc point pr₁ pr₁) second = pair-β₂ h g ∙ ((pr₂ ◁ pair-β₁ (pair h g) f) ∙ comp-assoc point pr₁ pr₂) third = pair-β₂ (pair h g) f in specialize (mapComp-assoc A B C D) point (composeTerm-evaluate (composeTerm (pr₁ ∘ pr₁) (pr₂ ∘ pr₁)) pr₂ point (composeTerm-evaluate (pr₁ ∘ pr₁) (pr₂ ∘ pr₁) point first second) third) (composeTerm-evaluate (pr₁ ∘ pr₁) (composeTerm (pr₂ ∘ pr₁) pr₂) point first (composeTerm-evaluate (pr₂ ∘ pr₁) pr₂ point second third)) ``` The following are the precise pentagon and triangle boundaries for these chosen comparisons. They do not assume the identities. In particular, constructing and lifting the individual associators above does not yet prove that their five occurrences form a commuting pentagon. ```agda module Pentagon {Γ A B C D E : CAT} (k : MAP Γ (Map D E)) (h : MAP Γ (Map C D)) (g : MAP Γ (Map B C)) (f : MAP Γ (Map A B)) where source = composeTerm (composeTerm (composeTerm k h) g) f target = composeTerm k (composeTerm h (composeTerm g f)) short : source =₁ target short = internalAssoc k h (composeTerm g f) ∙ internalAssoc (composeTerm k h) g f long : source =₁ target long = (composeTerm-cong (idIso k) (internalAssoc h g f) ∙ internalAssoc k (composeTerm h g) f) ∙ composeTerm-cong (internalAssoc k h g) (idIso f) Statement : Set m Statement = short =₂ long by-evaluation : (γAn : isAn Γ) → (mapUncurryIso short) =₂ (mapUncurryIso long) → Statement by-evaluation γAn = mapReflect-Iso₂ γAn short long module Triangle {Γ A B C : CAT} (g : MAP Γ (Map B C)) (f : MAP Γ (Map A B)) where source = composeTerm (composeTerm g (identityTerm B)) f target = composeTerm g f short : source =₁ target short = composeTerm-cong (internalUnitʳ g) (idIso f) long : source =₁ target long = composeTerm-cong (idIso g) (internalUnitˡ f) ∙ internalAssoc g (identityTerm B) f Statement : Set m Statement = short =₂ long by-evaluation : (γAn : isAn Γ) → (mapUncurryIso short) =₂ (mapUncurryIso long) → Statement by-evaluation γAn = mapReflect-Iso₂ γAn short long ```