Proposition 7.3 (pasting lemma). In the commutative diagram below suppose the right square is a Pullback. Then the left square is a pullback if and only if the outer rectangle is a pullback.
This removes the ambiguity of the corner symbol in a rectangle made of two squares: when the right square is a pullback, “the left square is a pullback” and “the whole rectangle is a pullback” mean the same thing.
Sources: 7 Sketches §7.2.1, Proposition 7.3, Exercise 7.4 (proof), Exercises 7.7–7.8 (applications: pullback of an iso is an iso, monos are pullback-stable); CTfS Proposition 2.5.1.17 (proof via elements )
Proof (7S Exercise 7.4)
() Suppose the left square is a pullback and let satisfy . The right pullback gives a unique with and ; then the left pullback gives a unique with , . So mediates for the rectangle, and any other mediator must have (uniqueness for the right square) and then (uniqueness for the left square).
() Suppose the rectangle is a pullback and satisfies . Put ; then , so the rectangle gives a unique with and . Both and satisfy the two equations characterizing the mediator into the right pullback, so . Uniqueness of follows from uniqueness for the rectangle.
In ologs (Category Theory for Scientists)
CTfS proves the set version by elements — is a bijection — and uses it to unfold definitions: if “a cellphone that has a bad battery” is the pullback of “a cellphone a battery” along “a bad battery a battery”, and “a bad battery” is itself the pullback of “a battery a duration” along “less than 1 hour a duration”, then “a cellphone that has a bad battery” is “a cellphone that has a battery which remains charged for less than one hour”.
Consequences
- The pullback of an Isomorphism is an isomorphism, and with identities and twice is a pullback (7S Exercise 7.7).
- Monos are stable under pullback (7S Exercise 7.8): two applications of the lemma to a cube.
Docs: FinSets · Limits & colimits
using Catlab
# pasting in FinSet: pulling back in two steps equals pulling back along the composite
g′ = FinFunction([1, 2, 2], 3) # B' → C'
h3 = FinFunction([1, 3, 3, 2], 3) # C → C'
f′ = FinFunction([1, 1, 2], 3) # A' → B'
right = pullback(g′, h3) # B := B' ×_{C'} C, with h2 : B → B'
h2 = legs(right)[1]
left = pullback(f′, h2) # A := A' ×_{B'} B
outer = pullback(f′ ⋅ g′, h3) # A' ×_{C'} C
ob(left) == ob(outer) # true: FinSet(3) both waysimport Mathlib
open CategoryTheory Limits
#check @CategoryTheory.Limits.bigSquareIsPullback -- left ∧ right pullbacks ⇒ rectangle
#check @CategoryTheory.Limits.leftSquareIsPullback -- rectangle ∧ right ⇒ left
#check @CategoryTheory.IsPullback.paste_horiz
#check @CategoryTheory.IsPullback.of_right -- cancellation form