definition theorem example

For an arrow in a category with pullbacks, the base-change functor (pullback functor, substitution)

sends a fibration to , the pullback of along , and a fiber-preserving map to the unique induced by the universal property (DaoFP Exercise 11.2.4). Note that runs opposite to .

f¤eebagf¤pypff¤eebagf¤pypf

Sources: DaoFP §11.2 (“Pullbacks”, “Substitution”, “Base-change functor”), Exercise 11.2.4, §11.3–11.4; 7 Sketches §7.2 (pullback of subobjects), §3.4 ( as pullback of instances); Kittenlab Lecture 14 (pullback of a subset is its preimage).

  • In : . Think of as cutting the base into patches (with an atlas of patch names): plants a clone of the fiber over every point of the patch . Countries , cities , languages fibered by country: assigns each city its country’s languages.
  • If : , the trivial bundle. A general bundle is locally a product — a sum over patches of (patch fiber), the atlas idea of differential geometry (Möbius strip, Klein bottle).
  • Pulling back along a point extracts the single Fiber over .
  • Adjoints (in a Locally Cartesian Closed Category): , i.e. — the Dependent Sum () and Dependent Product. On subobjects this is (Quantification, Direct Image, Preimage, and Dual Image).
  • Type-theoretically is substitution: from the family , , form , . Also called weakening when is a projection .

Docs: FinSets · Limits & colimits — Kittenlab Lecture 14

using Catlab
# base change in FinSet: pull the bundle p : E → A back along f : B → A
p = FinFunction([1, 1, 2], 2)          # E = 3 over A = 2: fibers of size 2 and 1
f = FinFunction([1, 1, 1, 2], 2)       # B = 4: patch {1,2,3} ↦ 1, patch {4} ↦ 2
P = pullback(f, p)
f_star_E = ob(P)                       # FinSet(7) = 3·2 + 1·1
f_star_p = legs(P)[1]                  # the new projection f*E → B
[length(preimage(f_star_p, x)) for x in 1:4]   # [2, 2, 2, 1]: fibers replanted over patches
import Mathlib
open CategoryTheory
#check @CategoryTheory.Over.pullback          -- (f : X ⟶ Y) : Over Y ⥤ Over X
#check @CategoryTheory.Over.mapPullbackAdj     -- Over.map f ⊣ Over.pullback f   (Σ_f ⊣ f^*)
#check @CategoryTheory.Over.pullbackComp       -- (f ≫ g)^* ≅ g^* ⋙ f^*
-- base change on finite "bundles" represented as association lists (element, base point)
type Bundle e b = [(e, b)]
baseChange :: Eq a => (b -> a) -> Bundle e a -> [b] -> Bundle (b, e) b
baseChange f bundle bs = [ ((x, e), x) | x <- bs, (e, y) <- bundle, f x == y ]