module Cat.Displayed.Instances.Gluing
  {o  o' ℓ'} {C : Precategory o } {D : Precategory o' ℓ'} {F : Functor D C}
  (ccart : Cartesian-category C)
  (dcart : Cartesian-category D)
  (pres  : Cartesian-functor F dcart ccart)
  where

Artin gluing🔗

Let and be Cartesian categories, and be a Cartesian functor between them. The (Artin) gluing along is the pullback of fundamental fibration along i.e. the left display map in the diagram

We write out the definition of gluing in components to get slightly better definitional behaviour. Note that, in some cases of interest, will not have pullbacks, meaning that neither or will be Cartesian fibrations.

Gl : Displayed D (o  ) 
Gl = Change-of-base F (Slices C)

To be explicit, an object of over is a pair of an object and a morphism A map over is a map such that the square

commutes.

Displayed Cartesian structure🔗

We will now show that is a family of Cartesian categories over In particular, it has a total terminal object as soon as preserves the terminal object, and total products as soon as preserves products. The structure is “componentwise”, in that the domain of (e.g.) the total terminal object is the terminal object in while the morphisms are induced by comparison maps.

Gl-terminal : TerminalP Gl D.terminal
Gl-terminal .top'      = cut {dom = C.top} (pres-terminal _ .centre)
Gl-terminal .has⊤' .!' = record
  { map = C.!
  ; com = is-contr→is-prop (pres-terminal _) _ _
  }
Gl-terminal .has⊤' .!-unique' h = Slice-pathp (C.!-unique _)

The case for products is similar: the domain of is and the map into is induced by the preserved product structure on

