Other Agda modules in this section (43)
- CompositionCalculus.LeftTriangleAction
- CompositionCalculus.RightTriangleAction
- CompositionCalculus.SourceCompositionCones
- CompositionCalculus.SourceCompositionEquivalence
- CompositionCalculus.SourceCompositionInverse
- CompositionCalculus.TargetCompositionCones
- CompositionCalculus.TargetCompositionEquivalence
- CompositionCalculus.TargetCompositionInverse
- Everything
- IdentityIsomorphisms
- InverseCalculus.AbsoluteInverseTriangles
- InverseCalculus.ConstantArrows
- InverseCalculus.ConstantIdentityComparison
- InverseCalculus.ConstantLongEdgeFiber
- InverseCalculus.ExpressionCalculusLifts
- InverseCalculus.ExpressionInverseLaws
- InverseCalculus.ExpressionOperations
- InverseCalculus.ExpressionParameterChanges
- InverseCalculus.InverseTriangleData
- InverseCalculus.InverseTriangleLift
- InverseCalculus.LiftedInverseExpressions
- InverseCalculus.LiftedInverseWitnesses
- InverseCalculus.NaturalTransformationCancellation
- InverseCalculus.NormalizedTriangles
- InverseCalculus.OneSidedInverseFibers
- InverseCalculus.PrimitiveInverses
- InverseCalculus.ProjectedRestriction
- InverseCalculus.PullbackInvertibility
- InverseCalculus.RetractionsReflectInverses
- InverseCalculus.UncurryingInvertibility
- InverseCalculus.UniversalInverseExpressions
- InvertibleExpressions
- InvertibleIdentifications
- IsomorphismEmbedding
- Isomorphisms
- NaturalIsomorphisms
- PullbackCalculus.IntersectionEmbedding
- PullbackCalculus.InversePullbackComparison
- PullbackCalculus.TwoStageFibers
- RezkAxiom
- RezkFibers
- RezkIdentification
- RezkRecovery
Complete compiler-highlighted source. Follow a symbol to its declaration.
# Inverse triangles with specified endpoints A triangle whose long edge is constant gives a one-sided inverse. Move the constant center to the specified endpoint of the given edge, and use the other two corners to frame the inverse. Segal uniqueness then gives the inverse equation with both endpoint identifications. ```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 import SCT.VolumeI.Chapter02.Section01.WalkingMorphism as Walking import SCT.VolumeI.Chapter02.Section01.IntervalEndpoints as Endpoints import SCT.VolumeI.Chapter02.Section02.SegalAxiom as Segal module SCT.VolumeI.Chapter02.Section03.InverseCalculus.InverseTriangleExpressions {c m a : Level} (𝒯 : Theory c m a) (M : Mapping.MappingAnimae 𝒯) (ℱ : Categories.FunctorCategories 𝒯 M) (P : Laws.PullbackStructure 𝒯) (I : Walking.WalkingMorphism 𝒯) (E : Endpoints.IntervalEndpoints 𝒯 M ℱ P I) (S : Segal.SegalAxiom 𝒯 M ℱ P I E) where open import SCT.VolumeI.Chapter02.Section02.MorphismCalculus.CompositePresentations 𝒯 M ℱ P I E S public open import SCT.VolumeI.Chapter02.Section02.MorphismCalculus.ExpressionIdentifications 𝒯 M ℱ I open import SCT.VolumeI.Chapter02.Section03.InverseCalculus.ConstantArrows 𝒯 M ℱ I using (constant-frame; constant-frame-natural) import SCT.VolumeI.Chapter02.Section03.InverseCalculus.ConstantIdentityComparison as Constant open import SCT.VolumeI.Chapter01.Section06.Cones 𝒯 open import SCT.VolumeI.Chapter01.Section04.ProductCalculus.ProductAssociativity 𝒯 M using (cancel-inverse-tail) import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingNaturality as PN open PN vocabulary terminal products productLaws composition vertical whiskering using (cancel-left) constant-expression : {Γ C : CAT} (x : MAP Γ C) → MorphismExpression x x constant-expression x = record { arrow = identityArrow ∘ x ; source-frame = constant-frame ev₀ identity-source x ; target-frame = constant-frame ev₁ identity-target x } module MoveConstant {Γ C : CAT} {h : MAP Γ (Ar C)} {z y : MAP Γ C} (long : h =₁ (identityArrow ∘ z)) (ρ : z =₁ y) where comparison : h =₁ (identityArrow ∘ y) comparison = (identityArrow ◁ ρ) ∙ long endpoint : (v : MAP (Ar C) C) (b : (v ∘ identityArrow) =₁ (id C)) → (constant-frame v b y ∙ (v ◁ comparison)) =₂ (ρ ∙ (constant-frame v b z ∙ (v ◁ long))) endpoint v b = isoComp-assoc-at ρ (constant-frame v b z) (v ◁ long) ∙ isoComp-cong (constant-frame-natural v b ρ) (idIso (v ◁ long)) ∙ (isoComp-assoc-at (constant-frame v b y) (v ◁ (identityArrow ◁ ρ)) (v ◁ long)) ⁻¹ ∙ isoComp-cong (idIso (constant-frame v b y)) (postWhisker-isoComp-at v (identityArrow ◁ ρ) long) module Right {Γ C : CAT} {x y z : MAP Γ C} (f : MorphismExpression x y) (σ : MAP Γ (Triangles C)) (β : (edge₀ ∘ σ) =₁ MorphismExpression.arrow f) (long : (edge₁ ∘ σ) =₁ (identityArrow ∘ z)) where private module F = MorphismExpression f middle = Cone.match (conePre σ (triangle-cone C)) source-corner = Cone.match (conePre σ (source-cone C)) target-corner = Cone.match (conePre σ (target-cone C)) t = F.target-frame ∙ ((ev₁ ◁ β) ∙ target-corner) l = constant-frame ev₁ identity-target z ∙ (ev₁ ◁ long) ρ = t ∙ l ⁻¹ module Moved = MoveConstant long ρ u = constant-frame ev₀ identity-source y ∙ (ev₀ ◁ Moved.comparison) v = (ev₀ ◁ β) ∙ middle inverse-expression : MorphismExpression y x inverse-expression = record { arrow = edge₂ ∘ σ ; source-frame = u ∙ source-corner ⁻¹ ; target-frame = F.source-frame ∙ v } private short-edges : ConeIso (conePre σ (triangle-cone C)) (expression-pair inverse-expression f) short-edges = record { leftIso = idIso (edge₂ ∘ σ) ; rightIso = β ; compatible = cancel-left F.source-frame v ∙ isoComp-unitʳ-at (F.source-frame ⁻¹ ∙ (F.source-frame ∙ v)) ∙ isoComp-cong (idIso (F.source-frame ⁻¹ ∙ (F.source-frame ∙ v))) (postWhisker-idIso ev₁ (edge₂ ∘ σ)) } source-equation : (constant-frame ev₀ identity-source y ∙ (ev₀ ◁ Moved.comparison)) =₂ ((u ∙ source-corner ⁻¹) ∙ ((ev₀ ◁ idIso (edge₂ ∘ σ)) ∙ source-corner)) source-equation = (cancel-inverse-tail u source-corner ∙ isoComp-cong (idIso (u ∙ source-corner ⁻¹)) (isoComp-unitˡ-at source-corner ∙ isoComp-cong (postWhisker-idIso ev₀ (edge₂ ∘ σ)) (idIso source-corner))) ⁻¹ target-equation : (constant-frame ev₁ identity-target y ∙ (ev₁ ◁ Moved.comparison)) =₂ t target-equation = cancel-inverse-tail t l ∙ Moved.endpoint ev₁ identity-target presentation : CompositePresentation inverse-expression f (constant-expression y) presentation = record { triangle = σ ; short-edges = short-edges ; long-edge = record { comparison = Moved.comparison ; source-compatible = source-equation ; target-compatible = target-equation } } inverse-law : ExpressionIso (compose-expression inverse-expression f) (identity-expression y) inverse-law = expressionIso-compose (Constant.At.comparison 𝒯 M ℱ P I E y) (recognize-composite presentation) module Left {Γ C : CAT} {x y z : MAP Γ C} (f : MorphismExpression x y) (σ : MAP Γ (Triangles C)) (α : (edge₂ ∘ σ) =₁ MorphismExpression.arrow f) (long : (edge₁ ∘ σ) =₁ (identityArrow ∘ z)) where private module F = MorphismExpression f middle = Cone.match (conePre σ (triangle-cone C)) source-corner = Cone.match (conePre σ (source-cone C)) target-corner = Cone.match (conePre σ (target-cone C)) s = F.source-frame ∙ ((ev₀ ◁ α) ∙ source-corner) l = constant-frame ev₀ identity-source z ∙ (ev₀ ◁ long) ρ = s ∙ l ⁻¹ module Moved = MoveConstant long ρ u = constant-frame ev₁ identity-target x ∙ (ev₁ ◁ Moved.comparison) v = F.target-frame ∙ (ev₁ ◁ α) frame = v ∙ middle ⁻¹ inverse-expression : MorphismExpression y x inverse-expression = record { arrow = edge₀ ∘ σ ; source-frame = frame ; target-frame = u ∙ target-corner ⁻¹ } private middle-equation : ((frame ⁻¹ ∙ F.target-frame) ∙ (ev₁ ◁ α)) =₂ ((ev₀ ◁ idIso (edge₀ ∘ σ)) ∙ middle) middle-equation = (isoComp-unitˡ-at middle ∙ isoComp-cong (postWhisker-idIso ev₀ (edge₀ ∘ σ)) (idIso middle)) ⁻¹ ∙ cancel-left frame middle ∙ isoComp-cong (idIso (frame ⁻¹)) ((cancel-inverse-tail v middle) ⁻¹) ∙ isoComp-assoc-at (frame ⁻¹) F.target-frame (ev₁ ◁ α) short-edges : ConeIso (conePre σ (triangle-cone C)) (expression-pair f inverse-expression) short-edges = record { leftIso = α ; rightIso = idIso (edge₀ ∘ σ) ; compatible = middle-equation } source-equation : (constant-frame ev₀ identity-source x ∙ (ev₀ ◁ Moved.comparison)) =₂ s source-equation = cancel-inverse-tail s l ∙ Moved.endpoint ev₀ identity-source target-equation : (constant-frame ev₁ identity-target x ∙ (ev₁ ◁ Moved.comparison)) =₂ ((u ∙ target-corner ⁻¹) ∙ ((ev₁ ◁ idIso (edge₀ ∘ σ)) ∙ target-corner)) target-equation = (cancel-inverse-tail u target-corner ∙ isoComp-cong (idIso (u ∙ target-corner ⁻¹)) (isoComp-unitˡ-at target-corner ∙ isoComp-cong (postWhisker-idIso ev₁ (edge₀ ∘ σ)) (idIso target-corner))) ⁻¹ presentation : CompositePresentation f inverse-expression (constant-expression x) presentation = record { triangle = σ ; short-edges = short-edges ; long-edge = record { comparison = Moved.comparison ; source-compatible = source-equation ; target-compatible = target-equation } } inverse-law : ExpressionIso (compose-expression f inverse-expression) (identity-expression x) inverse-law = expressionIso-compose (Constant.At.comparison 𝒯 M ℱ P I E x) (recognize-composite presentation) ```