Other Agda modules in this section (6)
Complete compiler-highlighted source. Follow a symbol to its declaration.
Corresponding book passages
# Joint preservation of vertical composition The joint interchange axiom implies preservation with an arbitrary common parameter category. This is conditional on the explicit `JointInterchange` parameter. That parameter is not part of the manuscript or the shared `Theory`. The four-input product instance is displayed at the end. ```agda {-# OPTIONS --safe --without-K #-} open import Agda.Primitive using (Level; _⊔_) open import SCT.VolumeI.Chapter01.Section01.Vocabulary import SCT.VolumeI.Chapter01.Section01.Terminal as Terminal import SCT.VolumeI.Chapter01.Section01.Products as Products import SCT.VolumeI.Chapter01.Section02.Coherence as Coherence import SCT.VolumeI.Chapter01.Section02.Specialization as Specialization module SCT.VolumeI.Chapter01.Section02.JointPreservation {c m a : Level} (V : Vocabulary c m a) (T : Terminal.TerminalStructure V) (P : Products.ProductData V) (PL : Products.ProductLaws V P) (S : Coherence.CompositionStructure V T P) (VC : Coherence.VerticalCoherence V T P S) (W : Coherence.WhiskeringCoherence V T P S) (J : Coherence.JointInterchange V T P S) where open Vocabulary V open Operations V open Terminal.TerminalStructure T open Terminal.Constructions V T open Products.ProductData P open Coherence.CompositionStructure S open Coherence.Composition V T P S open Coherence.VerticalCoherence VC open Coherence.WhiskeringCoherence W open Specialization V T P PL S open Specialization.JointWhiskering V T P PL S J using (interchange-family) module Triple {X A B C : CAT} (γ : MAP X C) (β : MAP X B) (α : MAP X A) where parameters : MAP X ((C × B) × A) parameters = pair (pair γ β) α first : ((pr₁ ∘ pr₁) ∘ parameters) =₁ γ first = pair-β₁ γ β ∙ ((pr₁ ◁ pair-β₁ (pair γ β) α) ∙ comp-assoc parameters pr₁ pr₁) second : ((pr₂ ∘ pr₁) ∘ parameters) =₁ β second = pair-β₂ γ β ∙ ((pr₂ ◁ pair-β₁ (pair γ β) α) ∙ comp-assoc parameters pr₁ pr₂) third : (pr₂ ∘ parameters) =₁ α third = pair-β₂ (pair γ β) α isoComp-assoc-family : {X C D : CAT} {f g h k : MAP C D} (γ : MAP X (h = k)) (β : MAP X (g = h)) (α : MAP X (f = g)) → ((γ ∙ β) ∙ α) =₁ (γ ∙ (β ∙ α)) isoComp-assoc-family {f = f} {g} {h} {k} γ β α = let open Triple γ β α in specialize (Units.isoComp-assoc-left VC f g h k) parameters (isoComp-evaluate ((pr₁ ∘ pr₁) ∙ (pr₂ ∘ pr₁)) pr₂ parameters (isoComp-evaluate (pr₁ ∘ pr₁) (pr₂ ∘ pr₁) parameters first second) third) (isoComp-evaluate (pr₁ ∘ pr₁) ((pr₂ ∘ pr₁) ∙ pr₂) parameters first (isoComp-evaluate (pr₂ ∘ pr₁) pr₂ parameters second third)) postWhisker-isoComp-family : {X C D E : CAT} {f g h : MAP C D} (u : MAP D E) (τ : MAP X (g = h)) (σ : MAP X (f = g)) → (u ◁ (τ ∙ σ)) =₁ ((u ◁ τ) ∙ (u ◁ σ)) postWhisker-isoComp-family {f = f} {g} {h} u τ σ = let parameters = pair τ σ in specialize (postWhisker-isoComp f g h u) parameters (postWhisker-evaluate u (pr₁ ∙ pr₂) parameters (isoComp-evaluate pr₁ pr₂ parameters (pair-β₁ τ σ) (pair-β₂ τ σ))) (isoComp-evaluate (u ◁ pr₁) (u ◁ pr₂) parameters (postWhisker-evaluate u pr₁ parameters (pair-β₁ τ σ)) (postWhisker-evaluate u pr₂ parameters (pair-β₂ τ σ))) preWhisker-isoComp-family : {X B C D : CAT} {f g h : MAP C D} (τ : MAP X (g = h)) (σ : MAP X (f = g)) (k : MAP B C) → ((τ ∙ σ) ▷ k) =₁ ((τ ▷ k) ∙ (σ ▷ k)) preWhisker-isoComp-family {f = f} {g} {h} τ σ k = let parameters = pair τ σ in specialize (preWhisker-isoComp f g h k) parameters (preWhisker-evaluate (pr₁ ∙ pr₂) k parameters (isoComp-evaluate pr₁ pr₂ parameters (pair-β₁ τ σ) (pair-β₂ τ σ))) (isoComp-evaluate (pr₁ ▷ k) (pr₂ ▷ k) parameters (preWhisker-evaluate pr₁ k parameters (pair-β₁ τ σ)) (preWhisker-evaluate pr₂ k parameters (pair-β₂ τ σ))) reassociateFour-family : {X C D : CAT} {f g h i j : MAP C D} (δ : MAP X (i = j)) (γ : MAP X (h = i)) (β : MAP X (g = h)) (α : MAP X (f = g)) → ((δ ∙ γ) ∙ (β ∙ α)) =₁ (δ ∙ ((γ ∙ β) ∙ α)) reassociateFour-family δ γ β α = isoComp-cong (idIso δ) ((isoComp-assoc-family γ β α) ⁻¹) ∙ isoComp-assoc-family δ γ (β ∙ α) ``` Expand the two horizontal composites and exchange the middle vertical factors using joint interchange. Both outside factors retain the same common parameter. ```agda hcomp-isoComp-family : {X C D E : CAT} {f₀ f₁ f₂ : MAP C D} {g₀ g₁ g₂ : MAP D E} (β₂ : MAP X (g₁ = g₂)) (β₁ : MAP X (g₀ = g₁)) (α₂ : MAP X (f₁ = f₂)) (α₁ : MAP X (f₀ = f₁)) → ((β₂ ∙ β₁) ⋆ (α₂ ∙ α₁)) =₁ ((β₂ ⋆ α₂) ∙ (β₁ ⋆ α₁)) hcomp-isoComp-family {f₁ = f₁} {f₂} {g₀ = g₀} {g₁} β₂ β₁ α₂ α₁ = let δ = β₂ ▷ f₂ γ = β₁ ▷ f₂ β = g₀ ◁ α₂ α = g₀ ◁ α₁ γ′ = g₁ ◁ α₂ β′ = β₁ ▷ f₁ expand = isoComp-cong (preWhisker-isoComp-family β₂ β₁ f₂) (postWhisker-isoComp-family g₀ α₂ α₁) exchange = isoComp-cong (idIso δ) (isoComp-cong (interchange-family β₁ α₂) (idIso α)) in (reassociateFour-family δ γ′ β′ α) ⁻¹ ∙ (exchange ∙ (reassociateFour-family δ γ β α ∙ expand)) module FourInputs {C D E : CAT} (f₀ f₁ f₂ : MAP C D) (g₀ g₁ g₂ : MAP D E) where Parameter : CAT Parameter = ((g₁ = g₂) × (g₀ = g₁)) × ((f₁ = f₂) × (f₀ = f₁)) β₂ : MAP Parameter (g₁ = g₂) β₂ = pr₁ ∘ pr₁ β₁ : MAP Parameter (g₀ = g₁) β₁ = pr₂ ∘ pr₁ α₂ : MAP Parameter (f₁ = f₂) α₂ = pr₁ ∘ pr₂ α₁ : MAP Parameter (f₀ = f₁) α₁ = pr₂ ∘ pr₂ preserve-first : MAP Parameter ((g₀ ∘ f₀) = (g₂ ∘ f₂)) preserve-first = (β₂ ∙ β₁) ⋆ (α₂ ∙ α₁) compose-first : MAP Parameter ((g₀ ∘ f₀) = (g₂ ∘ f₂)) compose-first = (β₂ ⋆ α₂) ∙ (β₁ ⋆ α₁) preservation : preserve-first =₁ compose-first preservation = hcomp-isoComp-family β₂ β₁ α₂ α₁ ```