Other Agda modules in this section (7)

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

Corresponding book passages
# Relative slices and coslices

For the absolute base-parametrized assertions in `cons:General_Slice_Category`
and `con:Contextual_Slice_Categories`, take the dependent product of the
relative arrow category along the exponentiable source projection.
Its two evaluations induce the endpoint functors. Relative currying
constructs the constant family and the section determined by the diagram.

The slice and coslice are the displayed pullbacks, with the two lower
components in the respective orders. Their specified matching and
projection to the base are retained. No categorical-context inheritance
is asserted here.

```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 Pullbacks
import SCT.VolumeI.Chapter02.Section01.WalkingMorphism as Interval

module SCT.VolumeI.Chapter03.Section07.RelativeSlices
  {c m a : Level} (𝒯 : Theory c m a) (M : Mapping.MappingAnimae 𝒯)
  (ℱ : Categories.FunctorCategories 𝒯 M) (P : Pullbacks.PullbackStructure 𝒯)
  (I : Interval.WalkingMorphism 𝒯) where

open import SCT.VolumeI.Chapter01.Section07.Setup 𝒯 M ℱ
open Pullbacks.PullbackStructure P
open Interval.WalkingMorphism I
open import SCT.VolumeI.Chapter01.Section06.Cones 𝒯
open import SCT.VolumeI.Chapter01.Section06.PullbackSquares 𝒯 P using (IsPullback; pullbackCone-isPullback)
open import SCT.VolumeI.Chapter03.RelativeCategories.Functors 𝒯 M ℱ P
open import SCT.VolumeI.Chapter03.Section05.DependentProducts 𝒯 M ℱ P
open import SCT.VolumeI.Chapter03.Section05.ExponentiableFunctors 𝒯 M ℱ P using (IsExponentiable; module Exponentiable)
open import SCT.VolumeI.Chapter03.Section05.InternalFunctors 𝒯 M ℱ P using (module FunctorCategory)
open import SCT.VolumeI.Chapter03.Section05.Currying.RelativeCurrying 𝒯 M ℱ P using (module Currying)
open import SCT.VolumeI.Chapter03.RelativeCategories.ConeCalculus.NativePullbackTargets 𝒯 M ℱ P using (module Target)
open import SCT.VolumeI.Chapter03.Section05.DependentProductAction 𝒯 M ℱ P using (module Induced)
open import SCT.VolumeI.Chapter03.RelativeCategories.Products 𝒯 M ℱ P using (module Product)
open import SCT.VolumeI.Chapter03.Section07.MappingCalculus.RelativeArrows 𝒯 M ℱ P using (module Diagrams)

module Construction {C Y Γ : CAT} (pC : MAP C Γ) (pY : MAP Y Γ)
  (epY : IsExponentiable pY) (ψ : FunctorOver pY pC) where
  A = Pullback pC pY
  r : MAP A Y
  r = pullback₂
  module Internal = FunctorCategory pY pC epY
  module Curry = Currying.Native pY r Internal.product
  module Arrows = Diagrams [1] r
  arrow-product = Exponentiable.dependent-product epY Arrows.projection
  arrow-category = DependentProduct.category arrow-product
  arrow-projection = DependentProduct.projection arrow-product
  module Endpoint (e : Obj-abs [1]) = Induced pY Arrows.projection r
    arrow-product Internal.product (Arrows.At.over e)
  module Pairing = Product Internal.projection Internal.projection
  endpoints : FunctorOver arrow-projection Pairing.projection
  endpoints = Pairing.Pair.over (Endpoint.over zero) (Endpoint.over one)

  constant : FunctorOver pC Internal.projection
  constant = Curry.factor pC (identity-over r)

  unit-projection : MAP (Pullback (id Γ) pY) Y
  unit-projection = pullback₂
  projected : FunctorOver (pY ∘ unit-projection) pY
  projected = record { lift = unit-projection ; comparison = idIso (pY ∘ unit-projection) }
  section : FunctorOver (id Γ) Internal.projection
  section = Curry.factor (id Γ)
    (Target.backward pY pC unit-projection (compose-over ψ projected))
  to-base : FunctorOver pC (id Γ)
  to-base = record { lift = pC ; comparison = comp-unitˡ pC }
  fixed : FunctorOver pC Internal.projection
  fixed = compose-over section to-base

  module Boundary (left right : FunctorOver pC Internal.projection) where
    boundary : FunctorOver pC Pairing.projection
    boundary = Pairing.Pair.over left right
    upper = FunctorLift.lift endpoints
    lower = FunctorLift.lift boundary
    category : CAT
    category = Pullback upper lower
    projection : MAP category Γ
    projection = pC ∘ pullback₂
    diagram : MAP category arrow-category
    diagram = pullback₁
    forget : MAP category C
    forget = pullback₂
    matching : (upper ∘ diagram) =₁ (lower ∘ forget)
    matching = pullbackMatch
    abstract
      diagram-triangle : (arrow-projection ∘ diagram) =₁ projection
      diagram-triangle = (FunctorLift.comparison boundary ▷ forget) ∙
        ((comp-assoc forget lower Pairing.projection) ⁻¹ ∙
          ((Pairing.projection ◁ matching) ∙
            (comp-assoc diagram upper Pairing.projection ∙
              ((FunctorLift.comparison endpoints ▷ diagram) ⁻¹))))
      universal : IsPullback (pullbackCone upper lower)
      universal = pullbackCone-isPullback upper lower

  module Slice = Boundary constant fixed
  module Coslice = Boundary fixed constant
```