Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
% (find-LATEX "2020pullback-lemmas.tex")
% (defun c () (interactive) (find-LATEXsh "lualatex -record 2020pullback-lemmas.tex" :end))
% (defun d () (interactive) (find-pdf-page "~/LATEX/2020pullback-lemmas.pdf"))
% (defun d () (interactive) (find-pdftools-page "~/LATEX/2020pullback-lemmas.pdf"))
% (defun e () (interactive) (find-LATEX "2020pullback-lemmas.tex"))
% (defun u () (interactive) (find-latex-upload-links "2020pullback-lemmas"))
% (defun v  () (interactive) (find-2a '(e) '(d)) (g))
% (find-pdf-page   "~/LATEX/2020pullback-lemmas.pdf")
% (find-sh0 "cp -v  ~/LATEX/2020pullback-lemmas.pdf /tmp/")
% (find-sh0 "cp -v  ~/LATEX/2020pullback-lemmas.pdf /tmp/pen/")
%   file:///home/edrx/LATEX/2020pullback-lemmas.pdf
%               file:///tmp/2020pullback-lemmas.pdf
%           file:///tmp/pen/2020pullback-lemmas.pdf
% http://angg.twu.net/LATEX/2020pullback-lemmas.pdf
% (find-LATEX "2019.mk")

% «.make»	(to "make")

\usepackage[colorlinks,citecolor=DarkRed,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref")
\usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor")
%\usepackage{colorweb}                 % (find-es "tex" "colorweb")
% (find-dn6 "preamble6.lua" "preamble0")
\usepackage{proof}   % For derivation trees ("%:" lines)
\input diagxy        % For 2D diagrams ("%D" lines)
\xyoption{curve}     % For the ".curve=" feature in 2D diagrams
\usepackage{edrx15}               % (find-LATEX "edrx15.sty")
\input edrxaccents.tex            % (find-LATEX "edrxaccents.tex")
\input edrxchars.tex              % (find-LATEX "edrxchars.tex")
\input edrxheadfoot.tex           % (find-LATEX "edrxheadfoot.tex")
\input edrxgac2.tex               % (find-LATEX "edrxgac2.tex")
   style=alphabetic]{biblatex} % (find-es "tex" "biber")
\addbibresource{catsem-u.bib}  % (find-LATEX "catsem-u.bib")
% (find-es "tex" "geometry")

\directlua{dofile "dednat6load.lua"}  % (find-LATEX "dednat6load.lua")

% %L dofile "edrxtikz.lua"  -- (find-LATEX "edrxtikz.lua")
% %L dofile "edrxpict.lua"  -- (find-LATEX "edrxpict.lua")
% \pu


\title{Typing the Pullback Lemmas}
\author{Eduardo Ochs}

The first Pullback Lemma states that if the squares $\sm{AB\\DE}$ and
$\sm{BC\\EF}$ in the diagram below
%D diagram PB0
%D 2Dx     100 +20 +20 +20
%D 2D  100 X
%D 2D
%D 2D  +20     A   B   C
%D 2D
%D 2D  +20     D   E   F
%D 2D
%D (( A B ->
%D    B C ->
%D    A D ->
%D    B E ->
%D    C F ->
%D    D E ->
%D    E F ->
%D    X A ->
%D    X C ->
%D    X D ->
%D ))
%D enddiagram
are pullbacks then the rectangle obtained by glueing them together,
$\sm{A{-}C\\D{-}F}$, is also a pullback. I don't know any place in the
literature where this is proved in detail; its proof usually left as
an exercise (for example, in \cite{CWM2}, III.4.8), or said to be a
simple diagram chase (\cite{Awodey}, Lemma 5.10). Here we will see how
to prove that in a Type System {\sl starting by its syntactical
  skeleton} --- a trick explained in section 12 and 19 of


