theorem proof

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.

ABCA0B0C0fh1gh2yh3f0g0ABCA0B0C0fh1gh2yh3f0g0

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

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 ways
import 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