Gl-products : has-products-over Gl D.products
Gl-products {x} {y} a b = done module Gl-products where
  apx : Gl ʻ (x D.⊗₀ y)
  apx .dom = a .dom C.⊗₀ b .dom
  apx .map = is.⟨ a .map C.∘ C.π₁ , b .map C.∘ C.π₂ 

  done : ProductP Gl _ a b
  done .apex' = apx
  done .π₁' = record { com = sym is.π₁∘⟨⟩ }
  done .π₂' = record { com = sym is.π₂∘⟨⟩ }
  done .has-is-product' .⟨_,_⟩'  {f = f} {a' = a'} {g = g} f' g' =
    record { com = coh }
    where abstract
    coh : apx .map C.∘ C.⟨ f' .map , g' .map   F.₁ (D.⟨ f , g ) C.∘ a' .map
    coh = C.pullr (C.⟨⟩∘ _)  sym (is.unique
      (F.pulll D.π₁∘⟨⟩  sym (f' .com)  sym (C.pullr C.π₁∘⟨⟩))
      (F.pulll D.π₂∘⟨⟩  sym (g' .com)  sym (C.pullr C.π₂∘⟨⟩)))

  done .has-is-product' .π₁∘⟨⟩' = Slice-pathp C.π₁∘⟨⟩
  done .has-is-product' .π₂∘⟨⟩' = Slice-pathp C.π₂∘⟨⟩
  done .has-is-product' .unique' p q = Slice-pathp $ C.⟨⟩-unique
     i  p i .map)
     i  q i .map)

Cartesian closed structure🔗

Source

The construction in this section is adapted to the displayed setting from that given by Johnstone (2002, A2.1.12).

Now suppose that each of and are Cartesian closed, and that additionally admits pullbacks. With no further assumptions on the Artin gluing is made into a Cartesian closed category over in that it has total exponential objects.

Gl-closed
  : Cartesian-closed C ccart
   (dcl : Cartesian-closed D dcart)
   has-pullbacks C
   Cartesian-closed-over Gl Gl-cartesian dcl
Gl-closed ccl dcl pullbacks {A} {B} A' B' = done where

To explain the construction of the exponential for and 1 let us pretend that is the syntactic category of some theory with function types, is a category of semantic objects, and the functor embeds syntactic objects into semantic ones. In this situation, we think of the maps in each object of as mapping semantic things to witnesses for their definability in terms of syntax. In general, the semantic exponential will contain many “exotic” operations which can not be syntactically defined, for example those defined by adversarial knowledge of the internal structures of and so we have no hope of writing a map

Instead, we observe that the commutativity condition for morphisms in described above can be internalised using a pullback in we want to restrict the exponential to those maps which fit into a commutative square with a map from To that end, we define the map as the exponential transpose of where the middle map is the inverse of product comparison map. We therefore think of it as turning syntactic functions to ones which take a semantic argument, by passing to the “definability witnesses” of the domain.

  ψ : C.Hom (F.₀ Dλ.[ A , B ]) Cλ.[ X , F.₀ B ]
  ψ = Cλ.ƛ (F.₁ Dλ.ev C.∘ comparison.inv C.∘ (C.id C.⊗₁ f))

The map is much more simply defined as the functorial action of on It therefore takes semantic functions to ones producing a syntactic result, by passing to the “definability witnesses” of each result. The pullback

can thus be thought of as consisting of semantic functions paired with syntactic terms which “pointwise” witnesses their definability, in the sense that if witnesses the definability of some then the syntactic application is a definability witness of As indicated in the diagram, the projection onto is precisely the exponential in

  module pb = Pullback (pullbacks ψ φ)

  pow : Gl ʻ Dλ.[ A , B ]
  pow .dom = pb.apex
  pow .map = pb.p₁

The evaluation map lying over evaluation map, is defined in terms of the projection onto and evaluation map, explicitly as the composition

  evm : Gl.Hom[ Dλ.ev ] (pow ×Gl A') B'
  evm .map = Cλ.ev C.∘ pb.p₂ C.⊗₁ C.id

We must also calculate that this evaluation map is actually displayed over

Finally, if we have some other the exponential transpose of a map over has semantic component and syntactic component the composition which is forced on us by the definition of maps in We omit the verification that this satisfies the pullback condition, and that it is indeed an exponential transpose.
  evm .com = Equiv.injective (_ , Cλ.lambda-is-equiv) $
    Cλ.ƛ (g C.∘ Cλ.ev C.∘ (pb.p₂ C.⊗₁ C.id))
      ≡⟨ ap Cλ.ƛ (C.pulll refl) 
    Cλ.ƛ ((g C.∘ Cλ.ev) C.∘ (pb.p₂ C.⊗₁ C.id))
      ≡⟨ Cλ.ƛ-∘' _ _ _ 
    Cλ.ƛ (Cλ.ev C.∘ (C.id C.⊗₁ C.id)) C.∘ Cλ.ƛ (g C.∘ Cλ.ev) C.∘ pb.p₂
      ≡⟨ C.eliml (ap Cλ.ƛ (C.elimr (C.×-functor .Functor.F-id))  Cλ.lambda-ev) 
    Cλ.ƛ (g C.∘ Cλ.ev) C.∘ pb.p₂
      ≡⟨ sym pb.square 
    Cλ.ƛ (F.₁ Dλ.ev C.∘ comparison.inv C.∘ (C.id C.⊗₁ f)) C.∘ pb.p₁
      ≡˘⟨ Cλ.ƛ-∘-idr _ _ ≡˘
    Cλ.ƛ ((F.₁ Dλ.ev C.∘ comparison.inv C.∘ (C.id C.⊗₁ f)) C.∘ (pb.p₁ C.⊗₁ C.id))
      ≡⟨ ap Cλ.ƛ (C.pullr (C.pullr (Fr.collapse C.×-functor (C.idl _ ,ₚ C.idr _)))) 
    Cλ.ƛ (F.₁ Dλ.ev C.∘ comparison.inv C.∘ (pb.p₁ C.⊗₁ f))
      

  done : ExponentialP Gl Gl-cartesian _ A' B'
  done .B^A' = pow
  done .ev'  = evm
  done .has-is-exponential' .ƛ' {Γ' = Γ} {m = } m .map = alpha module alpha where
    abstract
      coh : ψ C.∘ F.₁ (Dλ.ƛ ) C.∘ Γ .map  φ C.∘ Cλ.ƛ (m .map)
      coh = Equiv.injective₂ (Equiv.inverse (_ , Cλ.lambda-is-equiv))
        (
          Cλ.unlambda (Cλ.ƛ (F.₁ Dλ.ev C.∘ comparison.inv C.∘ (C.id C.⊗₁ f)) C.∘ F.₁ (Dλ.ƛ ) C.∘ Γ .map)
            ≡⟨ Cλ.unlambda-∘ _ _ 
          Cλ.unlambda (Cλ.ƛ (F.₁ Dλ.ev C.∘ comparison.inv C.∘ (C.id C.⊗₁ f))) C.∘ ((F.₁ (Dλ.ƛ ) C.∘ Γ .map) C.⊗₁ C.id)
            ≡⟨ C.pushl (Cλ.commutes _) 
          F.₁ Dλ.ev C.∘ (comparison.inv C.∘ (C.id C.⊗₁ f)) C.∘ ((F.₁ (Dλ.ƛ ) C.∘ Γ .map) C.⊗₁ C.id)
            ≡⟨ ap₂ C._∘_ refl (C.pullr (Fr.weave C.×-functor (C.pulll (C.idl _) ,ₚ C.elimr refl  C.introl F.F-id))) 
          F.₁ Dλ.ev C.∘ comparison.inv C.∘ (F.₁ (Dλ.ƛ ) C.⊗₁ F.₁ D.id) C.∘ (Γ .map C.⊗₁ f)
            ≡⟨ ap₂ C._∘_ refl (C.extendl (comparison-nat _ _ _)) 
          F.₁ Dλ.ev C.∘ F.₁ (Dλ.ƛ  D.⊗₁ D.id) C.∘ comparison.inv C.∘ (Γ .map C.⊗₁ f)
            ≡⟨ C.pulll (F.collapse (Dλ.commutes _)) 
          F.₁  C.∘ comparison.inv C.∘ (Γ .map C.⊗₁ f)
            ≡˘⟨ m .com ≡˘
          g C.∘ m .map )
        (
          Cλ.unlambda (Cλ.ƛ (g C.∘ Cλ.ev) C.∘ Cλ.ƛ (m .map))
            ≡⟨ Cλ.unlambda-∘ _ _ 
          Cλ.unlambda (Cλ.ƛ (g C.∘ Cλ.ev)) C.∘ (Cλ.ƛ (m .map) C.⊗₁ C.id)
            ≡⟨ C.pushl (Cλ.commutes _) 
          g C.∘ Cλ.unlambda (Cλ.ƛ (m .map))
            ≡⟨ ap₂ C._∘_ refl (Cλ.commutes _) 
          g C.∘ m .map )

    alpha = pb.universal {p₁' = F.₁ (Dλ.ƛ ) C.∘ Γ .map} {p₂' = Cλ.ƛ (m .map)} coh

  done .has-is-exponential' .ƛ' m .com = pb.p₁∘universal
  done .has-is-exponential' .commutes' m = Slice-pathp comm1 where abstract
    comm1 : (Cλ.ev C.∘ (pb.p₂ C.⊗₁ C.id)) C.∘ (alpha.alpha m C.⊗₁ C.id)  m .map
    comm1 = C.pullr (sym (Bifunctor.first∘first C.×-functor))
          ∙∙ ap (Cλ.ev C.∘_) (ap₂ C._⊗₁_ pb.p₂∘universal refl)
          ∙∙ Cλ.commutes _

  done .has-is-exponential' .unique' {Γ' = Γ} {m = } {m'β} {p} {m' = m} m' q =
    Slice-pathp (pb.unique coh₁ coh₂)
    where

    coh₁ : pb.p₁ C.∘ m' .map  F.₁ (Dλ.ƛ ) C.∘ Γ .map
    coh₁ =
      pb.p₁ C.∘ m' .map
        ≡⟨ m' .com 
      F.₁ (m'β) C.∘ Γ .map
        ≡⟨ ap₂ C._∘_ (ap F.₁ (Dλ.unique _ p)) refl 
      F.₁ (Dλ.ƛ ) C.∘ Γ .map
        

    coh₂ : pb.p₂ C.∘ m' .map  Cλ.ƛ (m .map)
    coh₂ = Cλ.unique _ $
      Cλ.ev C.∘ (pb.p₂ C.∘ m' .map) C.⊗₁ C.id
        ≡⟨ ap₂ C._∘_ refl (Bifunctor.first∘first C.×-functor) 
      Cλ.ev C.∘ pb.p₂ C.⊗₁ C.id C.∘ m' .map C.⊗₁ C.id
        ≡⟨ C.pulll refl   i  q i .map) 
      m .map
        

  1. In this section, for notational convenience, we will refer to the objects of metonymically by their maps.↩︎


References

  • Johnstone, Peter T. 2002. Sketches of an Elephant: a Topos Theory Compendium. Oxford Logic Guides. New York, NY: Oxford Univ. Press. https://cds.cern.ch/record/592033.