Let's fix our terminology. We are in a category $\catC$ --- we won't
need to consider other categories --- and our arrows will be named
like this:
%D diagram PB1
%D 2Dx     100 +25 +25 +25
%D 2D  100 X
%D 2D
%D 2D  +25     A   B   C
%D 2D
%D 2D  +25     D   E   F
%D 2D
%D (( A B -> .plabel= b f_{AB}
%D    B C -> .plabel= b f_{BC}
%D    A D -> .plabel= m f_{AD}
%D    B E -> .plabel= m f_{BE}
%D    C F -> .plabel= m f_{CD}
%D    D E -> .plabel= b f_{DE}
%D    E F -> .plabel= b f_{EF}
%D    X A -> .plabel= m g_{A}
%D    X C -> .plabel= a g_{C}
%D    X D -> .plabel= l g_{D}
%D ))
%D enddiagram
The arrows $g_B$, $g_E$, and $g_F$ are not shown, and at some points
of the proof we will need arrows $h_A:X→A$ and $h_B:X→B$.

$\PB1$ is the statement that the left square $\sm{AB\\DE}$ is a
pullback, $\PB2$ the statement that right square $\sm{BC\\EF}$ is a
pullback, and $\PB3$ the statement that the outer rectangle is a
pullback. Formally, $\PB1$ is:


\item The square $\sm{AB\\DE}$ commutes,

\item For every pair of arrows $(g_B,g_D)$ such that the
  quadrillateral $\sm{XB\\DE}$ commutes there is a unique arrow $g_A$
  that makes everything commute.


Let's create some abbreviations. $\Wd[A→E]$ means that we have two
``natural constructions'' for arrows of type $A→E$, and these two
natural constructions yield the same result. The pronounciation of
``$\Wd[A→E]$'' is ``the arrow from $A$ to $E$ is well-defined''.
$\good(g_A)$ means $(g_A;f_{AB})=g_B$ and $(g_A;f_{AD})=g_D$;
$\good(h_A)$ means $(h_A;f_{AB})=h_B$ and $(h_A;f_{AD})=h_D$; and
$\unique(g_A)$ means $∀h_A:X→A.(\good(h_A) → (g_A=h_A))$. We can now
express $\PB1$ in a more type-theoretical style as:


\item $\Wd[A→E]$ plus:

\item an operation that receives a (dependent) tuple
  $(g_B,g_D,\Wd[X→B],\Wd[X→D])$ and returns a tuple $(g_A, \good(g_A),


We can type all that as:
  \Wd[A→E] &:& ((f_{AB};f_{BE}) = (f_{AB};f_{BE})) \\
         X &:& |\catC| \\
       g_B &:& X→B  \\
       g_D &:& X→D  \\
  \Wd[X→B] &:& ((g_A;f_{AB}) = g_B) \\
  \Wd[X→D] &:& ((g_A;f_{AD}) = g_D) \\

$\Wd[A→E] : ((f_{AB};f_{BE}) = (f_{AB};f_{BE}))$

Hi Robert!

How are things? Long time no see/hear/read/write...

Sorry for disappearing for so long - the reason was the usual one: my
personal life was a total mess, I wasn't publishing enough, my
self-esteem was at abyssal levels, and in these situations we tend to
hide until things get much, much, much better...

Anyway, a few years ago I found a niche in which I could produce
material that lots of people found interesting, and I could get enough
feedback on it and even present it at lots of places and even organize
workshops on it (yaaaay!!!) - 

% (find-books "__cats/__cats.el" "ochs")

% (find-awodeyctpage (+ 10 84) "Lemma 5.10. (Two-pullbacks)")
% (find-awodeycttext (+ 10 84) "Lemma 5.10. (Two-pullbacks)")
% (find-cwm2page (+ 9 76) "If both squares are pullbacks,")
% (find-cwm2text (+ 9 76) "If both squares are pullbacks,")



%  __  __       _        
% |  \/  | __ _| | _____ 
% | |\/| |/ _` | |/ / _ \
% | |  | | (_| |   <  __/
% |_|  |_|\__,_|_|\_\___|
% «make»  (to ".make")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
make -f 2019.mk STEM=2020pullback-lemmas veryclean
make -f 2019.mk STEM=2020pullback-lemmas pdf

% Local Variables:
% coding: utf-8-unix
% ee-tla: "pbl"
% End: