Other Agda modules in this section (19)
- BasicClosure
- ConstantDiagrams.ConstantExponential
- Everything
- FunctorGroupoids
- Groupoids
- PullbackCalculus.CompositeEvaluationCones
- PullbackCalculus.CrossedEvaluationCones
- PullbackCalculus.DoubleWhiskering
- PullbackCalculus.EvaluationBaseChange
- PullbackCalculus.EvaluationCones
- PullbackCalculus.EvaluationPullbacks
- PullbackCalculus.MappedConeComparisons
- PullbackCalculus.MappedEvaluationCones
- PullbackCalculus.NormalizedMappedConeComparisons
- PullbackCalculus.PairedEvaluationCones
- PullbackCalculus.PairedEvaluationFibers
- PullbackCalculus.PairedEvaluationImages
- PullbackCalculus.SuccessiveCospans
- PullbackGroupoids
Complete compiler-highlighted source. Follow a symbol to its declaration.
# Comparing successive directed-evaluation factorizations The composite evaluation comparison lifts through the intermediate pullback. Its prescribed first projection supplies the matching of a comparison over the original base. Retaining this matching is the step needed before the upper composition triangle can be reflected. ```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 Laws module SCT.VolumeI.Chapter02.Section04.PullbackCalculus.EvaluationCompositionComparison {c m a : Level} (𝒯 : Theory c m a) (M : Mapping.MappingAnimae 𝒯) (ℱ : Categories.FunctorCategories 𝒯 M) (P : Laws.PullbackStructure 𝒯) where open import SCT.VolumeI.Chapter02.Section01.EvaluationCalculus.EndpointEvaluation 𝒯 M ℱ public open import SCT.VolumeI.Chapter01.Section06.PullbackSquares 𝒯 P open import SCT.VolumeI.Chapter01.Section06.ConeCalculus.CompositeCones 𝒯 using (compositeCone; compositeConeIso; compositeCone-pre) open import SCT.VolumeI.Chapter01.Section06.ConeCalculus.ConeSymmetry 𝒯 using (coneSwap; coneSwap-pre; coneIso-swap) open import SCT.VolumeI.Chapter01.Section06.PullbackSymmetry 𝒯 P using (pullback-swap) open import SCT.VolumeI.Chapter01.Section06.ConeCalculus.InverseCalculus 𝒯 using (inverse-inverse; inverse-identity) open import SCT.VolumeI.Chapter01.Section02.Isomorphisms vocabulary terminal products productLaws composition vertical whiskering using (cancel-inverse) import SCT.VolumeI.Chapter01.Section06.ConeCalculus.FramedEdgeCones as Edges import SCT.VolumeI.Chapter01.Section06.Pasting.FactoredComposition as Factored import SCT.VolumeI.Chapter01.Section06.ConeCalculus.UniversalConeLifting as Lifting import SCT.VolumeI.Chapter02.Section04.PullbackCalculus.CompositeEvaluationCones as EvaluationCones module At {T A B C Y X : CAT} (z : Obj-abs T) (f : MAP A B) (g : MAP B C) (s : Cone (evaluate z) g Y) (es : IsPullback s) (t : Cone (evaluate z) (g ∘ f) X) (et : IsPullback t) where module EvaluatedComposite = EvaluationCones.At 𝒯 M ℱ z f g using (square; comparison) module Outer = Factored.At 𝒯 P f g (evaluate z) (coneSwap s) (pullback-swap s es) (coneSwap t) (pullback-swap t et) using (h; h-comparison; outer-square; outer-isPullback; module Factor) module Factors (dg : MAP (Fun T B) Y) (dgf : MAP (Fun T A) X) (βg : ConeIso (conePre dg s) (EvaluatedComposite.square g)) (βgf : ConeIso (conePre dgf t) (EvaluatedComposite.square (g ∘ f))) where Ff : MAP (Fun T A) (Fun T B) Ff = funPost f bg = Cone.right s κ = ConeIso.rightIso βg J = ConeIso.rightIso βgf d = evaluate-post z f swapped-g-raw = coneIso-compose (coneIso-swap βg) (coneSwap-pre dg s) swapped-g = coneIso-adjust swapped-g-raw κ (ConeIso.leftIso βg) (isoComp-unitʳ-at κ) (isoComp-unitʳ-at (ConeIso.leftIso βg)) swapped-gf-raw = coneIso-compose (coneIso-swap βgf) (coneSwap-pre dgf t) swapped-gf = coneIso-adjust swapped-gf-raw J (ConeIso.leftIso βgf) (isoComp-unitʳ-at J) (isoComp-unitʳ-at (ConeIso.leftIso βgf)) first = coneIso-compose (compositeCone-pre f g dgf (coneSwap t)) (coneIso-compose (coneIso-pre dgf Outer.h-comparison) (coneIso-inverse (conePre-assoc dgf Outer.h (coneSwap s)))) second = coneIso-compose (compositeConeIso f g swapped-gf) first composite-raw = coneIso-compose (coneIso-inverse (coneSwap-pre Ff (EvaluatedComposite.square g))) EvaluatedComposite.comparison composite = coneIso-adjust composite-raw (d ⁻¹) (ConeIso.rightIso EvaluatedComposite.comparison) (isoComp-unitˡ-at (d ⁻¹) ∙ isoComp-cong (inverse-identity _) (idIso (d ⁻¹))) (isoComp-unitˡ-at (ConeIso.rightIso EvaluatedComposite.comparison) ∙ isoComp-cong (inverse-identity _) (idIso (ConeIso.rightIso EvaluatedComposite.comparison))) third = coneIso-compose composite second last = coneIso-compose (coneIso-pre Ff swapped-g) (coneIso-inverse (conePre-assoc Ff dg (coneSwap s))) whole = coneIso-compose (coneIso-inverse last) third module Lift = Lifting.UniversalLift 𝒯 P (coneSwap s) (pullback-swap s es) (Outer.h ∘ dgf) (dg ∘ Ff) whole using (lift; left-image) χ = Lift.lift Kg = (κ ▷ Ff) ∙ (comp-assoc Ff dg bg) ⁻¹ N = Cone.match (conePre dgf Outer.outer-square) L = (f ◁ J) ∙ N abstract first-left : ConeIso.leftIso first =₂ N first-left = isoComp-cong (idIso (comp-assoc dgf (Cone.right t) f)) (isoComp-cong (preWhisker dgf ◁ (inverse-inverse (ConeIso.leftIso Outer.h-comparison)) ⁻¹) (idIso ((comp-assoc dgf Outer.h bg) ⁻¹))) lifted-left : (bg ◁ χ) =₂ (Kg ⁻¹ ∙ (d ⁻¹ ∙ L)) lifted-left = isoComp-cong (idIso (Kg ⁻¹)) (isoComp-cong (idIso (d ⁻¹)) (isoComp-cong (idIso (f ◁ J)) first-left)) ∙ Lift.left-image compatible : ((d ∙ Kg) ∙ (bg ◁ χ)) =₂ L compatible = cancel-inverse d L ∙ (isoComp-cong (idIso d) (cancel-inverse Kg (d ⁻¹ ∙ L)) ∙ (isoComp-cong (idIso d) (isoComp-cong (idIso Kg) lifted-left) ∙ isoComp-assoc-at d Kg (bg ◁ χ))) target-cone : Cone bg f (Fun T A) target-cone = record { left = dg ∘ Ff ; right = evaluate z ; match = d ∙ Kg } comparison : ConeIso (conePre dgf Outer.outer-square) target-cone comparison = record { leftIso = χ ; rightIso = J ; compatible = compatible } module Triangle {V : CAT} (q : Cone (evaluate z) f V) (eq : IsPullback q) (df : MAP (Fun T A) V) (βf : ConeIso (conePre df q) (EvaluatedComposite.square f)) where module Candidate = Outer.Factor dg (evaluate z) κ q eq using (map; map-comparison; square; square-isPullback) open Candidate public using (map; square; square-isPullback) right-map = Outer.h module Edge = Edges.At 𝒯 dg bg κ f using (edge; restrict; action) restricted = coneIso-compose (coneIso-pre df Candidate.map-comparison) (coneIso-inverse (conePre-assoc df Candidate.map Outer.outer-square)) to-target : ConeIso (conePre (Candidate.map ∘ df) Outer.outer-square) target-cone to-target = coneIso-compose (Edge.action βf) (coneIso-compose (Edge.restrict df q) restricted) triangle-cones = coneIso-compose (coneIso-inverse comparison) to-target module Result = Lifting.UniversalLift 𝒯 P Outer.outer-square Outer.outer-isPullback (Candidate.map ∘ df) dgf triangle-cones using (lift; left-image; right-image) triangle : (Candidate.map ∘ df) =₁ dgf triangle = Result.lift ```