Other Agda modules in this section (188)

Complete compiler-highlighted source. Follow a symbol to its declaration.

# The coordinate square after double evaluation

Changing both axis comparisons and evaluating the coordinate permutation
preserves its specified corner. The two external associators are part of
the comparison, so this statement can be pasted with curry beta equations.

```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

module SCT.VolumeI.Chapter02.Section02.EvaluationCalculus.DoubleEvaluationCoordinates
  {c m a : Level} (š’Æ : Theory c m a) (M : Mapping.MappingAnimae š’Æ)
  (ℱ : Categories.FunctorCategories š’Æ M) where

open import SCT.VolumeI.Chapter02.Section01.EvaluationCalculus.EndpointEvaluation š’Æ M ℱ public
open import SCT.VolumeI.Chapter01.Section04.SquareCalculus.SquareEvaluation š’Æ M using (evaluate-square)
import SCT.VolumeI.Chapter01.Section04.SquareCalculus.SquareEvaluationPostcomposition as Post
import SCT.VolumeI.Chapter02.Section02.SquareCalculus.SquareParameterCorner as Corner
open import SCT.VolumeI.Chapter01.Section04.ProductCalculus.ProductAssociativity š’Æ M using (cancel-inverse-tail)
open import SCT.VolumeI.Chapter01.Section06.ConeCalculus.ComparisonSquares š’Æ using (post-square)
open import SCT.VolumeI.Chapter01.Section02.Isomorphisms
  vocabulary terminal products productLaws composition vertical whiskering using (cancel-inverse)
import SCT.VolumeI.Chapter01.Section03.ProductCalculus.PairingNaturality as PN
open PN vocabulary terminal products productLaws composition vertical whiskering using (move-square; cancel-left-reflect)
import SCT.VolumeI.Chapter01.Section03.IdentificationCalculus.Structural as Structural
open Structural vocabulary terminal products productLaws composition whiskering using (whisker-mixed-at)

change-axes : {X Y K L C : CAT} (e : MAP L C) (f : MAP X Y) (i : MAP X K)
  {F F′ : MAP K L} {j j′ : MAP Y L} (p : j =₁ j′) (q : F =₁ F′)
  (α : (j ∘ f) =₁ (F ∘ i)) (β : (j′ ∘ f) =₁ (F′ ∘ i)) →
  (β āˆ™ (p ā–· f)) =ā‚‚ ((q ā–· i) āˆ™ α) →
  (evaluate-square e f F′ i j′ β āˆ™ ((e ◁ p) ā–· f)) =ā‚‚
    (((e ◁ q) ā–· i) āˆ™ evaluate-square e f F i j α)
change-axes e f i {F} {F′} {j} {j′} p q α β square = paste-squares
  ((e ◁ α) āˆ™ comp-assoc f j e) ((e ◁ β) āˆ™ comp-assoc f j′ e)
  ((comp-assoc i F e) ⁻¹) ((comp-assoc i F′ e) ⁻¹)
  ((e ◁ p) ā–· f) (e ◁ (q ā–· i)) ((e ◁ q) ā–· i)
  (paste-squares (comp-assoc f j e) (comp-assoc f j′ e) (e ◁ α) (e ◁ β)
    ((e ◁ p) ā–· f) (e ◁ (p ā–· f)) (e ◁ (q ā–· i))
    (whisker-mixed-at p f e) (post-square e α β (p ā–· f) (q ā–· i) square))
  (move-square (comp-assoc i F′ e) ((e ◁ q) ā–· i) (e ◁ (q ā–· i))
    (comp-assoc i F e) (whisker-mixed-at q i e))

module At {Ī“ A B C : CAT} (h : MAP (Ī“ Ɨ (A Ɨ B)) C)
  (u : Obj-abs A) (v : Obj-abs B) where
  module K = Corner.At š’Æ M ℱ Ī“ A B u v
  module H = K.H
  module V = K.V
  J = K.J
  ia = K.ia
  ib = K.ib
  χ = K.χ
  Eā‚€ = evaluate-square J ib V.step ia H.step χ
  E₁ = evaluate-square h ib (J ∘ V.step) ia (J ∘ H.step) Eā‚€
  Eā‚‚ = evaluate-square (h ∘ J) ib V.step ia H.step χ
  result = evaluate-square h ib V.restriction ia H.restriction K.matching
  module P = Post.At š’Æ M J h ib V.step ia H.step χ
  left-associator = comp-assoc H.step J h ā–· ib
  right-associator = comp-assoc V.step J h ā–· ia
  p = H.comparison ā–· ib
  q = V.comparison ā–· ia

  abstract
    matching-normal : K.matching =ā‚‚ (q āˆ™ (Eā‚€ āˆ™ p ⁻¹))
    matching-normal = isoComp-cong (idIso q)
      ((isoComp-assoc-at K.fourth (K.third āˆ™ K.second) (p ⁻¹)) ⁻¹ āˆ™
        isoComp-cong (idIso K.fourth) ((isoComp-assoc-at K.third K.second (p ⁻¹)) ⁻¹))

    matching-square : (K.matching āˆ™ p) =ā‚‚ (q āˆ™ Eā‚€)
    matching-square = isoComp-cong (idIso q) (cancel-inverse-tail Eā‚€ p) āˆ™
      isoComp-assoc-at q (Eā‚€ āˆ™ p ⁻¹) p āˆ™ isoComp-cong matching-normal (idIso p)

    axes : (result āˆ™ ((h ◁ H.comparison) ā–· ib)) =ā‚‚ (((h ◁ V.comparison) ā–· ia) āˆ™ E₁)
    axes = change-axes h ib ia H.comparison V.comparison Eā‚€ K.matching matching-square

    permutation : (E₁ āˆ™ left-associator) =ā‚‚ (right-associator āˆ™ Eā‚‚)
    permutation = cancel-left-reflect P.V
      (isoComp-assoc-at P.V right-associator Eā‚‚ āˆ™ P.comparison āˆ™
        isoComp-assoc-at (h ◁ Eā‚€) P.Jā‚€ left-associator āˆ™
        isoComp-cong (cancel-inverse P.V ((h ◁ Eā‚€) āˆ™ P.Jā‚€)) (idIso left-associator) āˆ™
        (isoComp-assoc-at P.V E₁ left-associator) ⁻¹)

    comparison :
      (((h ◁ V.comparison) ā–· ia) āˆ™ (right-associator āˆ™ Eā‚‚)) =ā‚‚
      (result āˆ™ (((h ◁ H.comparison) ā–· ib) āˆ™ left-associator))
    comparison = isoComp-assoc-at result ((h ◁ H.comparison) ā–· ib) left-associator āˆ™
      isoComp-cong (axes ⁻¹) (idIso left-associator) āˆ™
      (isoComp-assoc-at ((h ◁ V.comparison) ā–· ia) E₁ left-associator) ⁻¹ āˆ™
      isoComp-cong (idIso ((h ◁ V.comparison) ā–· ia)) (permutation ⁻¹)
```