Other Agda modules in this section (52)
# Complete geometric corner transfers
This draft starts with the common diagram-to-endpoint computation used by
both legs of each complete corner comparison. Its chosen diagram leg and
vertex route are shared. All six packings use the proved lower-diagonal
image from the same complete beta. The public Complete interface has no
additional compatibility premise.
The generic point calculations are reused from the preserved supporting
source, without importing any prescribed-edge or reflected-family owner.
```agda
{-# OPTIONS --without-K #-}
module SCT.VolumeI.Chapter02.Section02.SquareBoundaryCones where
open import SCT.VolumeI.Chapter01.Section01.Vocabulary
open Operations
open import SCT.VolumeI.Chapter01.Section02.Coherence using (id₌; comp-assoc; 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 (cancel-right)
open import SCT.VolumeI.Chapter01.Section03.Products.ProductRestriction using (product-restriction; restriction-compositor)
open import SCT.VolumeI.Chapter01.Section03.Products.ProductFunctor using (productMap-cong)
open import SCT.VolumeI.Chapter01.Section07.FunctorCategories using (Fun; funEval)
open import SCT.VolumeI.Chapter01.Section07.Functoriality using (funPre)
open import SCT.VolumeI.Chapter01.Section07.Currying using (funUncurry)
open import SCT.VolumeI.Chapter01.Section07.Evaluation using (evaluate-cong)
open import SCT.VolumeI.Chapter02.Section01.WalkingMorphism using ([1])
open import SCT.VolumeI.Chapter02.Section01.WalkingTriangle using ([2])
open import SCT.VolumeI.Chapter02.Section01.Morphisms using (insert; evAt)
open import SCT.VolumeI.Chapter02.Section02.FramedDiagramTransport
using (module InsertionPoints; module LiftedVertexSquare; module RestrictedVertexRepresentation;
module DiagramVertexTransport; module VertexComparison; module VertexTransfer; module DecodedEndpointImage)
open import SCT.VolumeI.Chapter01.Section02.Products using (module Calculus)
open Calculus
open import SCT.VolumeI.Chapter01.Section06.Cones using (cone-restrict)
open import SCT.VolumeI.Chapter01.Section06.FramedConeTransport using (module Corner)
open import SCT.VolumeI.Chapter02.Section01.WalkingMorphism using (zero; one)
open import SCT.VolumeI.Chapter02.Section01.WalkingTriangle
using (d₀; d₁; d₂; vertex₀; vertex₁; vertex₂; d₂-zero; d₂-one; d₀-zero; d₀-one; d₁-zero; d₁-one)
open import SCT.VolumeI.Chapter02.Section01.Morphisms using (MorphismFamily; ev₀; ev₁; evAt-pre; evAt-cong)
open import SCT.VolumeI.Chapter02.Section01.Triangles using (triangle-cone; triangle-junction-vertex)
open import SCT.VolumeI.Chapter02.Section01.SquareGluing using (j₀; j₁; diagonal; j₀-d₂; j₀-d₀; j₁-d₂; j₁-d₀; j₀-diagonal; j₁-diagonal; j₀-vertex₀; j₀-vertex₁; j₀-vertex₂; j₁-vertex₀; j₁-vertex₁; j₁-vertex₂)
open import SCT.VolumeI.Chapter02.Section02.SquareCoordinates using (coinsert)
open import SCT.VolumeI.Chapter02.Section02.SquareCorners using (module SquareCorner)
open import SCT.VolumeI.Chapter02.Section02.SquareVertexShapes using (module At)
open import SCT.VolumeI.Chapter02.Section02.OriginalTriangleBoundaryComparisons using (module Boundaries)
open import SCT.VolumeI.Chapter02.Section02.FramedTrianglePresentations using (TrianglePresentation)
open import SCT.VolumeI.Chapter02.Section02.TriangleCornerFrames using (module CornerRestriction; module TriangleCornerFrames)
import SCT.VolumeI.Chapter02.Section02.CommonDiagramDiagonal as CommonDiagonal
module Endpoint {Γ : Context} {P C : CAT Γ}
(sigma : MAP P (Fun ([1] × [1]) C))
(triangle : MAP P (Fun [2] C))
(j : MAP [2] ([1] × [1]))
(leg : (funUncurry sigma ∘ product-restriction {P = P} j) =₁ funUncurry triangle)
(d : MAP [1] [2]) (r : MAP [1] ([1] × [1]))
(shape : (j ∘ d) =₁ r)
(point : MAP One [1]) (triangle-vertex : MAP One [2])
(square-vertex : MAP One ([1] × [1]))
(face-vertex : (d ∘ point) =₁ triangle-vertex)
(inclusion-vertex : (j ∘ triangle-vertex) =₁ square-vertex)
(side-vertex : (r ∘ point) =₁ square-vertex)
(shape-square :
(inclusion-vertex ∙ ((j ◁ face-vertex) ∙ comp-assoc point d j)) =₂
(side-vertex ∙ (shape ▷ point))) where
module Source = RestrictedVertexRepresentation sigma r point square-vertex side-vertex
module Target = RestrictedVertexRepresentation triangle d point triangle-vertex face-vertex
private
module Points = InsertionPoints P
module Lift = LiftedVertexSquare P d j r point triangle-vertex square-vertex
shape face-vertex inclusion-vertex side-vertex shape-square
axis = productMap-cong (id₌ (id P)) shape ∙ restriction-compositor d j
module Vertex = DiagramVertexTransport (product-restriction {P = P} j)
(insert triangle-vertex) (insert square-vertex)
(Points.action inclusion-vertex ∙ Source.Shape.χ j triangle-vertex)
(funUncurry sigma) (funUncurry triangle) leg
private
input-square = (comp₌-assoc Lift.kappa-action Lift.axis-insertion Lift.axis-at) ⁻¹ ∙
(Lift.compatibility ∙
comp₌-assoc Lift.nu-action Lift.vertex-insertion (Lift.delta-face ∙ Lift.input-assoc))
module Restriction = Vertex.Restriction (product-restriction {P = P} d)
(product-restriction r) (insert point) axis
(Points.action face-vertex ∙ Source.Shape.χ d point)
(Points.action side-vertex ∙ Source.Shape.χ r point) input-square
module Represented = Restriction.Represented Source.beta Target.beta
module Change = VertexComparison Source.mu Target.mu Vertex.Zroute
vertex : (evAt {C = C} square-vertex ∘ sigma) =₁ (evAt triangle-vertex ∘ triangle)
vertex = Change.value
module WithComparison
(comparison : Source.side =₁ Target.side)
(image : evaluate-cong (funEval {C = [1]} {D = C}) comparison =₂ Represented.raw) where
private
module Transfer = VertexTransfer Source.mu Target.mu Source.decoded-frame Target.decoded-frame
Represented.expanded-at Source.represented-route Target.represented-route Vertex.Zroute
vertex Change.image Source.route-compatibility Target.route-compatibility Represented.transfer
module Decoded = DecodedEndpointImage Source.side Target.side point comparison Target.frame
decoded : (Target.decoded-frame ∙ Decoded.diagram-endpoint) =₂
(vertex ∙ Source.decoded-frame)
decoded = Transfer.compatibility ∙
(comp₌-cong (id₌ Target.decoded-frame)
(preWhisker (insert point) ◁ (Represented.expanded-image ⁻¹)) ∙
comp₌-cong (id₌ Target.decoded-frame) (preWhisker (insert point) ◁ image))
compatible : (Target.frame ∙ (evAt point ◁ comparison)) =₂ (vertex ∙ Source.frame)
compatible = cancel-right (Source.u ⁻¹)
((comp₌-assoc vertex Source.frame (Source.u ⁻¹)) ⁻¹ ∙
(decoded ∙ (Decoded.compatibility ⁻¹)))
module Six {Γ : Context} {P C : CAT Γ} {x y z w : MAP P C}
{top : MorphismFamily x y} {right : MorphismFamily y z}
{left : MorphismFamily x w} {bottom : MorphismFamily w z}
{long : MorphismFamily x z}
(given-upper : TrianglePresentation top right long)
(given-lower : TrianglePresentation left bottom long) where
module Sides = Boundaries given-upper given-lower
module Shapes = At {Γ = Γ}
module Frames = TriangleCornerFrames C
module UpperJunction = CornerRestriction ev₁ ev₀ (triangle-cone C)
(evAt-cong d₂-one ∙ evAt-pre one d₂)
(evAt-cong d₀-zero ∙ evAt-pre zero d₀) (triangle-junction-vertex C) Sides.A.triangle
module LowerJunction = CornerRestriction ev₁ ev₀ (triangle-cone C)
(evAt-cong d₂-one ∙ evAt-pre one d₂)
(evAt-cong d₀-zero ∙ evAt-pre zero d₀) (triangle-junction-vertex C) Sides.B.triangle
module UpperSourceFrames = Frames.Source Sides.A.triangle
module LowerSourceFrames = Frames.Source Sides.B.triangle
module UpperTargetFrames = Frames.Target Sides.A.triangle
module LowerTargetFrames = Frames.Target Sides.B.triangle
module WithLowerDiagonalImage
(lower-image : evaluate-cong (funEval {C = [1]} {D = C}) Sides.lower-diagonal =₂
Sides.LowerDiagonalRoute.diagram-comparison) where
module TopSource = Endpoint Sides.G.square Sides.A.triangle j₀ Sides.upper-diagram-leg
d₂ (coinsert zero) j₀-d₂ zero vertex₀ (SquareCorner.vertex zero zero)
d₂-zero j₀-vertex₀ (SquareCorner.horizontal-vertex zero zero) Shapes.UpperFirstSource.comparison
module TopSourceComparison = TopSource.WithComparison Sides.Top.comparison Sides.Top.image
module TopTarget = Endpoint Sides.G.square Sides.A.triangle j₀ Sides.upper-diagram-leg
d₂ (coinsert zero) j₀-d₂ one vertex₁ (SquareCorner.vertex zero one)
d₂-one j₀-vertex₁ (SquareCorner.horizontal-vertex zero one) Shapes.UpperFirstTarget.comparison
module TopTargetComparison = TopTarget.WithComparison Sides.Top.comparison Sides.Top.image
module RightSource = Endpoint Sides.G.square Sides.A.triangle j₀ Sides.upper-diagram-leg
d₀ (insert one) j₀-d₀ zero vertex₁ (SquareCorner.vertex zero one)
d₀-zero j₀-vertex₁ (SquareCorner.vertical-vertex zero one) Shapes.UpperSecondSource.comparison
module RightSourceComparison = RightSource.WithComparison Sides.Right.comparison Sides.Right.image
module RightTarget = Endpoint Sides.G.square Sides.A.triangle j₀ Sides.upper-diagram-leg
d₀ (insert one) j₀-d₀ one vertex₂ (SquareCorner.vertex one one)
d₀-one j₀-vertex₂ (SquareCorner.vertical-vertex one one) Shapes.UpperSecondTarget.comparison
module RightTargetComparison = RightTarget.WithComparison Sides.Right.comparison Sides.Right.image
module UpperDiagonalSource = Endpoint Sides.G.square Sides.A.triangle j₀ Sides.upper-diagram-leg
d₁ diagonal j₀-diagonal zero vertex₀ (SquareCorner.vertex zero zero)
d₁-zero j₀-vertex₀ (Shapes.diagonal-vertex zero) Shapes.UpperDiagonalSource.comparison
module UpperDiagonalSourceComparison = UpperDiagonalSource.WithComparison Sides.UpperDiagonal.comparison Sides.UpperDiagonal.image
module UpperDiagonalTarget = Endpoint Sides.G.square Sides.A.triangle j₀ Sides.upper-diagram-leg
d₁ diagonal j₀-diagonal one vertex₂ (SquareCorner.vertex one one)
d₁-one j₀-vertex₂ (Shapes.diagonal-vertex one) Shapes.UpperDiagonalTarget.comparison
module UpperDiagonalTargetComparison = UpperDiagonalTarget.WithComparison Sides.UpperDiagonal.comparison Sides.UpperDiagonal.image
module LeftSource = Endpoint Sides.G.square Sides.B.triangle j₁ Sides.lower-diagram-leg
d₂ (insert zero) j₁-d₂ zero vertex₀ (SquareCorner.vertex zero zero)
d₂-zero j₁-vertex₀ (SquareCorner.vertical-vertex zero zero) Shapes.LowerFirstSource.comparison
module LeftSourceComparison = LeftSource.WithComparison Sides.Left.comparison Sides.Left.image
module LeftTarget = Endpoint Sides.G.square Sides.B.triangle j₁ Sides.lower-diagram-leg
d₂ (insert zero) j₁-d₂ one vertex₁ (SquareCorner.vertex one zero)
d₂-one j₁-vertex₁ (SquareCorner.vertical-vertex one zero) Shapes.LowerFirstTarget.comparison
module LeftTargetComparison = LeftTarget.WithComparison Sides.Left.comparison Sides.Left.image
module BottomSource = Endpoint Sides.G.square Sides.B.triangle j₁ Sides.lower-diagram-leg
d₀ (coinsert one) j₁-d₀ zero vertex₁ (SquareCorner.vertex one zero)
d₀-zero j₁-vertex₁ (SquareCorner.horizontal-vertex one zero) Shapes.LowerSecondSource.comparison
module BottomSourceComparison = BottomSource.WithComparison Sides.Bottom.comparison Sides.Bottom.image
module BottomTarget = Endpoint Sides.G.square Sides.B.triangle j₁ Sides.lower-diagram-leg
d₀ (coinsert one) j₁-d₀ one vertex₂ (SquareCorner.vertex one one)
d₀-one j₁-vertex₂ (SquareCorner.horizontal-vertex one one) Shapes.LowerSecondTarget.comparison
module BottomTargetComparison = BottomTarget.WithComparison Sides.Bottom.comparison Sides.Bottom.image
module LowerDiagonalSource = Endpoint Sides.G.square Sides.B.triangle j₁ Sides.lower-diagram-leg
d₁ diagonal j₁-diagonal zero vertex₀ (SquareCorner.vertex zero zero)
d₁-zero j₁-vertex₀ (Shapes.diagonal-vertex zero) Shapes.LowerDiagonalSource.comparison
module LowerDiagonalSourceComparison = LowerDiagonalSource.WithComparison Sides.lower-diagonal lower-image
module LowerDiagonalTarget = Endpoint Sides.G.square Sides.B.triangle j₁ Sides.lower-diagram-leg
d₁ diagonal j₁-diagonal one vertex₂ (SquareCorner.vertex one one)
d₁-one j₁-vertex₂ (Shapes.diagonal-vertex one) Shapes.LowerDiagonalTarget.comparison
module LowerDiagonalTargetComparison = LowerDiagonalTarget.WithComparison Sides.lower-diagonal lower-image
module UpperMiddle = Corner ev₁ ev₀ (cone-restrict Sides.A.triangle (triangle-cone C))
TopTarget.Source.frame RightSource.Source.frame TopTarget.Target.frame RightSource.Target.frame
UpperJunction.compatibility Sides.Top.comparison Sides.Right.comparison TopTarget.vertex
TopTargetComparison.compatible RightSourceComparison.compatible
module LowerMiddle = Corner ev₁ ev₀ (cone-restrict Sides.B.triangle (triangle-cone C))
LeftTarget.Source.frame BottomSource.Source.frame LeftTarget.Target.frame BottomSource.Target.frame
LowerJunction.compatibility Sides.Left.comparison Sides.Bottom.comparison LeftTarget.vertex
LeftTargetComparison.compatible BottomSourceComparison.compatible
module UpperSource = Corner ev₀ ev₀ (cone-restrict Sides.A.triangle (Frames.source-cone))
UpperDiagonalSource.Source.frame TopSource.Source.frame UpperDiagonalSource.Target.frame TopSource.Target.frame
UpperSourceFrames.compatibility Sides.UpperDiagonal.comparison Sides.Top.comparison UpperDiagonalSource.vertex
UpperDiagonalSourceComparison.compatible TopSourceComparison.compatible
module LowerSource = Corner ev₀ ev₀ (cone-restrict Sides.B.triangle (Frames.source-cone))
LowerDiagonalSource.Source.frame LeftSource.Source.frame LowerDiagonalSource.Target.frame LeftSource.Target.frame
LowerSourceFrames.compatibility Sides.lower-diagonal Sides.Left.comparison LowerDiagonalSource.vertex
LowerDiagonalSourceComparison.compatible LeftSourceComparison.compatible
module UpperTarget = Corner ev₁ ev₁ (cone-restrict Sides.A.triangle (Frames.target-cone))
UpperDiagonalTarget.Source.frame RightTarget.Source.frame UpperDiagonalTarget.Target.frame RightTarget.Target.frame
UpperTargetFrames.compatibility Sides.UpperDiagonal.comparison Sides.Right.comparison UpperDiagonalTarget.vertex
UpperDiagonalTargetComparison.compatible RightTargetComparison.compatible
module LowerTarget = Corner ev₁ ev₁ (cone-restrict Sides.B.triangle (Frames.target-cone))
LowerDiagonalTarget.Source.frame BottomTarget.Source.frame LowerDiagonalTarget.Target.frame BottomTarget.Target.frame
LowerTargetFrames.compatibility Sides.lower-diagonal Sides.Bottom.comparison LowerDiagonalTarget.vertex
LowerDiagonalTargetComparison.compatible BottomTargetComparison.compatible
module Complete {Γ : Context} {P C : CAT Γ} {x y z w : MAP P C}
{top : MorphismFamily x y} {right : MorphismFamily y z}
{left : MorphismFamily x w} {bottom : MorphismFamily w z}
{long : MorphismFamily x z}
(given-upper : TrianglePresentation top right long)
(given-lower : TrianglePresentation left bottom long) where
module Construction = Six given-upper given-lower using (module Sides)
module Diagonal = CommonDiagonal.At given-upper given-lower using (lower-image)
module Transfers = Six.WithLowerDiagonalImage given-upper given-lower Diagonal.lower-image
open Transfers public using
(module UpperMiddle; module LowerMiddle; module UpperSource; module LowerSource;
module UpperTarget; module LowerTarget)
```