Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
% (find-angg "LATEX/2002fmcs.tex") % (find-dn4ex "edrx08.sty") % (find-angg ".emacs.templates" "s2008a") % (defun c () (interactive) (find-zsh "cd ~/LATEX/ && ~/dednat4/dednat41 2002fmcs.tex && latex 2002fmcs.tex")) % (defun c () (interactive) (find-zsh "cd ~/LATEX/ && ~/dednat4/dednat41 2002fmcs.tex && pdflatex 2002fmcs.tex")) % (eev "cd ~/LATEX/ && Scp 2002fmcs.{dvi,pdf} edrx@angg.twu.net:slow_html/LATEX/") % (find-dvipage "~/LATEX/2002fmcs.dvi") % (find-pspage "~/LATEX/2002fmcs.pdf") % (find-zsh0 "cd ~/LATEX/ && dvips -D 300 -o 2002fmcs.ps 2002fmcs.dvi") % (find-pspage "~/LATEX/2002fmcs.ps") % (find-zsh0 "cd ~/LATEX/ && dvips -D 300 -o tmp.ps tmp.dvi") % (find-pspage "~/LATEX/tmp.ps") % «.toc» (to "toc") % «.abstract» (to "abstract") % «.motivation-1» (to "motivation-1") % «.sketch-of-solution» (to "sketch-of-solution") % «.GP» (to "GP") % «.functor-NT-in-GP» (to "functor-NT-in-GP") % «.Yoneda-proof» (to "Yoneda-proof") % «.Yoneda-proof-2» (to "Yoneda-proof-2") % «.adjs-as-DNC-diags» (to "adjs-as-DNC-diags") % «.intro-CC-1» (to "intro-CC-1") % «.preterms-and-prejudgs» (to "preterms-and-prejudgs") % «.naive-semantics» (to "naive-semantics") % «.intro-CC-2» (to "intro-CC-2") % «.rules-CC» (to "rules-CC") % «.some-facts-about-CC» (to "some-facts-about-CC") % «.more-facts-about-CC» (to "more-facts-about-CC") % «.CC-to-CCMC-and-back» (to "CC-to-CCMC-and-back") % «.CC-to-CCMC-and-back-2» (to "CC-to-CCMC-and-back-2") % «.props-and-proofs-in-CC» (to "props-and-proofs-in-CC") % «.terms-for-equality» (to "terms-for-equality") % «.protocategories» (to "protocategories") % «.protocategories-sets» (to "protocategories-sets") % «.protocategories-generic» (to "protocategories-generic") % «.DNC-rules» (to "DNC-rules") % «.DNC-rules-funtoI» (to "DNC-rules-funtoI") % «.DNC-rules-tntoI» (to "DNC-rules-tntoI") % «.future-work» (to "future-work") % «.before-SN-for-DNC» (to "before-SN-for-DNC") % «.notes-about-slides» (to "notes-about-slides") \documentclass[oneside]{book} \usepackage[latin1]{inputenc} \usepackage{edrx08} % (find-dn4ex "edrx08.sty") %L process "edrx08.sty" -- (find-dn4ex "edrx08.sty") \input edrxheadfoot.tex % (find-dn4ex "edrxheadfoot.tex") \begin{document} \input 2002fmcs.dnt %* % (eedn4-51-bounded) Index of the slides: \msk % To update the list of slides uncomment this line: \makelos{tmp.los} % then rerun LaTeX on this file, and insert the contents of "tmp.los" % below, by hand (i.e., with "insert-file"): % (find-fline "tmp.los") % (insert-file "tmp.los") \tocline {Abstract} {2} \tocline {Motivation} {3} \tocline {Sketch of the solution} {4} \tocline {The ``generic point'' notation} {5} \tocline {Functors and NTs in this notation} {6} \tocline {The proof of the Yoneda Lemma in DNC} {7} \tocline {The proof of the Yoneda Lemma in DNC (2)} {8} \tocline {Adjunctions as DNC diagrams} {9} \tocline {Introduction to the Calculus of Constructions (1)} {10} \tocline {Pre-terms and pre-judgements} {11} \tocline {Naive semantics: $\lambda $ and $\Pi $} {12} \tocline {Introduction to CC (2) - example of a valid derivation} {13} \tocline {The rules of the Calculus of Constructions} {14} \tocline {Some facts (i.e., theorems) about CC} {15} \tocline {More facts about CC: ``classes'' of terms, variations of the rules} {16} \tocline {From CC with minimal contexts to ND and back} {17} \tocline {From CC with minimal contexts to ND and back (2)} {18} \tocline {Representing propositions and proofs in CC} {19} \tocline {Terms for equality} {20} \tocline {Protocategories} {21} \tocline {A very special example: $\Set $ as a $ñÞ$-protocategory} {22} \tocline {A typical $\Box Þ$-protocategory} {23} \tocline {System DNC: rules} {24} \tocline {System DNC: $(\Rightarrow I)$, example} {25} \tocline {System DNC: $(\tnto I)$, example} {26} \tocline {Future work} {27} \tocline {What comes before studying SN for DNC} {28} \tocline {Notes for people downloading these slides} {29} % (eedn4a-bounded) \def\lambdaC{ð¦{C}} \defå{\Pi} \def\CCMC{\text{CC}_\text{MC}} \widemtos %%%%% % % «toc» (to ".toc") % %%%%% {\bf Table of Contents} \medskip \smallskip \bigskip Don't believe any idea here that you can't figure out the details yourself, or you've seen it stated in serious articles written by grown-ups. These notes contain unintentional errors and omissions. Feedback is not only welcome but also desperately needed. Etc, Etc. \medskip Eduardo Ochs {\tt http://angg.twu.net/} {\tt http://www.mat.puc-rio.br/\~{}edrx/} {\tt edrx@inx.com.br} \bigskip Note: I'm currently at McGill university, as a visitor --- I'm doing a ``sandwich PhD'' (really!) thanks to a CAPES ({\tt http://www.capes.gov.br/}) grant... \newpage \def\:{{:}} \def¸{\mto} \def\ssapp#1#2{(#1,#2)\text{-app}} \def\ssabs#1#2{(#1,#2)\text{-abs}} \def\tstart{Þ\text{-start}} \def\kstart{ñ\text{-start}} \def\cat{{{cat}}} \def\deg{{¦{deg}}} \def\prop{{¦{prop}}} \def\e{{e}} \def\ang#1{\langle #1 \rangle} \def\sqto{\rightsquigarrow} \def\sqbij{\leftrightsquigarrow} % \def\dicto{\rightsquigarrow} \def\dicto{\dashrightarrow} \def\smallpb#1#2#3{ \begin{smallmatrix} & & #1 \mathstrut \\ & & \downarrow \\ #2 & \to & #3 \mathstrut \\ \end{smallmatrix} } \def\Orders{\text{Orders}} \def\Types{\text{Types}} \def\Lam{\Lambda} \def\Vee{¦V} \def\Prod{\Pi} \def\Sum{\Sigma} \def\Theory{\mathcal{T}} \def\Obj{{\operatorname{Obj}}} \def\Objs{{\operatorname{Objs}}} \def\Homsets{{\operatorname{Homsets}}} \def\Props{{\operatorname{Props}}} \def\prop{{\operatorname{prop}}} \def\prf{{\operatorname{prf}}} \widemtos \catcode`Ð=13 \defÐ{\vec} % pe \def\slice#1#2{\begin{pmatrix} #1 \\ \dnto \\ #2 \end{pmatrix}} \def\eslice#1#2{\begin{pmatrix} #1 \\ \dnto \\ #2 \end{pmatrix}} % should be ÷> \def\clm#1#2{{#1{\text-}#2}} \def\GG{\Gamma} %:*->^*\ton * % %:*ˆ->*\ito * % %:*-.>*\tnto * % %:*=>*\funto * % %:*<->*\bij * % %:*->*\to * % %:*[s]*{[s]}* % %:*|-*\vdash * % %:*÷>*\mto * % %:*"* * % \newpage % -------------------- % «abstract» (to ".abstract") % (s "Abstract" "abstract") \myslide {Abstract} {abstract} (For the FMCS talk) We will present a logic (system DNC) whose terms represent categories, objects, morphisms, functors, natural transformations, sets, points, and functions, and whose rules of deduction represent certain constructive operations involving those entities. Derivation trees in this system only represent the ``T-part'' (for ``terms'' and ``types'') of the constructions, not the ``P-part'' (``proofs'' and ``propositions''): the rules that generate functors and natural transformations do not check that they obey the necessary equations. So, we can see derivations in this system either as constructions happening in a ``syntactical world'', that should be related to the ``real world'' in some way (maybe through meta-theorems that are yet to be found), or as being just ``skeletons'' of the real constructions, with the P-parts having been omitted for briefness. Even though derivations in DNC tell only half of the story, they still have a certain charm: DNC terms represent ``types'', but a tree represents a construction of a lambda-calculus term; there's a Curry-Howard isomorphism going on, and a tree can be a visual help for understanding how the lambda-calculus term works --- how the data flows inside a given categorical construction. Also, if we are looking for a categorical entity of a certain ``type'' we can try to express it as a DNC term, and then look for a DNC ``deduction'' having it as its ``conclusion''; the deduction will give us a T-part, and we will still have to go back to the standard language to supply a P-part, but at least the search has been broken in two parts... The way to formalize DNC, and to provide a translation between terms in its ``logic'' and the usual notations for Category Theory, is based on the following idea. Take a derivation tree $D$ in the Calculus of Constructions, and erase all the contexts and all the typings that appear in it; also erase all the deduction steps that now look redundant. Call the new tree $D'$. If the original derivation, $D$, obeys some mild conditions, then it is possible to reconstruct it --- modulo exchanges and unessential weakenings in the contexts --- from $D'$, that is much shorter. The algorithm that does the reconstruction generates as a by-product a ``dictionary'' that tells the type and the ``minimal context'' for each term that appears in $D'$; by extending the language that the dictionary can deal with we get a way to translate DNC terms and trees --- and also, curiously, with a few tricks more, and with some minimal information to ``bootstrap'' the dictionary, categorical diagrams written in a DNC-like language. \newpage \setlength{\parindent}{5pt} % -------------------- % «motivation-1» (to ".motivation-1") % (s "Motivation" "motivation-1") \myslide {Motivation} {motivation-1} % (find-angg "LATEX/2002d.tex" "first-functor") A language for ``skeletons of proofs'' that would... $\bullet$ let me write down just the essential --- an (imaginary) computer would fill out the missing details; $\bullet$ allow me say things like ``the natural entity of type/name $a,(a \mto b) \mto b$'' (ev); $\bullet$ have a diagrammatic version, $\bullet$ and a linear version (for derivation trees and Curry-Howard); $\bullet$ easy to translate to the usual languages; $\bullet$ be able to represent categorical concepts; $\bullet$ allow for the ``right amount'' of ambiguity; $\bullet$ read aloud as something that's happening in the simplest models --- e.g., in $\Set$ instead of in an arbitrary topos; $\bullet$ be concise and clear enough --- because I have a very bad memory and I tended to change my notations madly, so I needed short diagrams that would ``say everything'', without the need for pages of definitions... \newpage % -------------------- % «sketch-of-solution» (to ".sketch-of-solution") % (s "Sketch of the solution" "sketch-of-solution") \myslide {Sketch of the solution} {sketch-of-solution} A notation that looks like an ambiguous $ð$-calculus (I call it the ``generic point'' notation); add some symbols to GP to let it represent functors, natural transformations, objects, categories, etc; a {dictionary} will translate GP terms into something precise (in the Calculus of Constructions) (diagrams and derivation trees are recyclable! Just change the dictionary...) modify the Calculus of Constructions to get something that looks more like natural deduction --- i.e., that has discharges instead of ``$\ldots \vdash \ldots$''s --- to get rid of some redundancy The system of natural deduction for categories (``system DNC'') is essentially this modified CC, with the GP notation with categorical extensions, and a dictionary. DNC derivations can either represent just the ``T-part'' (terms and types) of categorical constructions, and omit the ``P-part'' (propositions and proofs), or they can be complete. \newpage % -------------------- % «GP» (to ".GP") % (s "The ``generic point'' notation" "GP") \myslide {The ``generic point'' notation} {GP} What would be the natural name for a variable in... $\begin{array}{lllll} A & \dicto & a && A = \E[a] \\ B & \dicto & b && B = \E[b] \\ A×B & \dicto & a,b && A×B = \E[a,b] = \E[a]×\E[b] \\ B^A & \dicto & a \mto b && B^A = \E[a \mto b] = \E[b]^{\E[a]} \end{array} $ We will allow strange {{names}} for variables and terms and we will have a {dictionary} to translate these names into something precise (in the Calculus of Constructions). \medskip `$\E$' is pronounced as ``the space of''. \newpage % -------------------- % «functor-NT-in-GP» (to ".functor-NT-in-GP") % (s "Functors and NTs in this notation" "functor-NT-in-GP") \myslide {Functors and NTs in this notation} {functor-NT-in-GP} Choose sets $A$ and $B$, and a function $B \ton{g} A$. In GP/DNC notation we write $\Hom(A,-)$ as $x \funto (a \mto x)$. Note that from the name ``$x \funto (a \mto x)$'' we can extract both the action on objects, $\E[x] \mto \E[a \mto x]$, and the action on morphisms, $(x \mto y) \mto ((a \mto x) \mto (a \mto y))$. %D diagram functors %D 2Dx 100 +30 +35 +30 %D 2D 100 x ====> (a|->x) X |---> \Hom(A,X) %D 2D - - | | %D 2D | |--> | f | |--> | \Hom(A,f) %D 2D v v v v %D 2D +30 y ====> (a|->y) Y |---> \Hom(A,Y) %D 2D %D (( x (a|->x) %D y (a|->y) %D @ 0 @ 1 => @ 0 @ 2 |-> @ 1 @ 3 |-> @ 2 @ 3 => %D @ 0 @ 3 harrownodes nil 20 nil |-> %D )) %D (( X \Hom(A,X) %D Y \Hom(A,Y) %D @ 0 @ 1 |-> @ 0 @ 2 -> .plabel= l f @ 1 @ 3 -> .plabel= r \Hom(A,f) @ 2 @ 3 |-> %D @ 0 @ 3 harrownodes nil 20 nil |-> %D )) %D enddiagram %D $\diag{functors}$ % $\bfig % \square(-250,-250)/=>`|->`|->`=>/<500,500>[x`(a \mto x)`y`(a \mto y);```] % \morphism(-250,0)/|->/<500,0>[\phantom{*}`\phantom{*};] % \efig % \qquad % \bfig % \square(-250,-250)/|->`->`->`|->/<500,500>[ % X ` % \Hom(A,X) ` % Y ` % \Hom(A,Y) ; ` f ` \Hom(A,f) ` ] % \morphism(-250,0)/|->/<500,0>[\phantom{*}`\phantom{*};] % \efig % $ \medskip $x \tnto ((b \mto x) \mto (a \mto x))$ is a natural transformation going from $x \funto (b \mto x)$ to $x \funto (a \mto x)$. It works as $\E[x] \mto ((b \mto x) \mto (a \mto x))$, but it also obeys a naturality condition... %D diagram NTs %D 2Dx 100 +25 +25 +45 +25 +25 %D 2D 100 x X %D 2D // | \\ - - - %D 2D // |* \\ \Hom(B,-) / |* \ \Hom(A,-) %D 2D \/ v \/ v v v %D 2D +30 (b|->x) |---> (a|->x) \Hom(B,X) ---> \Hom(A,X) %D 2D %D (( x (b|->x) (a|->x) %D @ 0 @ 1 => @ 0 @ 2 => %D @ 0 @ 1 @ 2 midpoint -> .PLABEL= ^(0.575) \bullet %D @ 1 @ 2 |-> %D )) %D (( X \Hom(B,X) \Hom(A,X) %D @ 0 @ 1 |-> .plabel= l \Hom(B,-) %D @ 0 @ 2 |-> .plabel= r \Hom(A,-) %D @ 0 @ 1 @ 2 midpoint |-> .PLABEL= ^(0.55) . %D @ 1 @ 2 -> %D )) %D enddiagram %D $\diag{NTs}$ % $\bfig % \Atriangle(-500,-250)/=>`=>`|->/<500,500>[ % x ` % (b \mto x) ` (a \mto x) ;``] % \morphism(0,250)|r|/->/<0,-500>[x`\phantom{\cdot};\bullet] % \efig % \qquad % \bfig % \Atriangle(-500,-250)/|->`|->`->/<500,500>[ % X ` % \Hom(B,X) ` \Hom(A,X) ; \Hom(B,-) ` \Hom(A,-) ` ] % \morphism(0,250)|r|/|->/<0,-500>[X`\phantom{\cdot};] % \efig % $ \newpage % -------------------- % «Yoneda-proof» (to ".Yoneda-proof") % (s "The proof of the Yoneda Lemma in DNC" "Yoneda-proof") \myslide {The proof of the Yoneda Lemma in DNC} {Yoneda-proof} %: %: [a÷>x']^1 [x'÷>x'']^2 %: ---------------------- %: \O[a] [\O[x]]^1 a÷>x'' %: -----------------\Hom_\catC -----------------1 %: \E[a÷>x] (a÷>x')÷>(a÷>x'') %: ---------------1 -----------------(=>I);2 %: \O[x]÷>\E[a÷>x] x=>(a÷>x) %: %: ^yoneda-0a ^yoneda-0b %: $$\ded{yoneda-0a} \qquad \ded{yoneda-0b}$$ %: \O[a] %: ========= %: x=>(a÷>x) %: -------------¦{ren} %: \O[x=>(a÷>x)] \O[x=>x^F] %: -------------------------------\Hom_{\Set^\catC} %: \E[x-.>((a÷>x)÷>x^F)] %: ---------------------[s]^1 %: \O[a] \O[a] x-.>((a÷>x)÷>x^F) A A T:\Hom_\catC(A,-)-.>F %: ----- -------------------------- ---------- ------------------------ %: a÷>a (a÷>a)÷>a^F \id_A:A->A T_A:\Hom_\catC(A,A)->F(A) %: ----------------------- ------------------------------------- %: a^F T_A(\id_A)ÎF(A) %: ------------------------1 %: (x-.>((a÷>x)÷>x^F))÷>a^F ^prfyoneda1-balloon %: %: ^prfyoneda1 %: $$\ded{prfyoneda1}$$ % $$\ded{prfyoneda1-balloon}$$ %: %: %: \O[x=>x^F] \O_a [\O_x]^2 %: ----------¦{ren} ----------- %: \O_a x=>x^F \E[a÷>x] \O[x=>x^F] %: ------------- --------[s]^1 ----------¦{ren} %: \E[a^F] a÷>x x=>x^F %: -------[s]^3 --------------------- %: a^F a^F÷>x^F %: -------------------------------- %: x^F %: -----------1 %: (a÷>x)÷>x^F %: -----------------2 %: x-.>((a÷>x)÷>x^F) %: ------------------------3 %: a^F÷>(x-.>((a÷>x)÷>x^F)) %: %: ^prfyoneda2 %: $$\ded{prfyoneda2}$$ %: [\O_a]^1 [\O[x=>x^F]]^1 [\O_a]^1 [\O[x=>x^F]]^1 %: ======================== ======================== %: a^F÷>(x-.>((a÷>x)÷>x^F)) (x-.>((a÷>x)÷>x^F))÷>a^F %: --------------------------------------------------- %: a^F<->(x-.>((a÷>x)÷>x^F)) %: ----------------------------------------1 %: (a;x=>x^F)-.>(a^F<->(x-.>((a÷>x)÷>x^F))) %: %: ^prfyoneda3 %: $$\ded{prfyoneda3}$$ \newpage % -------------------- % «Yoneda-proof-2» (to ".Yoneda-proof-2") % (s "The proof of the Yoneda Lemma in DNC (2)" "Yoneda-proof-2") \myslide {The proof of the Yoneda Lemma in DNC (2)} {Yoneda-proof-2} ...and if we want to prove that the functors implicit in the outer `$\tnto$' of $(a;x \funto x^F) \tnto (a^F \bij (x \tnto ((a \to x) \to x^F)))$ are really (proto!) functors, we need this: %: %: [(x=>x^{F'})÷>(x=>x^{F''})]^1 %: -----------------------------¦{ren} %: [a'÷>a'']^1 x-.>(x^{F'}÷>x^{F''}) %: ==================================== %: {a'}^{F'}÷>{a''}^{F''} %: ----------------------1 %: (a;x=>x^F)=>a^F %: %: ^prfyonedaftr1 %: %: [\O_a]^1 %: ========= %: x=>(a÷>x) %: -------------¦{ren} %: \O[x=>(a÷>x)] [\O[x=>x^F]]^1 %: -----------------------------------\Hom_{\Set^\catC} %: \E[x-.>((a÷>x)÷>x^F)] %: -----------------------------------1 %: \O[a;x=>x^F]÷>\E[x-.>((a÷>x)÷>x^F)] %: %: ^prfyonedaftr2 %: %: [a'÷>a'']^4 [a''÷>x]^1 [\O_x]^2 [x-.>((a'÷>x)÷>x^{F'})]^3 %: --------------------- ------------- %: a'÷>x (a'÷>x)÷>x^{F'} [\O_x]^2 [x-.>(x^{F'}÷>x^{F''})]^4 %: ----------------------------------- ----------------------------------- %: x^{F'} x^{F'}÷>x^{F''} %: --------------------------------------------------- %: x^{F''} %: -----------------1 %: (a''÷>x)÷>x^{F''} %: -----------------------(-.>I);2 %: x-.>((a''÷>x)÷>x^{F''}) %: --------------------------------------------------3 %: (x-.>((a'÷>x)÷>x^{F'}))÷>(x-.>((a''÷>x)÷>x^{F''})) %: --------------------------------------------------(=>I);4 %: (a;x=>x^F)=>(x-.>((a÷>x)÷>x^F)) %: %: ^prfyonedaftr3 %: $$\ded{prfyonedaftr1}$$ $$\ded{prfyonedaftr2}$$ $$\ded{prfyonedaftr3}$$ \newpage % -------------------- % «adjs-as-DNC-diags» (to ".adjs-as-DNC-diags") % (s "Adjunctions as DNC diagrams" "adjs-as-DNC-diags") \myslide {Adjunctions as DNC diagrams} {adjs-as-DNC-diags} $L \dashv R$ is $(a;b) \tnto ((a^L \mto b) \bij (a \mto b^R))$ $(-)×B \dashv (-)^B$ is $(a;c) \tnto ((a,b \mto c) \bij (a \mto (b \mto c)))$ %D diagram adjunctions %D 2Dx 100 +25 +25 +25 %D 2D 100 a^L <==== a a,b <=== {a} %D 2D - - - - %D 2D | <--> | | <--> | %D 2D v v v v %D 2D +25 b ====> b^R {c} ===> b|->c %D 2D %D (( a^L a b b^R %D @ 0 @ 1 <= .plabel= a L @ 0 @ 2 |-> @ 1 @ 3 |-> @ 2 @ 3 => .plabel= b R %D @ 0 @ 3 harrownodes nil 20 nil <-> %D )) %D (( a,b {a} {c} b|->c %D @ 0 @ 1 <= .plabel= a (-)×B @ 0 @ 2 |-> @ 1 @ 3 |-> @ 2 @ 3 => .plabel= b (-)^B %D @ 0 @ 3 harrownodes nil 20 nil <-> %D )) %D enddiagram $$\diag{adjunctions}$$ % $$\bfig % \square|alrb|/<=`|->`|->`=>/<400,400>[ % a^L % ` a % ` b % ` b^R % ; L ` ` ` R ] % \efig % \qquad % \bfig % \square|alrb|/<=`|->`|->`=>/<400,400>[ % a,b % ` a % ` c % ` b \mto c % ; (-)×B ` ` ` (-)^B ] % \efig % $$ \def\mydmapp#1#2#3{\left(\bfig\morphism(0,#1)|r|/|->/<0,-#2>[#3]\efig\right)} \def\mydmap[#1]{\mydmapp{120}{240}{#1}} \def\mydmap[#1`#2;#3]{\begin{pmatrix}#1\\ \dnto\\#2\end{pmatrix}} \def\Sub{{¦{Sub}}} The functor from $\Sub(A)$ to $\Sub(A×B)$ ($A, B$ sets, for example) has a left adjoint $Î$ and a right adjoint $ý$. The weakening functor induced by $\GG,a \mto \GG$ in a ``good'' codomain fibration has a left adjoint $\Sigma$ and a right adjoint $\Pi$. %D diagram quantifiers %D 2Dx 100 +45 +45 +50 %D 2D 100 aw0 =====> aw1 bw0 =====> bw1 %D 2D - - - - %D 2D | <--> | | <--> | %D 2D v v v v %D 2D +40 aw2 <===== aw3 bw2 <===== bw3 %D 2D - - - - %D 2D | <--> | | <--> | %D 2D v v v v %D 2D +40 aw4 =====> aw5 bw4 =====> bw5 %D %D (( aw0 .tex= (a,b)|_{P(a,b)} aw1 .tex= a|_{Îb.P(a,b)} %D aw2 .tex= (a,b)|_{Q(a)} aw3 .tex= a|_{Q(a)} %D aw4 .tex= (a,b)|_{R(a,b)} aw5 .tex= a|_{ýb.R(a,b)} %D @ 0 @ 1 => .plabel= a {Î} %D @ 2 @ 3 <= %D @ 4 @ 5 => .plabel= b {ý} %D @ 0 @ 2 |-> @ 1 @ 3 |-> @ 0 @ 3 harrownodes nil 20 nil <-> %D @ 2 @ 4 |-> @ 3 @ 5 |-> @ 2 @ 5 harrownodes nil 20 nil <-> %D )) %D (( bw0 .tex= \ss[\GG,a|p] bw1 .tex= \ss[\GG|a,p] %D bw2 .tex= \ss[\GG,a|q] bw3 .tex= \ss[\GG|q] %D bw4 .tex= \ss[\GG,a|r] bw5 .tex= \ss[\GG|(a|->r)] %D @ 0 @ 1 => .plabel= a Æ %D @ 2 @ 3 <= %D @ 4 @ 5 => .plabel= b å %D @ 0 @ 2 |-> @ 1 @ 3 |-> @ 0 @ 3 harrownodes nil 20 nil <-> %D @ 2 @ 4 |-> @ 3 @ 5 |-> @ 2 @ 5 harrownodes nil 20 nil <-> %D )) %D enddiagram $$\def\ss[#1|#2]{\begin{pmatrix} #1,#2 \\ \dnto \\ #1 \end{pmatrix}} \diag{quantifiers} $$ % $$\bfig % \square(0,600)|alrm|/<=`|->`|->`=>/<700,600>[ % a|_{Ýb.P(a,b)} % ` (a,b)|_{P(a,b)} % ` a|_{Q(a)} % ` (a,b)|_{Q(a)} % ; Ý ` ` ` ] % \square/`|->`|->`<=/<700,600>[ % a|_{Q(a)} % ` (a,b)|_{Q(a)} % ` a|_{ýb.R(a,b)} % ` (a,b)|_{R(a,b)} % ; ` ` ` ý ] % \efig % \qquad % \bfig % \square(0,600)|alrm|/<=`|->`|->`=>/<700,600>[ % {\mydmap[\GG,a,p`\GG ;]} % ` {\mydmap[\GG,a,p`\GG,a;]} % ` {\mydmap[\GG, q`\GG ;]} % ` {\mydmap[\GG,a,q`\GG,a;]} % ; \Sigma ` ` ` ] % \square/`|->`|->`<=/<700,600>[ % {\mydmap[\GG, q`\GG ;]} % ` {\mydmap[\GG,a,q`\GG,a;]} % ` {\mydmap[\GG,(a \mto r)`\GG;]} % ` {\mydmap[\GG,a,r`\GG,a;]} % ; ` ` ` \Pi ] % \efig % $$ \newpage % -------------------- % «intro-CC-1» (to ".intro-CC-1") % (s "Introduction to the Calculus of Constructions (1)" "intro-CC-1") \myslide {Introduction to the Calculus of Constructions (1)} {intro-CC-1} CC is a particular case of a {\sl pure type system}. A PTS has a set of {\sl sorts} (for CC, $\{Þ,ñ\}$), a set of {\sl axioms} involving sorts (for CC, $\{\vdash Þ\:ñ\}$), and a set of pairs of sorts (for CC, $\{(Þ,Þ), (Þ,ñ), (ñ,Þ), (ñ,ñ)\}$) that specify which variations of the derivation rules are valid. We also need a countable set of {\sl variables} --- e.g.\ $\{a,b,c,\ldots, A,B,C,\ldots\}$. From that we define {\sl pre-terms}, {\sl pre-judgements} and (valid) derivations. Terms and judgements are pre-terms and pre-judgements that can appear in valid derivations. \newpage % -------------------- % «preterms-and-prejudgs» (to ".preterms-and-prejudgs") % (s "Pre-terms and pre-judgements" "preterms-and-prejudgs") \myslide {Pre-terms and pre-judgements} {preterms-and-prejudgs} The set of pre-terms is the least set closed under the following rules: $\bullet$ sorts are pre-terms $\bullet$ variables are pre-terms If $v$ is a variable, $f, t, t'$ pre-terms, $\bullet$ $f t$ is a pre-term (application) $\bullet$ $ðv\:t.t'$ is a pre-term (abstraction, function) $\bullet$ $åv\:t.t'$ is a pre-term (function space) Examples of (pre-)terms: $ðA\:Þ.ða\:A.a$ \qquad (polymorphic identity) $ðI\:Þ.ðA\:(åi\:I.Þ).(åi\:I.Ai)$ \smallskip A pre-judgement is something like $x_1\:A_1, \ldots, x_n\:A_n \vdash t\:t'$ where $x_1, \ldots, x_n$ {are all distinct} and $A_1, \ldots, A_n, t, t'$ are pre-terms. $n$ can be 0 (``empty context''). \newpage % -------------------- % «naive-semantics» (to ".naive-semantics") % (s "Naive semantics: $ð$ and $å$" "naive-semantics") \myslide {Naive semantics: $ð$ and $å$} {naive-semantics} The $ð$ of CC is like the usual $ð$ of $ð$-calculus, but with a restriction on the type of the input. $(ða\:A.b) a'$ will only be a (valid) term if $a'\:A$. \smallskip The $å$ forms function spaces: If $b:B$ then $(ða\:A.b)\:(åa\:A.B)$. \smallskip Dependent types: in $ða\:A.b$ and $åa\:A.B$, with $b\:B$, $B$ can be a term involving $a$! \smallskip $f a'$ will only be a (valid) term if $f$ and $a'$ can be typed as $f\:(åa\:A.B)$ and $a'\:A$. \medskip {\bf Naive semantics for `$å$':} example: if $I=\{1,2,3\}$, then $åi\:I.A_i = \prod_{i \in I} A_i =$ $= \{\{(1,a_1), (2,a_2), (3,a_3)\} \;|\; a_1ÎA_1, a_2ÎA_2, a_3ÎA_3\}$ $\cong A_1 × A_2 × A_3$ \newpage % -------------------- % «intro-CC-2» (to ".intro-CC-2") % (s "Introduction to CC (2) - example of a valid derivation" "intro-CC-2") \myslide {Introduction to CC (2) - example of a valid derivation} {intro-CC-2} %: |-Þ\:ñ |-Þ\:ñ |-Þ\:ñ . %: ---------------¦{weak}_ñ ----------¦s_ñ . %: |-Þ\:ñ X\:Þ|-Þ\:ñ X\:Þ|-X\:Þ . %: ----------¦s_ñ ---------------------------------¦{weak}_Þ . %: X\:Þ|-X\:Þ X\:Þ,x\:X|-Þ\:ñ . %: --------------------------------å_{Þñ} . %: X\:Þ|-(åx\:X.Þ)\:ñ . %: -------------------------------¦s_ñ . %: X\:Þ,F\:(åx\:X.Þ)|-F\:(åx\:X.Þ) . %: . %: ^exvalidderCC . %: $$\ded{exvalidderCC}$$ A tree of (pre-)judgements The leaves are axioms The root is the conclusion The bars are applications of the rules (coming soon!) Most of the tree is ``bureaucracy'' (weakings, for example) $\underbrace{ x_1\overbrace{\:A_1}^{\text{typing}}, \ldots, x_n\overbrace{\:A_n}^{\text{typing}} \vdash }_{\text{context}} t \overbrace{\:T }^{\text{typing}} $ The {\sl terms} are the pre-terms that can appear as `$x_i$'s, `$A_i$'s, $t$ or $T$. \newpage % -------------------- % «rules-CC» (to ".rules-CC") % (s "The rules of the Calculus of Constructions" "rules-CC") \myslide {The rules of the Calculus of Constructions} {rules-CC} Rules of the system: ax, s, $å$, $ð$, app, weak, conv (conv is not shown; if $a\:A$ and $A =_\bb A'$ then $a\:A'$) % % (find-defded nil "30apr-ax1") %: %: ------¦{ax} %: |-Þ\:ñ{} %: %: ^30apr-ax2 %: %: \GG|-A\:R %: --------------¦s_R %: \GG,a\:A|-a\:A %: %: ^30apr-s2 %: %: \GG|-A\:R \GG,a\:A|-B\:S %: -------------------------å_{RS} %: \GG|-(åa\:A.B)\:S %: %: ^30apr-Prod2 %: %: \GG,a\:A|-b\:B \GG|-(åa\:A.B)\:S %: ---------------------------------ð_{RS} %: \GG|-(ða\:A.b)\:(åa\:A.B) %: %: ^30apr-lambda2 %: %: \GG|-f\:(åa\:A.B) \GG|-a'\:A %: -----------------------------¦{app}_{RS} %: \GG|-fa'\:B[a:=a'] %: %: ^30apr-app2 %: %: \GG,\Delta|-c\:C \GG|-A\:R %: ---------------------------¦{weak}_R %: \GG,a\:A,\Delta|-c\:C %: %: ^30apr-weak2 %: %: $$\begin{array}{cc} \ded{30apr-Prod2} & \ded{30apr-ax2} \\ \ded{30apr-lambda2} & \ded{30apr-s2} \\ \ded{30apr-app2} & \ded{30apr-weak2} \end{array} $$ $R$, $S$ sorts; $a$ variable; $\GG$, $\Delta$ contexts All other letters ($a'$, $A$, $b$, $B$, $c$, $C$, $f$) represent terms (Remember: even in a pre-judgement we can't have repeated declarations for the same variable) \newpage % -------------------- % «some-facts-about-CC» (to ".some-facts-about-CC") % (s "Some facts (i.e., theorems) about CC}" "some-facts-about-CC") \myslide {Some facts (i.e., theorems) about CC} {some-facts-about-CC} Each term of CC is either a sort, or a member of a sort, or a member of a member or a sort. \smallskip Each variable is a member of a member of a sort. \smallskip If $x_1\:A_1, \ldots, x_n\:A_n \vdash t\:T$ then the list $x_1, \ldots, x_n$ contains all the free variables of $t$ and $T$; there exist sorts $S_1, \ldots, S_n$ such that $\vdash A_1\:S_1$, $x_1\:A_1 \vdash A_2\:S_2$, $x_1\:A_1, x_2\:A_2 \vdash A_3\:S_3$, $\ldots$, and if $T$ is not a sort then there exists a sort $S$ s.t.: $x_1\:A_1, \ldots, x_n\:A_n \vdash T\:S$. \smallskip {\bf Reading a pre-judgement aloud} Examples: $\vdash (ðA\:Þ.ða\:A.a) \: (åA\:Þ.åa\:A.A)$ $I\:Þ, A\:(åi\:I.Þ) \vdash (åi\:I.Ai)\:Þ$ \newpage % -------------------- % «more-facts-about-CC» (to ".more-facts-about-CC") % (s "More facts about CC: ``classes'' of terms, variations of the rules" "more-facts-about-CC") \myslide {More facts about CC: ``classes'' of terms, variations of the rules} {more-facts-about-CC} If we know the ``class'' of each variable we know the class of every term: $(ða^\clm R2 \: A^\clm R1 . b^\clm S2)^\clm S2$ \qquad $(f^\clm S2 a^\clm R2)^\clm S2$ $(åa^\clm R2 \: A^\clm R1 . B^\clm S1)^\clm S1$ \smallskip $\begin{array}{cccccccc} & & ¦{operator} &:& ¦{kind} &:& ñ \\ ¦{element} &:& ¦{set} &:& Þ & & \end{array} $ \medskip \def\hone#1#2{&&&å_{#1#2},} \def\htwo#1#2{&&&ð_{#1#2},} \def\hthr#1#2{&&&¦{app}_{#1#2}} $\begin{array}{cccccccc|cl} a,a' &:& A &:& Þ & & \honeÞÞ \\ b,fa' &:& B &:& Þ & & \htwoÞÞ \\ f,(ða\:A.b) &:& (åa\:A.B) &:& Þ & & \hthrÞÞ \\ \hline % & & a,a' &:& A &:& ñ \honeñÞ \\ b,fa' &:& B &:& Þ & & \htwoñÞ \\ f,(ða\:A.b) &:& (åa\:A.B) &:& Þ & & \hthrñÞ \\ \hline % a,a' &:& A &:& Þ & & \honeÞñ \\ & & b,fa' &:& B &:& ñ \htwoÞñ \\ & & f,(ða\:A.b) &:& (åa\:A.B) &:& ñ \hthrÞñ \\ \hline % & & a,a' &:& A &:& ñ \honeññ \\ & & b,fa' &:& B &:& ñ \htwoññ \\ & & f,(ða\:A.b) &:& (åa\:A.B) &:& ñ \hthrññ % \end{array} $ \newpage % -------------------- % «CC-to-CCMC-and-back» (to ".CC-to-CCMC-and-back") % (s "From CC with minimal contexts to ND and back" "CC-to-CCMC-and-back") \myslide {From CC with minimal contexts to ND and back} {CC-to-CCMC-and-back} Definition: a ``good'' derivation tree is one in which: $\bullet$ each variable appears always with the same type $\bullet$ whenever there are two subtrees ``deriving the same term'', they are equal \medskip Take a good tree with minimal contexts, for example, %: %: ------ %: |-Þ\:ñ % %: ----------[¦s_ñ]^{C2} ------ ------ %: I\:Þ|-I\:Þ |-Þ\:ñ |-Þ\:ñ % %: ----------------------------å_{Þñ} ----------[¦s_ñ]^{C1} %: I\:Þ|-(åi\:I.Þ)\:ñ I\:Þ|-I\:Þ %: ------ ------------------------------¦s_ñ ---------------[¦s_Þ]^2 %: |-Þ\:ñ I\:Þ,A\:(åi\:I.Þ)|-A\:(åi\:I.Þ) I\:Þ,i\:I|-i\:I %: ----------s_ñ ----------------------------------------------¦{app}_{Þñ};1 %: I\:Þ|-I\:Þ I\:Þ,A\:(åi\:I.Þ),i\:I|-Ai\:Þ %: --------------------------------------------å_{ÞÞ};2 %: I\:Þ,A\:(åi\:I.Þ)|-(åi\:I.Ai)\:Þ %: ----------------------------------------------s_Þ %: I\:Þ,A\:(åi\:I.Þ),f\:(åi\:I.Ai)|-f\:(åi\:I.Ai) %: %: ^apr30a %: $$\ded{apr30a}$$ erase its contexts, and put in the dictionary all the remaining typings: %: %: ---- %: Þ\:ñ % %: ----[¦s_ñ]^{C2} ---- ---- %: I\:Þ Þ\:ñ Þ\:ñ % %: ---------------------å_{Þñ} ----[¦s_ñ]^{C1} %: (åi\:I.Þ)\:ñ I\:Þ %: ---- ------------¦s_ñ ----[¦s_Þ]^2 %: Þ\:ñ A\:(åi\:I.Þ) i\:I %: ----s_ñ ------------------------------¦{app}_{Þñ};1 %: I\:Þ Ai\:Þ %: --------------------------å_{ÞÞ};2 %: (åi\:I.Ai)\:Þ %: -------------s_Þ %: f\:(åi\:I.Ai) %: %: ^apr30b %: $$\ded{apr30b} \qquad \begin{array}[b]{l} \text{Dictionary:} \\ i : I : Þ \\ A : (åi\:I.Þ) : ñ \\ Ai : Þ \\ f : (åi\:I.Ai) : Þ \end{array} $$ \newpage % -------------------- % «CC-to-CCMC-and-back-2» (to ".CC-to-CCMC-and-back-2") % (s "From CC with minimal contexts to ND and back (2)" "CC-to-CCMC-and-back-2") \myslide {From CC with minimal contexts to ND and back (2)} {CC-to-CCMC-and-back-2} ...now erase the typings too: %: %: - %: Þ %: -[¦s_ñ]^{C2} - - %: I Þ Þ %: ---------------å_{Þñ} -[¦s_ñ]^{C1} %: åi\:I.Þ I %: - -------¦s_ñ -[¦s_Þ]^2 %: Þ A i %: -s_ñ ---------------------¦{app}_{Þñ};1 %: I Ai %: --------------------------å_{ÞÞ};2 %: åi\:I.Ai %: --------s_Þ %: f %: %: ^apr30c %: $$\ded{apr30c} \qquad \begin{array}[b]{l} \text{Dictionary:} \\ i : I : Þ \\ A : (åi\:I.Þ) : ñ \\ Ai : Þ \\ f : (åi\:I.Ai) : Þ \end{array} $$ Fact: it is possible to reconstruct the original tree from this one. New variables are introduced only at the ``s'' rules. To help keep track of what's happening, we mark discharges with `$[·]^n$'s and ``contractions'' with `$[·]^{Cn}$'s. \medskip {\sl It is also possible to discard the dictionary and reconstruct it just from} {\sl that last tree.} \medskip Next step (not shown): replace the terms in a tree with names for them in the GP notation; let the dictionary translate some terms as applications --- example, $b \dicto (a \mto b)(a)$. \newpage % -------------------- % «props-and-proofs-in-CC» (to ".props-and-proofs-in-CC") % (s "Representing propositions and proofs in CC" "props-and-proofs-in-CC") \myslide {Representing propositions and proofs in CC} {props-and-proofs-in-CC} Props is a sort; in CC, $\Props = Þ$ (in other PTSs we may have $\Props \neq Þ$ and we may be able to formalize {\sl irrelevance of proofs}) \medskip $\prop[P]$ is $P$ seen as a proposition. Naively, $\prop[P]$ is the set of proofs of $P$. $\prf[P] : \prop[P] : \Props \quad (= Þ)$ \medskip Dictionary: $\begin{array}{rcl} \prop[P⊃Q] & \dicto & (å\prf[P]\:\prop[P].\prop[Q]) \\ \prf[P⊃Q] & \dicto & (\prf[P] \mto \prf[Q]) \\ \prop[ýx.P(x)] & \dicto & (åx\:\E[x].\prop[P(x)]) \\ \prf[ýx.P(x)] & \dicto & (x \mto \prf[P(x)]) \end{array} $ \newpage % -------------------- % «terms-for-equality» (to ".terms-for-equality") % (s "Terms for equality" "terms-for-equality") \myslide {Terms for equality} {terms-for-equality} To speak ``internally'' about equality between members of the same set we need a package of terms, that will be added to contexts... \medskip $¦{equality}_Þ$ is a package consisting of: $\begin{array}{ll} ¦{eq}_Þ & (¦{eq}_Þ A a a') : \Props \\ & \prop[a=a'] \dicto ¦{eq}_Þ A a a' \\ ¦{refl}_Þ & (¦{refl}_Þ A a) : \prop[a=a] \\ & \prf[a=a] \dicto ¦{refl}_Þ A a \\ ¦{sim}_Þ & (¦{sim}_Þ A a a') : \prop[a=a'⊃a'=a] \\ & \prf[a=a'⊃a'=a] \dicto (¦{sim}_Þ A a a') \\ ¦{trans}_Þ & (¦{trans}_Þ A a a' a'') : \prop[a=a'⊃(a'=a''⊃a=a'')] \\ & \prf[a=a'⊃(a'=a''⊃a=a'')] \dicto (¦{trans}_Þ A a a' a'') \end{array} $ \medskip $¦{f's.r.equality}_{ÞÞ}$ is a package of terms saying that all functions $f\:(åa\:A.B)$ ``respect equality''. This is a bit trickier, as it involves the ``conv'' rule. \medskip Note: $a,a',a''\:A\:Þ$, $B\:Þ$ \newpage % -------------------- % «protocategories» (to ".protocategories") % (s "Protocategories" "protocategories") \myslide {Protocategories} {protocategories} The prefix ``{\sl proto}'' will always mean ``{\sl without the terms for equalities}''. \smallskip A protocategory $\catC : ¦{Protocats}_{SR}$ (where $S$, $R$ are sorts --- typically $S=ñ$, $R=Þ$) is a package containing $$\begin{array}{lll} \Objs_\catC : S & & \\ \Hom_\catC & & \Hom_\catC A B : R \\ \id_\catC & & \id_\catC A : \Hom_\catC A A \\ ¢_\catC & & ¢_\catC ABC (a \mto b) (b \mto c) : \Hom_\catC AC \end{array} $$ ($A, B, C : \Objs_\catC$) \medskip Notational trick: $a \mto b : \E[a \mto b]$, and the dictionary translates $\E[a \mto b] \dicto \Hom_\catC A B$. % Actually we'll use $\O[a], \O[b], \O[c]$ instead of $A, B, C$. \medskip A protocategory comes without the `prf' terms that say the $¢_\catC$ behaves well. A category is a protocategory plus such terms. \newpage % -------------------- % «protocategories-sets» (to ".protocategories-sets") % (s "A very special example: $\\Set$ as a $ñÞ$-protocategory" "protocategories-sets") \myslide {A very special example: $\protect\Set$ as a $\protectñÞ$-protocategory} {protocategories-sets} $\Set : ¦{Protocats}_{ñÞ}$ $\Objs_\Set = Þ : ñ$ $\Hom_\Set \E[x] \E[y] = \E[x \mto y] : Þ$ $\Hom_\Set := ðX\:Þ.ðY\:Þ.(åx\:X.Y)$ $\id_\Set \E[x] = x \mto x$ $\id_\Set := ðX\:Þ.ðx\:X.x$ $¢_\Set \E[x] \E[y] \E[z] (x \mto y) (y \mto z) = (y \mto z)¢(x \mto y)$ $¢_\Set := ðX\:Þ.ðY\:Þ.ðZ\:Þ.$ {\qquad \qquad} $ðf\:(\Hom_\Set XY).ðg\:(\Hom_\Set YZ).$ {\qquad \qquad \quad} $ðx\:X.g(fx)$ \bigskip \newpage % -------------------- % «protocategories-generic» (to ".protocategories-generic") % (s "A typical $ñÞ$-protocategory" "protocategories-generic") \myslide {A typical $ñÞ$-protocategory} {protocategories-generic} $\Objs_\catC : ñ$ $\Hom_\catC : å\O[a]\:\Objs_\catC.å\O[b]\:\Objs_\catC.Þ$ $\O[a], \O[b], \O[c] : \Objs_\catC$ like $\E[x], \E[y], \E[z] : \Objs_\Set = Þ$ but {we don't have a semantics} for ``$a$'', ``$b$'', ``$c$''!!! Just for $\O[a]$, $\O[b]$, $\O[c]$, $(a \mto b)$, $(b \mto c)$, $(a \mto c)$. \medskip %D diagram triangles %D 2Dx 100 +20 +20 +20 %D 2D 100 x |-> y a |-> b %D 2D / - / - %D 2D \ | \ | %D 2D v v v v %D 2D +20 z c %D 2D %D (( x y |-> x z |-> y z |-> %D a b |-> a c |-> b c |-> %D )) %D enddiagram %D $\diag{triangles}$ % $\bfig % \qtriangle/|->`|->`|->/<250,250>[x`y`z;``] % \efig % \qquad % \bfig % \qtriangle/|->`|->`|->/<250,250>[a`b`c;``] % \efig % $ % {\qquad} in $\Set$ \qquad \qquad in $\catC$ \medskip New ``operator'' in the dictionary: $\Cat$ --- $\Cat[x] \dicto \Set$, $\Cat[a] \dicto \catC$ ($\O[a]\:\Objs_\catC$) \medskip $x \mto y : \E[x \mto y] = \E[x] \to \E[y]$ $a \mto b : \E[a \mto b] = \Hom_\catC \O[a] \O[b]$ \newpage % -------------------- % «DNC-rules» (to ".DNC-rules") % (s "System DNC: rules" "DNC-rules") \myslide {System DNC: rules} {DNC-rules} %: %: \O[a] a=>a^F a'÷>a'' a=>a^F %: -------------(=>E_O) ---------------(=>E_M) %: \O[a^F] {a'}^F÷>{a''}^F %: %: ^funtoEO ^funtoEM %: %: \O[a] a-.>(a^F÷>a^G) %: ---------------------(-.>E) %: a^F÷>a^G %: %: ^tnE %: $\ded{funtoEO} \qquad \ded{funtoEM}$ $\ded{tnE}$ \medskip Several ``ren'' rules, e.g., %: %: a=>a^F a-.>(a^F÷>a^G) %: ----------¦{ren} ------------------¦{ren} %: \O[a=>a^F] (a=>a^F)÷>(a=>a^G) %: %: ^renftr1 ^renftr2 %: $\ded{renftr1} \qquad \ded{renftr2}$ \medskip Discharges are written in usual ND style: %: %: \Objs_\catC %: -----------[¦s]^1 %: \O[a] \ldots [\O[a]]^1 \ldots %: ======================== ================== %: \O[a^F] \O[a^F] %: --------------1 --------------1 %: \O[a]÷>\O[a^F] \O[a]÷>\O[a^F] %: %: ^disch-nonND ^disch-ND %: $\ded{disch-nonND} \quad \sqto \quad \ded{disch-ND}$ but then we need to know that $\O[a]\:\Objs_\catC$ (dictionary!) and the trees may split into several... \newpage % -------------------- % «DNC-rules-funtoI» (to ".DNC-rules-funtoI") % (s "System DNC: $(\\funto I)$, example" "DNC-rules-funtoI") \myslide {System DNC: $(\funto I)$, example} {DNC-rules-funtoI} If we know the action of $x \funto (a \mto x)$ on objects, i.e., \medskip %: %: [\O[x]]^1 %: ---------¦{ren} %: \E[a] \E[x] %: ------------- %: \E[a÷>x] %: --------¦{ren} %: \O[a÷>x] %: ---------------1 %: \O[x]÷>\O[a÷>x] %: %: ^funtoi-ex1 %: $\ded{funtoi-ex1}$ \medskip then: %: %: [a÷>x']^1 [x'÷>x'']^2 %: ---------------------- %: a÷>x'' %: -----------------1 %: (a÷>x')÷>(a÷>x'') %: ------------------------------2 %: (x'÷>x'')÷>((a÷>x')÷>(a÷>x'')) %: ------------------------------\text{``$(\funto"I)$''} %: x=>(a÷>x) %: %: ^funtoi-ex2 %: $\ded{funtoi-ex2}$ Note that we are constructing a {proto}-functor --- we are leaving out the ``prf'' terms! \newpage % -------------------- % «DNC-rules-tntoI» (to ".DNC-rules-tntoI") % (s "System DNC: $(\\tnto I)$, example" "DNC-rules-tntoI") \myslide {System DNC: $(\protect\tnto I)$, example} {DNC-rules-tntoI} If we know $x \funto (b \mto x)$ and $x \funto (a \mto x)$, then the rule for creating $x \tnto ((b \mto x) \mto (a \mto x))$ is essentially the same as the rule for creating $\O[x] \mto ((b \mto x) \mto (a \mto x))$ --- again, we leave out the ``prf'' terms, and we only build a {proto}-natural transformation. Example: %: %: \O[b] [\O[x]]^2 %: ---------------- %: \E[b÷>x] %: --------[s]^1 %: a÷>b [b÷>x]^1 a÷>b b÷>x %: --------------- ------------ %: a÷>x a÷>x %: --------------1 --------------1 %: (b÷>x)÷>(a÷>x) (b÷>x)÷>(a÷>x) %: --------------------2 --------------------2 %: x-.>((b÷>x)÷>(a÷>x)) x-.>((b÷>x)÷>(a÷>x)) %: %: ^extntoI-a ^extntoI-b %: $\ded{extntoI-a} \qquad \ded{extntoI-b}$ \newpage % -------------------- % «future-work» (to ".future-work") % (s "Future work" "future-work") \myslide {Future work} {future-work} {\bf Is DNC strongly normalizing?} Problems with this question: \begin{itemize} \item Right now DNC is just a layer of syntax on top of CC \item We need to formalize better how the dictionary works \item Some rules (e.g. $(\funto E)$) involve a certain amount of pattern-matching \item Reductions (cut-elimination) may require non-trivial renamings \item Which names are valid? DNC terms are inherently ambiguous... \end{itemize} DNC is not well-defined enough yet!! \newpage % -------------------- % «before-SN-for-DNC» (to ".before-SN-for-DNC") % (s "What comes before studying SN for DNC" "before-SN-for-DNC") \myslide {What comes before studying SN for DNC} {before-SN-for-DNC} % (find-lsrcfile "base/ltlists.dtx" "\\cs{topsep}") % (find-lsrcfile "base/ltlists.dtx" "\\begin{environment}{itemize}") % (find-lsrcfile "base/ltlists.dtx" "\\def\\@item[#1]") \smallskip {\bf We need to learn more about DNC's ambiguities:} If a DNC term $\aa$ has a natural construction, \begin{itemize} \setlength{\itemsep}{0pt} \setlength{\parsep}{0pt} \item is it essentially unique? \item does it lift from the ``syntactical world'' to the ``real world''? \item coherence/parametricity \end{itemize} \smallskip Missing: rules for defining new categories \smallskip {\bf DNC and GP are tools for expressing the (intuitive) skeletons of some proofs (more precisely, the T-parts of proofs).} So, morally, we should be able to represent nicely in GP/DNC: \begin{itemize} \item SN proofs for CC \item Categorical models for CC and other type theories \item ``Basic category theory'' (everything that a categorist would say is trivial) \item A lot about fibrations \item And also: \begin{itemize} \item Topos logic (and a ND for it!) \item Terms involving infinitesimals and derivatives (my original motivation, years ago) \end{itemize} \end{itemize} \newpage % -------------------- % «notes-about-slides» (to ".notes-about-slides") % (s "Notes for people downloading these slides" "notes-about-slides") \myslide {Notes for people downloading these slides} {notes-about-slides} In a very near future (before the end of June, I hope) I'm going to add notes about how I handwaved over these slides in the presentation, and, even more important, how to ``pronounce'' the DNC terms and diagrams... and also pointers to the literature, thanks to the people that discussed these ideas with me and helped me shape the presentation (Robert Seely, Jeff Egger, Robin Cockett), and a few other things. Now I have to hurry up and prepare the slides for my presentation at the CMS 2002, in Quebec city... it's going to be only 15 mins long (this one was 45 mins) so I'll have to use a different approach, with more motivation and less details... So: please check {\tt http://angg.twu.net/} again in a few weeks for a new version of this. Sorry for the mess! Edrx, 2002jun13 % other way to see: a judgement is a program, that given any seq $x_1, % \ldots x_n$ produces a $t:T$. % % judgements - example (polyid) - cases when we can't select members (in % the naive semantics) % % the rules of CC (with annotations to help, and coloured bubbles to % indicate what we'll discard, and which parts are ``morally % unnecessary'' --- we could get rid of them if the class annotations % were more formal) % % a system with rules that ``mix'' contexts (instead of having to weaken % eeeeverything) % % We say that a judgement has {minimal context} if we can't delete one % of its premises and still have a (valid) judgement... % % $A:Þ \vdash (ða\:A.a)\:(åa\:A.A)$ has minimal context % % $A:Þ, a:Þ \vdash (ða\:A.a)\:(åa\:A.A)$ doesn't % % What happens if we try to create a system like CC, but where each % judgement has minimal context? Ex: % % %: % %: I\:Þ,A\:(åi\:I.Þ)|-A\:(åi\:I.Þ) I\:Þ,i\:I|-i\:I % %: -------------------------------------------------¦{app}_{Þñ} % %: I\:Þ,i\:I,A\:(åi\:I.Þ)|-Ai\:Þ % %: % %: ^ex-minctxts % %: % $$\ded{ex-minctxts}$$ % % Hidden weakenings % % Hidden ``conv''s % % % (find-diagxyfile "diaxydoc.tex" "\\Atriangle(x,y)|ppp|") % % for good trees the typings and contexts can be recovered from % the dictionary! And we can also get rid of the right hypothesis in % $å_{RS}$ and $ð_{RS}$. %* \end{document} % Local Variables: % coding: raw-text-unix % ee-anchor-format: "«%s»" % End: