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

% «.title»			(to "title")
% «.freyd»			(to "freyd")
% «.variants»			(to "variants")
% «.pullbacks»			(to "pullbacks")
% «.formalizing-pullback»	(to "formalizing-pullback")
% «.propositions-as-types»	(to "propositions-as-types")
% «.my-variant»			(to "my-variant")
% «.nd-dep-types»		(to "nd-dep-types")
% «.make»			(to "make")

\documentclass[oneside,12pt]{article}
\usepackage[colorlinks,citecolor=DarkRed,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref")
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{stmaryrd}
\usepackage{pict2e}
\usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor")
%\usepackage{colorweb}                 % (find-es "tex" "colorweb")
%\usepackage{tikz}
%
% (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")
%
\usepackage[backend=biber,
   style=alphabetic]{biblatex}            % (find-es "tex" "biber")
%\addbibresource{catsem-u.bib}            % (find-LATEX "catsem-u.bib")
\addbibresource{2020on-a-broken-dnc.bib}  % (find-LATEX "catsem-u.bib")
%
% (find-es "tex" "geometry")
\begin{document}

\catcode`\^^J=10
\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»  (to ".title")

\title{On a (broken) system of Natural Deduction for Categories}
\author{Eduardo Ochs}
\maketitle







One of the things that I intended to do in my PhD thesis was to
formalize a certain system of Natural Deduction for Categories that I
was using quite happily at the time as a mathematical hack, even
though I only had some of its rules --- for example, it had rules with
discharges, similar to the $({→}I)$ of Natural Deduction, that could
be used to define functors and natural transformations...

That system --- I called it ``System DNC'', for ``Dedução Natural para
Categorias'', in Portuguese --- turned out to be too hard to
formalize, and it ended up as a secondary theme in the thesis. It took
me several years more to see how System DNC could be used in a formal
way even if it was incompletely defined; the paper \cite{IDARCT}
is about that.

What I am going to present in these notes is a much better version of
DNC than the one that is sketched (briefly!) in \cite{IDARCT}. Here we
will replace the ``downcased types'' of Section 3 of the paper by some
ideas taken from the ``Logic for Children'' project (\cite{PH1},
\cite{LFC2018}) --- namely, that we can use



%  _____                   _ 
% |  ___| __ ___ _   _  __| |
% | |_ | '__/ _ \ | | |/ _` |
% |  _|| | |  __/ |_| | (_| |
% |_|  |_|  \___|\__, |\__,_|
%                |___/       
%
% «freyd»  (to ".freyd")
% (dnop 2 "freyd")
% (dno    "freyd")

\section{Freyd's diagrammatic language}

When I started learning Category Theory the library of my university
had very few books on that subject. One of them was a collection of papers
in honour of Sammy Eilenberg that contained a paper by Peter Freyd
called ``Properties Invariant within Equivalence Types of Categories''
(\cite{Freyd76}), that presented a diagrammatic language for
statements in CT; I found it absolutely fascinating. There's a scanned
copy of it here:

\msk

\url{http://angg.twu.net/scans/freyd76__properties_invariant_within_equivalence_types_of_categories.pdf}

\msk

Its diagrammatic language later became the basis for Freyd's book with
Scedrov, ``Categories, Allegories'' (\cite{FreydScedrov}). Let me show
briefly how that language works. This is the statement that a category
has equalizers:
%
%L forths["-"] = function () pusharrow("-") end
%
%D diagram cat-has-equalizers
%D 2Dx     100 +00   +15   +20 +15 +15   +20   +20 +15 +15   +20   +20 +15 +15   +20   +20
%D 2D  100 U0                  U1                  U2                  U3                 
%D 2D       |                   |                   |                   |                 
%D 2D  +10  |  A0               |  B0               |  C0               |  D0             
%D 2D       |  |  \             |  |  \             |  |  \             |  |  \           
%D 2D  +20  |  A1 -- A2 == A3   |  B1 -- B2 == B3   |  C1 -- C2 == C3   |  D1 -- D2 == D3 
%D 2D       |                   |                   |                   |                 
%D 2D  +20 L0                  L1                  L2                  L3                 
%D 2D
%D ren U0 L0 A0 A1 A2 A3 ==> ∀  {} X E A B
%D ren U1 L1 B0 B1 B2 B3 ==> ∃  {} X E A B
%D ren U2 L2 C0 C1 C2 C3 ==> ∀  {} X E A B
%D ren U3 L3 D0 D1 D2 D3 ==> ∃! {} X E A B
%D
%D (( U0 L0 -
%D    A2 A3 -> sl^^ .plabel= a f
%D    A2 A3 -> sl__ .plabel= b g
%D    A2 A3 midpoint .TeX= * place
%D ))
%D (( U1 L1 -
%D    B2 B3 -> sl^^ .plabel= a f
%D    B2 B3 -> sl__ .plabel= b g
%D    B2 B3 midpoint .TeX= * place
%D    B1 B2 -> .plabel= b e
%D ))
%D (( U2 L2 -
%D    C2 C3 -> sl^^ .plabel= a f
%D    C2 C3 -> sl__ .plabel= b g
%D    C2 C3 midpoint .TeX= * place
%D    C1 C2 -> .plabel= b e
%D    C0 C2 -> .plabel= r h
%D ))
%D (( U3 L3 -
%D    D2 D3 -> sl^^ .plabel= a f
%D    D2 D3 -> sl__ .plabel= b g
%D    D2 D3 midpoint .TeX= * place
%D    D1 D2 -> .plabel= b e
%D    D0 D2 -> .plabel= r h
%D    D0 D1 -> .plabel= l k
%D ))
%D enddiagram
%D
$$\pu
  \scalebox{0.8}{$
  \diag{cat-has-equalizers}
  $}
$$

It means: for all diagrams of the shape [first subdiagram] in our
category there exists an extension of it to [second subdiagram] such
that for all extensions of it to [third subdiagram] there exists a
unique extension of it to [fourth subdiagram].

% (find-books "__cats/__cats.el" "freyd76")
% (find-books "__cats/__cats.el" "freyd-scedrov")

More formally (see \cite[p.28 onwards]{Freyd76}):

\msk

For all $f,g$ such that $□f=□g$, $f□=g□$,

there exists $e$ such that $e□=□f$, $ef=eg$, such that

for all $h$ such that $h□=e□$,

there exists a unique $h$ such that $□k=□h$, $k□=□e$, $ke=e$.

\msk

The default is for all cells to commute; non-commuting cells are
marked with a `$*$'. After the first few diagrams in the book the
objects are morphism stop being named, and the diagrams become like
this:
%
%D diagram cat-has-equalizers-2
%D 2Dx     100 +00   +15   +20 +15 +15   +20   +20 +15 +15   +20   +20 +15 +15   +20   +20
%D 2D  100 U0                  U1                  U2                  U3                 
%D 2D       |                   |                   |                   |                 
%D 2D  +10  |  A0               |  B0               |  C0               |  D0             
%D 2D       |  |  \             |  |  \             |  |  \             |  |  \           
%D 2D  +20  |  A1 -- A2 == A3   |  B1 -- B2 == B3   |  C1 -- C2 == C3   |  D1 -- D2 == D3 
%D 2D       |                   |                   |                   |                 
%D 2D  +20 L0                  L1                  L2                  L3                 
%D 2D
%D ren U0 L0 A0 A1 A2 A3 ==> ∀  {}    
%D ren U1 L1 B0 B1 B2 B3 ==> ∃  {}    
%D ren U2 L2 C0 C1 C2 C3 ==> ∀  {}    
%D ren U3 L3 D0 D1 D2 D3 ==> ∃! {}    
%D
%D (( U0 L0 -
%D    A2 A3 -> sl^^ # .plabel= a f
%D    A2 A3 -> sl__ # .plabel= b g
%D    A2 A3 midpoint .TeX= * place
%D ))
%D (( U1 L1 -
%D    B2 B3 -> sl^^ # .plabel= a f
%D    B2 B3 -> sl__ # .plabel= b g
%D    B2 B3 midpoint .TeX= * place
%D    B1 B2 -> # .plabel= b e
%D ))
%D (( U2 L2 -
%D    C2 C3 -> sl^^ # .plabel= a f
%D    C2 C3 -> sl__ # .plabel= b g
%D    C2 C3 midpoint .TeX= * place
%D    C1 C2 -> # .plabel= b e
%D    C0 C2 -> # .plabel= r h
%D ))
%D (( U3 L3 -
%D    D2 D3 -> sl^^ # .plabel= a f
%D    D2 D3 -> sl__ # .plabel= b g
%D    D2 D3 midpoint .TeX= * place
%D    D1 D2 -> # .plabel= b e
%D    D0 D2 -> # .plabel= r h
%D    D0 D1 -> # .plabel= l k
%D ))
%D enddiagram
%D
$$\pu
  \scalebox{0.8}{$
  \diag{cat-has-equalizers-2}
  $}
$$
%
and gradually several kinds of arrows and other symbols are
introduced, to mean ``this arrow is monic'', ``this arrow is epi'',
``this square is a pullack'' and so on.


% __     __         _             _       
% \ \   / /_ _ _ __(_) __ _ _ __ | |_ ___ 
%  \ \ / / _` | '__| |/ _` | '_ \| __/ __|
%   \ V / (_| | |  | | (_| | | | | |_\__ \
%    \_/ \__,_|_|  |_|\__,_|_| |_|\__|___/
%                                         
% «variants»  (to ".variants")
% (dnop 3 "variants")
% (dno     "variants")

\subsection{Variants of Freyd's language}

I started to use variants of these diagrams to study MacLane's
\cite{CWM} (that I found {\sl very} hard). To reduce redundancy, I
experimented with several ways to indicate in which stage each new
entity is introduced. For example, this:
%
%D diagram equalizer-big-1
%D 2Dx     100   +20   +20
%D 2D  100 A0             
%D 2D      |  \           
%D 2D  +20 A1 -- A2 == A3 
%D 2D
%D ren A0 A1 A2 A3 ==> X E A B
%D ren A0 A1 A2 A3 ==>    
%D
%D (( A2 A3 -> sl^^ # .plabel= a f
%D    A2 A3 -> sl__ # .plabel= b g
%D    A2 A3 midpoint .TeX= * place
%D    A1 A2 -> .plabel= b ∃_1
%D    A0 A2 -> .plabel= r ∀_2
%D    A0 A1 -> .plabel= l ∃!_3
%D ))
%D enddiagram
%D
$$\pu
  \scalebox{2}{$
  \diag{equalizer-big-1}
  $}
$$

Also, the ``equalizerness'' of the arrow $e$, that we are expressing
as $∀h\,∃!k$, can be re-expressed as an operation $φ$ that expects an
arrow $h$ and returns an arrow $k$:
%
%D diagram equalizer-big-2
%D 2Dx     100 +15 +15   +30
%D 2D  100 A0             
%D 2D      |  \           
%D 2D  +15 M0  M1           
%D 2D      |     \           
%D 2D  +15 A1 ---- A2 == A3 
%D 2D
%D ren A0 A1 A2 A3 ==> X E A B
%D ren A0 A1 A2 A3 ==>    
%D ren M0 M1 ==> {} {}
%D
%D (( A2 A3 -> sl^^ .plabel= a f
%D    A2 A3 -> sl__ .plabel= b g
%D    A2 A3 midpoint .TeX= * place
%D    A1 A2 -> .plabel= b e
%D    A0 A2 -> .plabel= r h
%D    A0 A1 -> .plabel= l k
%D
%D    M0 M1 harrownodes nil 17 nil <- .plabel= b φ
%D ))
%D enddiagram
%D
$$\pu
  \scalebox{1.5}{$
  \diag{equalizer-big-2}
  $}
$$

There is also a much more natural operation, $♮$, that takes a $k$,
composes it with $e$, and returns $h$. We can draw them at the same
time --- and by doing that it becomes clear that ``equalizerness'' in
this case can be translated to ``$♮$ is invertible''. In a diagram:
%
%D diagram equalizer-big-3
%D 2Dx     100 +18 +12   +30
%D 2D  100 A0             
%D 2D      |  \           
%D 2D  +18 M0  M1           
%D 2D      |     \           
%D 2D  +12 A1 ---- A2 == A3 
%D 2D
%D ren A0 A1 A2 A3 ==> X E A B
%D ren A0 A1 A2 A3 ==>    
%D ren M0 M1 ==> {} {}
%D
%D (( A2 A3 -> sl^^ .plabel= a f
%D    A2 A3 -> sl__ .plabel= b g
%D    A2 A3 midpoint .TeX= * place
%D    A1 A2 -> .plabel= b e
%D    A0 A2 -> .plabel= r h
%D    A0 A1 -> .plabel= l k
%D
%D    M0 M1 harrownodes nil 17 nil -> sl^ .plabel= a ♮
%D    M0 M1 harrownodes nil 17 nil <- sl_ .plabel= b φ
%D ))
%D enddiagram
%D
$$\pu
  \scalebox{1.5}{$
  \diag{equalizer-big-3}
  $}
$$

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

\subsection{An example: pullbacks}

Let's look at another example. ``Pullbackness'' for the square
%
%D diagram PB-0
%D 2Dx     100 100 +20
%D 2D  100 X
%D 2D        \
%D 2D  100     A > B
%D 2D          v   v
%D 2D  +20     C > D
%D 2D
%D # ren ==>
%D
%D (( A B -> A C -> B D -> C D ->
%D ))
%D enddiagram
%D
%D diagram PB-1
%D 2Dx     100 100 +20
%D 2D  100 X
%D 2D        \
%D 2D  100     A > B
%D 2D          v   v
%D 2D  +20     C > D
%D 2D
%D # ren ==>
%D
%D (( A B -> A C -> B D -> C D ->
%D    A relplace 6 6 \pbsymbol{7}
%D ))
%D enddiagram
%D
\pu
$$\diag{PB-1}
$$
%
means that the operation $♮$ that receives an arrow $X→A$ and returns
arrows $X→B$ and $X→C$ making everything commute has an inverse, $φ$.
If we draw $♮$ and $φ$ showing only the arrows that extend the square
diagrams, we get:
%
%D diagram PB-2
%D 2Dx     100 +15 +20
%D 2D  100 X
%D 2D        \
%D 2D  +15     A > B
%D 2D          v   v
%D 2D  +20     C > D
%D 2D
%D ren D ==> \phantom{D}
%D
%D (( X A -> D place
%D ))
%D enddiagram
%D
%D diagram PB-3
%D 2Dx     100 +15 +20
%D 2D  100 X
%D 2D        \
%D 2D  +15     A > B
%D 2D          v   v
%D 2D  +20     C > D
%D 2D
%D ren D ==> \phantom{D}
%D
%D (( X B -> X C -> D place
%D ))
%D enddiagram
%D
\pu
$$\left(\diag{PB-2}\right)
  \two/->`<-/<250>^♮_φ
  \left(\diag{PB-3}\right)
$$

The mnemonics are: `$♮$' stands for ``natural'', `$φ$' for
``factorization''.

The full definition of a pullback in my variation of Freyd's language
is:
%
$$\begin{array}{l}
  \diag{PB-1} \;\; := \\ \\ 
  (\diag{PB-0}, \;\; ∀X.
     \left(\diag{PB-2}\right)
     \two/->`<-/<250>^♮_φ
     \left(\diag{PB-3}\right)
  )
  \end{array}
$$

In English, this is:

\msk

A pullback $\sm{AB\\CD}$ is:

a pair made of a commutative square $\sm{AB\\CD}$ plus:

for all objects $X$ in our category, an inverse for the natural operation

that receives an arrow $X→A$ and returns arrows $X→B$ and $X→C$

[I'm leaving some commutativities implicit].

\bsk

I found that that diagrammatic language was easy to translate to a
formal, first-order language, and I also found something that made me
really ecstatic. Let me explain it in three steps.

\begin{itemize}

\item For me Category Theory, when done diagrammatically, has a
  ``fun'' part, that is made of {\sl diagrams} and {\sl
  constructions}, and a ``boring'' part, that is made of {\sl
  verifying equations} --- and I believe that when we don't have the
  diagrams we have to start by drawing them. See the idea of ``missing
  diagrams'' in \cite{SMDE}.

\item Category Theory is intrinsically dependently typed, and when we
  type things correctly many constructions become almost automatic ---
  because there is essentially only one way to build the result with
  the expected type from our inputs... so it's worthwhile to formalize
  our categorical constructions using Type Theory instead of Set
  Theory.

\item When I expressed categorical concepts using my variation of
  Freyd's diagrammatical language and then translated them to Type
  Theory the ``boring'' part became clearly separated from the ``fun''
  part. The ``boring'' part always lies in the last components of the
  tuples, and it is possible to define an operation that ``projects it
  out''.

\end{itemize}

A good part of the paper \cite{IDARCT} is dedicated to sketch how we
can split categorical constructions and proofs into a ``fun'' part
that we can do first, and we can leave all the ``boring'' part to a
second stage --- or we can wave our hands and leave that second part
to the reader as homework.


%  _____               _ _ _                _    
% |  ___|  _ __  _   _| | | |__   __ _  ___| | __
% | |_    | '_ \| | | | | | '_ \ / _` |/ __| |/ /
% |  _|   | |_) | |_| | | | |_) | (_| | (__|   < 
% |_|     | .__/ \__,_|_|_|_.__/ \__,_|\___|_|\_\
%         |_|                                    
%
% «formalizing-pullback»  (to ".formalizing-pullback")

\section{Formalizing the pullback}



%  ____                                    _                         
% |  _ \ _ __ ___  _ __  ___    __ _ ___  | |_ _   _ _ __   ___  ___ 
% | |_) | '__/ _ \| '_ \/ __|  / _` / __| | __| | | | '_ \ / _ \/ __|
% |  __/| | | (_) | |_) \__ \ | (_| \__ \ | |_| |_| | |_) |  __/\__ \
% |_|   |_|  \___/| .__/|___/  \__,_|___/  \__|\__, | .__/ \___||___/
%                 |_|                          |___/|_|              
%
% «propositions-as-types»  (to ".propositions-as-types")

\section{Propositions as Types}

\def\prf#1{\llangle#1\rrangle}
\def\Typ#1{\llbracket#1\rrbracket}

Let me show a notation that I find quite convenient for working with
propositions-as-types. The type associated to a proposition $P$ is
written as $\Typ{P}$; $\Typ{P}$ is an empty set when $P$ is false, and
a singleton set when $P$ is true. A proof, or witness, of $P$ is
written as $\prf{P}$, and we have $\prf{P}:\Typ{P}$. The meaning of
each ``$\prf{·}$'' depends on the context, and is given by a
dictionary. For example:




%  __  __                         _             _   
% |  \/  |_   _  __   ____ _ _ __(_) __ _ _ __ | |_ 
% | |\/| | | | | \ \ / / _` | '__| |/ _` | '_ \| __|
% | |  | | |_| |  \ V / (_| | |  | | (_| | | | | |_ 
% |_|  |_|\__, |   \_/ \__,_|_|  |_|\__,_|_| |_|\__|
%         |___/                                     
%
% «my-variant»  (to ".my-variant")

\section{My variant of Freyd's language}





\bsk

wave our hands 


After a working a bit with that variation of Freyd's diagrammatic
language, I realized that this definition of a pullback





\section{ND as a formal system}

Curry-Howard

Erasing and reconstructing

Terms as trees

\section{ND as a sloppy system}

Derived rules

Context

Double bars

omitted terms

omitted types

splitting big trees

% (idap 19 "pres-frob-bcc")
% (ida     "pres-frob-bcc")

% «nd-dep-types»  (to ".nd-dep-types")

\section{ND for dependent types}

% (ntyp 89 "pure-type-systems")
% (nty     "pure-type-systems")


\section{Frobenius}

% (find-books "__cats/__cats.el" "lawvere-equahyp")
% (find-lawvereequahyppage 6 "(1) Frobenius Reciprocity holds")
% (find-lawvereequahyptext 6 "(1) Frobenius Reciprocity holds")

% (hypp 11 "preservation-of-imp")
% (hyp     "preservation-of-imp")


%D diagram pres-imp-implies-frob
%D 2Dx     100 +40 +35 +25 +25 +35 +30
%D 2D  100 A0  A1      A3      A5  A6
%D 2D
%D 2D  +25 B0  B1  B2      B4  B5  B6
%D 2D
%D ren A0 A1   A3   A5 A6  ==> Σ_f(P{∧}f^*Q) P{∧}f^*Q P Σ_fP Σ_fP{∧}Q
%D ren B0 B1 B2  B4 B5 B6  ==> R f^*R (f^*Q{→}f^*R) f^*(Q{→}R) Q{→}R R
%D
%D (( A0 B0 ->
%D    A1 B1 ->
%D    A3 B2 ->
%D    A3 B4 ->  B2 B4 <->
%D    A5 B5 ->
%D    A6 B6 ->
%D    
%D    A0 B1 harrownodes nil 20 nil <->
%D    A1 B1 midpoint A3 B2 midpoint harrownodes nil 20 nil <->
%D    A3 B4 midpoint A5 B5 midpoint harrownodes nil 20 nil <->
%D    A5 B6 harrownodes nil 20 nil <->
%D
%D ))
%D enddiagram
%D
$$\pu
  \diag{pres-imp-implies-frob}
$$

%D diagram frob-implies-pres-imp
%D 2Dx     100 +20 +20 +20 +20 +20 +20
%D 2Dx     100 +40 +35 +25 +25 +35 +30
%D 2D  100 A0  A1  A2      A4  A5  A6
%D 2D
%D 2D  +25 B0  B1      B3      B5  B6
%D 2D
%D ren A0 A1 A2  A4 A5 A6  ==> P  P{∧}f^*Q  Σ_f(P{∧}f^*Q) Σ_fP∧Q  Σ_fP  P
%D ren B0 B1   B3   B5 B6  ==> (f^*Q{→}f^*R) f^*R R Q{→}R f^*(Q{→}R) 
%D
%D (( A0 B0 ->
%D    A1 B1 ->
%D    A2 B3 ->
%D    A4 B3 ->  A2 A4 <->
%D    A5 B5 ->
%D    A6 B6 ->
%D    
%D    A0 B1 harrownodes nil 20 nil <->
%D    A1 B1 midpoint A2 B3 midpoint harrownodes nil 20 nil <->
%D    A4 B3 midpoint A5 B5 midpoint harrownodes nil 20 nil <->
%D    A5 B6 harrownodes nil 20 nil <->
%D
%D ))
%D enddiagram
%D
$$\pu
  \diag{frob-implies-pres-imp}
$$


\section{Yoneda}

\def\ren{\text{ren}}
\def→{{\to}}

%:
%:
%:                           [:C→D]^2  [:D→E]^3
%:                           ------------------
%:                              :C→E
%:                          ------------2
%:                          :(C→D)→(C→E)
%:                       -------------------3
%:   C:  [D:]^1          :(D→E)→((C→D)→(C→E))
%:   ----------        -----------------------
%:     C→D:            :ΠD.(D→E)→((C→D)→(C→E))
%:   -------         --------------------------
%:   λD.C→D:         :ΠD.ΠE.(D→E)→((C→D)→(C→E))
%:   -------\ren     --------------------------\ren
%:   (C→\_)_0:              (C→\_)_1:
%:   --------------------------------
%:            (C→\_):
%:
%:            ^C->_
%:
%:
$$\pu
  \ded{C->_}
$$


%:
%:
%:                                  [:D→E]^3
%:                                  ------
%:                       [:A→RD]^2  :RD→RE
%:                       -----------------
%:                               :A→RE
%:                          --------------2
%:   [D:]^1                 :(A→RD)→(A→RE)
%:   ------             ----------------------3
%:    RD:               :(D→E)→((A→RD)→(A→RE))
%:   -----             -------------------------
%:   A→RD:             :ΠE.(D→E)→((A→RD)→(A→RE))
%:   --------        ----------------------------
%:   ∧D.A→RD:        :ΠD.ΠE.(D→E)→((A→RD)→(A→RE))
%:   --------\ren    ---------------------------\ren
%:   (A→R\_)_0:            (A→R\_)_1:
%:   --------------------------------
%:              (A→R\_):
%:
%:              ^A->R_
%:
%:
$$\pu
  \ded{A->R_}
$$


%:
%:                [:C→D]^1
%:                --------
%:    [:A→RC]^2    :RC→RD
%:    -------------------
%:            :A→RD
%:       -------------1
%:       :(C→D)→(A→RD)
%:     ----------------
%:     :ΠD.(C→D)→(A→RD)           C:    C:   [:(C→\_)→(A→R\_)]^2
%:     ------------------\ren    ----   ----------------------
%:     ((C→\_)→(A→R\_))_0:       :C→C   :(C→C)→(A→RC)
%:     -------------------       ------------
%:     :(C→\_)→(A→R\_)             :A→RC
%:     ---------------------------------2
%:        :(A→RC)↔((C→\_)→(A→R\_))
%:
%:        ^yoneda0-bij
%:
$$\pu
  \ded{yoneda0-bij}
$$



\newpage


\printbibliography




\end{document}

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

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-LATEXfile "2019planar-has-1.mk")
make -f 2019.mk STEM=2020on-a-broken-dnc veryclean
make -f 2019.mk STEM=2020on-a-broken-dnc pdf

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