Other Agda modules in this section (76)
- AbsoluteObjects
- Coherence
- Composition
- CompositionCalculus.CompositionInputCalculus
- CompositionCalculus.CompositionInputParameterChange
- CompositionCalculus.CompositionNaturality
- CompositionCalculus.CompositionParameterChange
- CompositionCalculus.CompositionRestrictionCalculus
- CompositionCalculus.InternalCoherence
- 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.
# Boundaries for composition under parameter change There are two comparisons from the uncurried restricted composite to successive evaluation with the original parameter retained. `restrict-output` uses the restriction comparison for the composite; `change-input` uses the restriction comparison for its inner factor. `Boundaries` names their common source and target and the nested application expression used to compare them. `InputNormalization` prepares the factorization of `change-input` through that expression. The proof is completed in `CompositionInputCalculus`. ```agda {-# OPTIONS --safe --without-K #-} open import Agda.Primitive using (Level) open import SCT.VolumeI.Chapter01.Theory using (Theory) import SCT.VolumeI.Chapter01.Section04.Substitution.ProofCalculus as Setup import SCT.Calculus.Squares as Squares import SCT.VolumeI.Chapter01.Section04.MappingAnimae as Mapping import SCT.VolumeI.Chapter01.Section04.Currying as Currying import SCT.VolumeI.Chapter01.Section04.Composition as MapComposition import SCT.VolumeI.Chapter01.Section04.Substitution.MappingProofCalculus as CompositionNaturality import SCT.VolumeI.Chapter01.Section04.CompositionCalculus.InternalCoherence as InternalCoherence import SCT.VolumeI.Chapter01.Section04.Substitution.ParameterChangeNaturality as ParameterChangeNaturality import SCT.VolumeI.Chapter01.Section04.Substitution.MappingProofCalculus as EvaluationParameterChange import SCT.VolumeI.Chapter01.Section04.Substitution.EvaluationInputChange as EvaluationInputChange import SCT.VolumeI.Chapter01.Section04.ProductCalculus.ProductSubstitution as ProductSubstitution import SCT.VolumeI.Chapter01.Section02.Isomorphisms as Isomorphisms import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingNaturality as PairingNaturality import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingCoherence as PairingCoherence import SCT.VolumeI.Chapter01.Section04.Substitution.EvaluationParameterChange as EvaluationPairs import SCT.VolumeI.Chapter01.Section04.Substitution.ParameterChange as ParameterChange module SCT.VolumeI.Chapter01.Section04.CompositionCalculus.CompositionInputBaseCalculus {c m a : Level} (π― : Theory c m a) (M : Mapping.MappingAnimae π―) where open Setup π― open Mapping.MappingAnimae M open Currying π― M open MapComposition π― M open CompositionNaturality π― M using (apply-cong-comp; apply-cong-Isoβ; mapUncurry-at-inner) open InternalCoherence π― M using (uncurry-compose; evaluate-compose; module RetainedEvaluation) open EvaluationParameterChange π― M using (mapUncurry-at-restriction) open EvaluationInputChange π― M using (mapUncurry-at-input-change) module AtCoordinates = EvaluationPairs.AtCoordinates π― M open ParameterChange π― M using (retained-parameter-change) module Routes = ParameterChangeNaturality.Routes π― M open ProductSubstitution π― M using (module Coordinates) open Isomorphisms vocabulary terminal products productLaws composition vertical whiskering using (reassociateFour; cancel-inverse) open PairingNaturality vocabulary terminal products productLaws composition vertical whiskering using (cancel-right; cancel-left-reflect) open PairingCoherence vocabulary terminal products productLaws composition vertical whiskering using (pair-cong-comp; pair-cong-Isoβ; pair-cong-id) module Boundaries {P Q C D E : CAT} (g : MAP P (Map D E)) (f : MAP P (Map C D)) (Ο : MAP Q P) where source : MAP (Q Γ C) E source = mapUncurry (composeTerm g f β Ο) target : MAP (Q Γ C) E target = mapUncurry g β (RetainedEvaluation.retained P f β productMap Ο (id C)) restrict-output : source =β target restrict-output = comp-assoc (productMap Ο (id C)) (RetainedEvaluation.retained P f) (mapUncurry g) β ((uncurry-compose g f β· productMap Ο (id C)) β mapUncurry-restrict (composeTerm g f) Ο) change-input : source =β target change-input = (mapUncurry g β retained-parameter-change f Ο) β (comp-assoc (RetainedEvaluation.retained Q (f β Ο)) (productMap Ο (id D)) (mapUncurry g) β ((mapUncurry-restrict g Ο β· RetainedEvaluation.retained Q (f β Ο)) β (uncurry-compose (g β Ο) (f β Ο) β mapUncurryIso (composeTerm-pre g f Ο)))) application-target : MAP (Q Γ C) E application-target = applyTerm ((g β Ο) β prβ) (applyTerm ((f β Ο) β prβ) prβ) application-route : source =β application-target application-route = evaluate-compose (g β Ο) (f β Ο) β mapUncurryIso (composeTerm-pre g f Ο) target-normalization : target =β application-target target-normalization = applyTerm-cong (Coordinates.first C g Ο) (mapUncurry-as-apply (f β Ο) β (mapUncurry-restrict f Ο) β»ΒΉ) β (applyTerm-pre (g β prβ) (mapUncurry f) (productMap Ο (id C)) β ((mapUncurry-at g prβ (mapUncurry f) β· productMap Ο (id C)) β (comp-assoc (productMap Ο (id C)) (RetainedEvaluation.retained P f) (mapUncurry g)) β»ΒΉ)) module InputNormalization {P Q C D E : CAT} (g : MAP P (Map D E)) (f : MAP P (Map C D)) (Ο : MAP Q P) where open Boundaries {C = C} {D = D} {E = E} g f Ο open Routes {C = C} {D = D} Ο using (common; input-route; output-route; input-normalization; output-normalization) s : MAP (Q Γ C) (P Γ C) s = productMap Ο (id C) inner-change : (mapUncurry (f β Ο)) =β (mapUncurry f β s) inner-change = mapUncurry-restrict f Ο inner-application : (mapUncurry (f β Ο)) =β (applyTerm ((f β Ο) β prβ) prβ) inner-application = mapUncurry-as-apply (f β Ο) corner : _=β_ {C = Q Γ C} ((g β Ο) β prβ) (g β (Ο β prβ)) corner = comp-assoc prβ Ο g common-action : (applyTerm (g β (Ο β prβ)) (mapUncurry f β s)) =β application-target common-action = applyTerm-cong (corner β»ΒΉ) (inner-application β inner-change β»ΒΉ) common-normalization : (mapUncurry g β common f) =β application-target common-normalization = common-action β mapUncurry-at g (Ο β prβ) (mapUncurry f β s) opaque normalization-on-common : target-normalization =β (common-normalization β (mapUncurry g β output-route f)) normalization-on-common = let Ξ² = pair-Ξ²β (Ο β prβ) (id C β prβ) Ξ· = inner-application β inner-change β»ΒΉ Ain = comp-assoc s prβ g Aret = comp-assoc s (RetainedEvaluation.retained P f) (mapUncurry g) a = corner β»ΒΉ β ((g β Ξ²) β Ain) N = applyTerm-cong a Ξ· G = applyTerm-cong (g β Ξ²) (idIso (mapUncurry f β s)) A = applyTerm-cong Ain (idIso (mapUncurry f β s)) pre = applyTerm-pre (g β prβ) (mapUncurry f) s W = mapUncurry-at g prβ (mapUncurry f) β· s Wβ = mapUncurry-at g (prβ β s) (mapUncurry f β s) Wβ = mapUncurry-at g (Ο β prβ) (mapUncurry f β s) paired = mapUncurry g β output-normalization f pairPre = mapUncurry g β pair-pre prβ (mapUncurry f) s postB = mapUncurry g β output-route f combineGA : (G β A) =β (applyTerm-cong ((g β Ξ²) β Ain) (idIso (mapUncurry f β s))) combineGA = apply-cong-Isoβ (idIso ((g β Ξ²) β Ain)) (isoComp-unitΛ‘-at _) β (apply-cong-comp (g β Ξ²) Ain (idIso _) (idIso _)) β»ΒΉ splitN : N =β (common-action β (G β A)) splitN = (apply-cong-Isoβ (idIso a) (isoComp-unitΚ³-at Ξ·) β ((apply-cong-comp (corner β»ΒΉ) ((g β Ξ²) β Ain) Ξ· (idIso _)) β»ΒΉ β isoComp-cong (idIso common-action) combineGA)) β»ΒΉ restriction : (A β (pre β W)) =β (Wβ β (pairPre β Aret)) restriction = mapUncurry-at-restriction g prβ (mapUncurry f) s natural : (G β Wβ) =β (Wβ β paired) natural = (mapUncurry-at-inner g Ξ² (idIso (mapUncurry f β s))) β»ΒΉ in Squares.common-frame-pasting (comparisonAlgebra (Q Γ C) E) (comparisonLaws (Q Γ C) E) common-action G A N pre W Wβ Wβ paired pairPre postB Aret (Aret β»ΒΉ) splitN restriction natural ((postWhisker-isoComp-at (mapUncurry g) (output-normalization f) (pair-pre prβ (mapUncurry f) s)) β»ΒΉ) (reassociateFour Wβ paired pairPre Aret) (cancel-right Aret (common-normalization β postB)) input-pair : (productMap Ο (id D) β RetainedEvaluation.retained Q (f β Ο)) =β (pair (Ο β prβ) (mapUncurry (f β Ο))) input-pair = AtCoordinates.comparison Ο prβ (mapUncurry (f β Ο)) opaque input-factor : (input-route f) =β (pair-cong (idIso (Ο β prβ)) inner-change β input-pair) input-factor = (isoComp-cong (pair-cong-Isoβ (isoComp-unitΛ‘-at (idIso (Ο β prβ))) (idIso _) β (pair-cong-comp (idIso (Ο β prβ)) (idIso (Ο β prβ)) inner-change (comp-unitΛ‘ (mapUncurry (f β Ο)))) β»ΒΉ) (idIso _) β (isoComp-assoc-at (pair-cong (idIso (Ο β prβ)) inner-change) (pair-cong (idIso (Ο β prβ)) (comp-unitΛ‘ (mapUncurry (f β Ο)))) (productMap-pair Ο (id D) prβ (mapUncurry (f β Ο)))) β»ΒΉ) β»ΒΉ changed-action : (applyTerm (g β (Ο β prβ)) (mapUncurry (f β Ο))) =β application-target changed-action = applyTerm-cong (corner β»ΒΉ) inner-application changed-evaluation : (mapUncurry g β pair (Ο β prβ) (mapUncurry (f β Ο))) =β application-target changed-evaluation = changed-action β mapUncurry-at g (Ο β prβ) (mapUncurry (f β Ο)) ```