Slides/Slides1.thy
branchNominal2-Isabelle2011-1
changeset 3070 4b4742aa43f2
parent 3069 78d828f43cdf
child 3071 11f6a561eb4b
equal deleted inserted replaced
3069:78d828f43cdf 3070:4b4742aa43f2
     1 (*<*)
       
     2 theory Slides1
       
     3 imports "~~/src/HOL/Library/LaTeXsugar" "Nominal"
       
     4 begin
       
     5 
       
     6 notation (latex output)
       
     7   set ("_") and
       
     8   Cons  ("_::/_" [66,65] 65) 
       
     9 
       
    10 (*>*)
       
    11 
       
    12 
       
    13 text_raw {*
       
    14   %%\renewcommand{\slidecaption}{Cambridge, 8.~June 2010}
       
    15   \renewcommand{\slidecaption}{Uppsala, 3.~March 2011}
       
    16   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    17   \mode<presentation>{
       
    18   \begin{frame}<1>[t]
       
    19   \frametitle{%
       
    20   \begin{tabular}{@ {\hspace{-3mm}}c@ {}}
       
    21   \\
       
    22   \huge Nominal Isabelle 2\\[-2mm] 
       
    23   \large Or, How to Reason Conveniently\\[-5mm]
       
    24   \large with General Bindings\\[5mm]
       
    25   \end{tabular}}
       
    26   \begin{center}
       
    27   Christian Urban
       
    28   \end{center}
       
    29   \begin{center}
       
    30   joint work with {\bf Cezary Kaliszyk}\\[0mm] 
       
    31   \end{center}
       
    32   \end{frame}}
       
    33   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    34 
       
    35 *}
       
    36 
       
    37 text_raw {*
       
    38   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    39   \mode<presentation>{
       
    40   \begin{frame}<1-2>
       
    41   \frametitle{\begin{tabular}{c}Binding in Old Nominal\end{tabular}}
       
    42   \mbox{}\\[-6mm]
       
    43 
       
    44   \begin{itemize}
       
    45   \item the old Nominal Isabelle provided a reasoning infrastructure for single binders\medskip
       
    46   
       
    47   \begin{center}
       
    48   Lam [a].(Var a)
       
    49   \end{center}\bigskip
       
    50 
       
    51   \item<2-> but representing 
       
    52 
       
    53   \begin{center}
       
    54   $\forall\{a_1,\ldots,a_n\}.\; T$ 
       
    55   \end{center}\medskip
       
    56 
       
    57   with single binders and reasoning about it is a \alert{\bf major} pain; 
       
    58   take my word for it!
       
    59   \end{itemize}
       
    60 
       
    61   \only<1>{
       
    62   \begin{textblock}{6}(1.5,11)
       
    63   \small
       
    64   for example\\
       
    65   \begin{tabular}{l@ {\hspace{2mm}}l}
       
    66    & a $\fresh$ Lam [a]. t\\
       
    67    & Lam [a]. (Var a) \alert{$=$} Lam [b]. (Var b)\\
       
    68    & Barendregt-style reasoning about bound variables\\
       
    69   \end{tabular}
       
    70   \end{textblock}}
       
    71   
       
    72   \end{frame}}
       
    73   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    74 *}
       
    75 
       
    76 text_raw {*
       
    77   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    78   \mode<presentation>{
       
    79   \begin{frame}<1-4>
       
    80   \frametitle{\begin{tabular}{c}Binding Sets of Names\end{tabular}}
       
    81   \mbox{}\\[-3mm]
       
    82 
       
    83   \begin{itemize}
       
    84   \item binding sets of names has some interesting properties:\medskip
       
    85   
       
    86   \begin{center}
       
    87   \begin{tabular}{l}
       
    88   $\forall\{x, y\}.\, x \rightarrow y \;\;\approx_\alpha\;\; \forall\{y, x\}.\, y \rightarrow x$
       
    89   \bigskip\smallskip\\
       
    90 
       
    91   \onslide<2->{%
       
    92   $\forall\{x, y\}.\, x \rightarrow y \;\;\not\approx_\alpha\;\; \forall\{z\}.\, z \rightarrow z$
       
    93   }\bigskip\smallskip\\
       
    94 
       
    95   \onslide<3->{%
       
    96   $\forall\{x\}.\, x \rightarrow y \;\;\approx_\alpha\;\; \forall\{x, \alert{z}\}.\, x \rightarrow y$
       
    97   }\medskip\\
       
    98   \onslide<3->{\hspace{4cm}\small provided $z$ is fresh for the type}
       
    99   \end{tabular}
       
   100   \end{center}
       
   101   \end{itemize}
       
   102   
       
   103   \begin{textblock}{8}(2,14.5)
       
   104   \footnotesize $^*$ $x$, $y$, $z$ are assumed to be distinct
       
   105   \end{textblock}
       
   106 
       
   107   \only<4>{
       
   108   \begin{textblock}{6}(2.5,4)
       
   109   \begin{tikzpicture}
       
   110   \draw (0,0) node[inner sep=3mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   111   {\normalsize\color{darkgray}
       
   112   \begin{minipage}{8cm}\raggedright
       
   113   For type-schemes the order of bound names does not matter, and
       
   114   alpha-equivalence is preserved under \alert{vacuous} binders.
       
   115   \end{minipage}};
       
   116   \end{tikzpicture}
       
   117   \end{textblock}}
       
   118   \end{frame}}
       
   119   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   120 *}
       
   121 
       
   122 text_raw {*
       
   123   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   124   \mode<presentation>{
       
   125   \begin{frame}<1-3>
       
   126   \frametitle{\begin{tabular}{c}Other Binding Modes\end{tabular}}
       
   127   \mbox{}\\[-3mm]
       
   128 
       
   129   \begin{itemize}
       
   130   \item alpha-equivalence being preserved under vacuous binders is \underline{not} always
       
   131   wanted:\bigskip\bigskip\normalsize
       
   132   
       
   133   \begin{tabular}{@ {\hspace{-8mm}}l}
       
   134   $\text{let}\;x = 3\;\text{and}\;y = 2\;\text{in}\;x - y\;\text{end}$\medskip\\
       
   135   \onslide<2->{$\;\;\;\only<2>{\approx_\alpha}\only<3>{\alert{\not\approx_\alpha}}
       
   136    \text{let}\;y = 2\;\text{and}\;x = 3\only<3->{\alert{\;\text{and}
       
   137     \;z = \text{loop}}}\;\text{in}\;x - y\;\text{end}$}
       
   138   \end{tabular}
       
   139   
       
   140 
       
   141   \end{itemize}
       
   142 
       
   143   \end{frame}}
       
   144   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   145 *}
       
   146 
       
   147 text_raw {*
       
   148   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   149   \mode<presentation>{
       
   150   \begin{frame}<1>
       
   151   \frametitle{\begin{tabular}{c}\LARGE{}Even Another Binding Mode\end{tabular}}
       
   152   \mbox{}\\[-3mm]
       
   153 
       
   154   \begin{itemize}
       
   155   \item sometimes one wants to abstract more than one name, but the order \underline{does} matter\bigskip
       
   156   
       
   157   \begin{center}
       
   158   \begin{tabular}{@ {\hspace{-8mm}}l}
       
   159   $\text{let}\;(x, y) = (3, 2)\;\text{in}\;x - y\;\text{end}$\medskip\\
       
   160   $\;\;\;\not\approx_\alpha
       
   161    \text{let}\;(y, x) = (3, 2)\;\text{in}\;x - y\;\text{end}$
       
   162   \end{tabular}
       
   163   \end{center}
       
   164   
       
   165 
       
   166   \end{itemize}
       
   167 
       
   168   \end{frame}}
       
   169   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   170 *}
       
   171 
       
   172 text_raw {*
       
   173   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   174   \mode<presentation>{
       
   175   \begin{frame}<1-2>
       
   176   \frametitle{\begin{tabular}{c}\LARGE{}Three Binding Modes\end{tabular}}
       
   177   \mbox{}\\[-3mm]
       
   178 
       
   179   \begin{itemize}
       
   180   \item the order does not matter and alpha-equivelence is preserved under
       
   181   vacuous binders \textcolor{gray}{(restriction)}\medskip
       
   182   
       
   183   \item the order does not matter, but the cardinality of the binders 
       
   184   must be the same \textcolor{gray}{(abstraction)}\medskip
       
   185 
       
   186   \item the order does matter \textcolor{gray}{(iterated single binders)}
       
   187   \end{itemize}
       
   188 
       
   189   \onslide<2->{
       
   190   \begin{center}
       
   191   \isacommand{bind (set+)}\hspace{6mm}
       
   192   \isacommand{bind (set)}\hspace{6mm}
       
   193   \isacommand{bind}
       
   194   \end{center}}
       
   195 
       
   196   \end{frame}}
       
   197   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   198 *}
       
   199 
       
   200 text_raw {*
       
   201   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   202   \mode<presentation>{
       
   203   \begin{frame}<1-3>
       
   204   \frametitle{\begin{tabular}{c}Specification of Binding\end{tabular}}
       
   205   \mbox{}\\[-6mm]
       
   206 
       
   207   \mbox{}\hspace{10mm}
       
   208   \begin{tabular}{ll}
       
   209   \multicolumn{2}{l}{\isacommand{nominal\_datatype} trm $=$}\\
       
   210   \hspace{5mm}\phantom{$|$} Var name\\
       
   211   \hspace{5mm}$|$ App trm trm\\
       
   212   \hspace{5mm}$|$ Lam \only<2->{x::}name \only<2->{t::}trm
       
   213   & \onslide<2->{\isacommand{bind} x \isacommand{in} t}\\
       
   214   \hspace{5mm}$|$ Let \only<2->{as::}assn \only<2->{t::}trm
       
   215   & \onslide<2->{\isacommand{bind} bn(as) \isacommand{in} t}\\
       
   216   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
       
   217   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
       
   218   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\
       
   219   \multicolumn{2}{l}{\onslide<3->{\isacommand{binder} bn \isacommand{where}}}\\
       
   220   \multicolumn{2}{l}{\onslide<3->{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ []}}\\
       
   221   \multicolumn{2}{l}{\onslide<3->{\hspace{5mm}$|$ bn(ACons a t as) $=$ [a] @ bn(as)}}\\
       
   222   \end{tabular}
       
   223 
       
   224 
       
   225 
       
   226   \end{frame}}
       
   227   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   228 *}
       
   229 
       
   230 text_raw {*
       
   231   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   232   \mode<presentation>{
       
   233   \begin{frame}<1-5>
       
   234   \frametitle{\begin{tabular}{c}Inspiration from Ott\end{tabular}}
       
   235   \mbox{}\\[-3mm]
       
   236 
       
   237   \begin{itemize}
       
   238   \item this way of specifying binding is inspired by 
       
   239   {\bf Ott}\onslide<2->{, \alert{\bf but} we made some adjustments:}\medskip
       
   240   
       
   241 
       
   242   \only<2>{
       
   243   \begin{itemize}
       
   244   \item Ott allows specifications like\smallskip
       
   245   \begin{center}
       
   246   $t ::= t\;t\; |\;\lambda x.t$
       
   247   \end{center}
       
   248   \end{itemize}}
       
   249 
       
   250   \only<3-4>{
       
   251   \begin{itemize}
       
   252   \item whether something is bound can depend in Ott on other bound things\smallskip
       
   253   \begin{center}
       
   254   \begin{tikzpicture}
       
   255   \node (A) at (-0.5,1) {Foo $(\lambda y. \lambda x. t)$};
       
   256   \node (B) at ( 1.1,1) {$s$};
       
   257   \onslide<4>{\node (C) at (0.5,0) {$\{y, x\}$};}
       
   258   \onslide<4>{\draw[->,red,line width=1mm] (A) -- (C);}
       
   259   \onslide<4>{\draw[->,red,line width=1mm] (C) -- (B);}
       
   260   \end{tikzpicture}
       
   261   \end{center}
       
   262   \onslide<4>{this might make sense for ``raw'' terms, but not at all 
       
   263   for $\alpha$-equated terms}
       
   264   \end{itemize}}
       
   265 
       
   266   \only<5>{
       
   267   \begin{itemize}
       
   268   \item we allow multiple ``binders'' and ``bodies''\smallskip
       
   269   \begin{center}
       
   270   \begin{tabular}{l}
       
   271   \isacommand{bind} a b c \ldots \isacommand{in} x y z \ldots\\
       
   272   \isacommand{bind (set)} a b c \ldots \isacommand{in} x y z \ldots\\
       
   273   \isacommand{bind (set+)} a b c \ldots \isacommand{in} x y z \ldots
       
   274   \end{tabular}
       
   275   \end{center}\bigskip\medskip
       
   276   the reason is that with our definition of $\alpha$-equivalence\medskip
       
   277   \begin{center}
       
   278   \begin{tabular}{l}
       
   279   \isacommand{bind (set+)} as \isacommand{in} x y $\not\Leftrightarrow$\\ 
       
   280   \hspace{8mm}\isacommand{bind (set+)} as \isacommand{in} x, \isacommand{bind (set+)} as \isacommand{in} y
       
   281   \end{tabular}
       
   282   \end{center}\medskip
       
   283 
       
   284   same with \isacommand{bind (set)}
       
   285   \end{itemize}}
       
   286   \end{itemize}
       
   287 
       
   288 
       
   289   \end{frame}}
       
   290   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   291 *}
       
   292 
       
   293 text_raw {*
       
   294   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   295   \mode<presentation>{
       
   296   \begin{frame}<1>
       
   297   \frametitle{\begin{tabular}{c}Alpha-Equivalence\end{tabular}}
       
   298   \mbox{}\\[-3mm]
       
   299 
       
   300   \begin{itemize}
       
   301   \item in the old Nominal Isabelle, we represented single binders as partial functions:\bigskip
       
   302   
       
   303   \begin{center}
       
   304   \begin{tabular}{l}
       
   305   Lam [$a$].\,$t$ $\;{^\text{``}}\!\dn{}\!^{\text{''}}$\\[2mm]
       
   306   \;\;\;\;$\lambda b.$\;$\text{if}\;a = b\;\text{then}\;t\;\text{else}$\\
       
   307   \phantom{\;\;\;\;$\lambda b.$\;\;\;\;\;\;}$\text{if}\;b \fresh t\;
       
   308   \text{then}\;(a\;b)\act t\;\text{else}\;\text{error}$ 
       
   309   \end{tabular}
       
   310   \end{center}
       
   311   \end{itemize}
       
   312 
       
   313   \begin{textblock}{10}(2,14)
       
   314   \footnotesize $^*$ alpha-equality coincides with equality on functions
       
   315   \end{textblock}
       
   316   \end{frame}}
       
   317   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   318 *}
       
   319 
       
   320 text_raw {*
       
   321   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   322   \mode<presentation>{
       
   323   \begin{frame}<1->
       
   324   \frametitle{\begin{tabular}{c}New Design\end{tabular}}
       
   325   \mbox{}\\[4mm]
       
   326 
       
   327   \begin{center}
       
   328   \begin{tikzpicture}
       
   329   {\draw (0,0) node[inner sep=3mm, ultra thick, draw=fg, rounded corners=2mm]
       
   330   (A) {\begin{minipage}{1.1cm}bind.\\spec.\end{minipage}};}
       
   331   
       
   332   {\draw (3,0) node[inner sep=3mm, ultra thick, draw=fg, rounded corners=2mm]
       
   333   (B) {\begin{minipage}{1.1cm}raw\\terms\end{minipage}};}
       
   334 
       
   335   \alt<2>
       
   336   {\draw (6,0) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   337   (C) {\textcolor{red}{\begin{minipage}{1.1cm}$\alpha$-\\equiv.\end{minipage}}};}
       
   338   {\draw (6,0) node[inner sep=3mm, ultra thick, draw=fg, rounded corners=2mm]
       
   339   (C) {\begin{minipage}{1.1cm}$\alpha$-\\equiv.\end{minipage}};}
       
   340   
       
   341   {\draw (0,-3) node[inner sep=3mm, ultra thick, draw=fg, rounded corners=2mm]
       
   342   (D) {\begin{minipage}{1.1cm}quot.\\type\end{minipage}};}
       
   343 
       
   344   {\draw (3,-3) node[inner sep=3mm, ultra thick, draw=fg, rounded corners=2mm]
       
   345   (E) {\begin{minipage}{1.1cm}lift\\thms\end{minipage}};}
       
   346 
       
   347   {\draw (6,-3) node[inner sep=3mm, ultra thick, draw=fg, rounded corners=2mm]
       
   348   (F) {\begin{minipage}{1.1cm}add.\\thms\end{minipage}};}
       
   349   
       
   350   \draw[->,fg!50,line width=1mm] (A) -- (B);
       
   351   \draw[->,fg!50,line width=1mm] (B) -- (C);
       
   352   \draw[->,fg!50,line width=1mm, line join=round, rounded corners=2mm] 
       
   353   (C) -- (8,0) -- (8,-1.5) -- (-2,-1.5) -- (-2,-3) -- (D);
       
   354   \draw[->,fg!50,line width=1mm] (D) -- (E);
       
   355   \draw[->,fg!50,line width=1mm] (E) -- (F);
       
   356   \end{tikzpicture}
       
   357   \end{center}
       
   358 
       
   359   \end{frame}}
       
   360   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   361 *}
       
   362 
       
   363 
       
   364 
       
   365 text_raw {*
       
   366   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   367   \mode<presentation>{
       
   368   \begin{frame}<1-8>
       
   369   \frametitle{\begin{tabular}{c}Alpha-Equivalence\end{tabular}}
       
   370   \mbox{}\\[-3mm]
       
   371 
       
   372   \begin{itemize}
       
   373   \item lets first look at pairs\bigskip\medskip
       
   374 
       
   375   \begin{tabular}{@ {\hspace{1cm}}l}
       
   376   $(as, x) \onslide<2->{\approx\!}\makebox[0mm][l]{\only<2-6>{${}_{\text{set}}$}%
       
   377            \only<7>{${}_{\text{\alert{list}}}$}%
       
   378            \only<8>{${}_{\text{\alert{set+}}}$}}%
       
   379            \onslide<3->{^{R,\text{fv}}}\,\onslide<2->{(bs,y)}$
       
   380   \end{tabular}\bigskip
       
   381   \end{itemize}
       
   382 
       
   383   \only<1>{
       
   384   \begin{textblock}{8}(3,8.5)
       
   385   \begin{tabular}{l@ {\hspace{2mm}}p{8cm}}
       
   386    & $as$ is a set of names\ldots the binders\\
       
   387    & $x$ is the body (might be a tuple)\\
       
   388    & $\approx_{\text{set}}$ is where the cardinality 
       
   389   of the binders has to be the same\\
       
   390   \end{tabular}
       
   391   \end{textblock}}
       
   392 
       
   393   \only<4->{
       
   394   \begin{textblock}{12}(5,8)
       
   395   \begin{tabular}{ll@ {\hspace{1mm}}l}
       
   396   $\dn$ & \onslide<5->{$\exists \pi.\,$} & $\text{fv}(x) - as = \text{fv}(y) - bs$\\[1mm]
       
   397         & \onslide<5->{$\;\;\;\wedge$} & \onslide<5->{$\text{fv}(x) - as \fresh^* \pi$}\\[1mm]
       
   398         & \onslide<5->{$\;\;\;\wedge$} & \onslide<5->{$(\pi \act x)\;R\;y$}\\[1mm]
       
   399         & \onslide<6-7>{$\;\;\;\wedge$} & \onslide<6-7>{$\pi \act as = bs$}\\
       
   400   \end{tabular}
       
   401   \end{textblock}}
       
   402   
       
   403   \only<7>{
       
   404   \begin{textblock}{7}(3,13.8)
       
   405   \footnotesize $^*$ $as$ and $bs$ are \alert{lists} of names 
       
   406   \end{textblock}}
       
   407   \end{frame}}
       
   408   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   409 *}
       
   410 
       
   411 text_raw {*
       
   412   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   413   \mode<presentation>{
       
   414   \begin{frame}<1-3>
       
   415   \frametitle{\begin{tabular}{c}Examples\end{tabular}}
       
   416   \mbox{}\\[-3mm]
       
   417 
       
   418   \begin{itemize}
       
   419   \item lets look at ``type-schemes'':\medskip\medskip
       
   420 
       
   421   \begin{center}
       
   422   $(as, x) \approx\!\makebox[0mm][l]{${}_{\text{set}}$}\only<1>{{}^{R,\text{fv}}}\only<2->{{}^{\alert{=},\alert{\text{fv}}}} (bs, y)$
       
   423   \end{center}\medskip
       
   424 
       
   425   \onslide<2->{
       
   426   \begin{center}
       
   427   \begin{tabular}{l}
       
   428   $\text{fv}(x) = \{x\}$\\[1mm]
       
   429   $\text{fv}(T_1 \rightarrow T_2) = \text{fv}(T_1) \cup \text{fv}(T_2)$\\
       
   430   \end{tabular}
       
   431   \end{center}}
       
   432   \end{itemize}
       
   433 
       
   434   
       
   435   \only<3->{
       
   436   \begin{textblock}{4}(0.3,12)
       
   437   \begin{tikzpicture}
       
   438   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   439   {\tiny\color{darkgray}
       
   440   \begin{minipage}{3.4cm}\raggedright
       
   441   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   442   \multicolumn{2}{@ {}l}{set+:}\\
       
   443   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   444   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   445   $\wedge$ & $\pi \cdot x = y$\\
       
   446   \\
       
   447   \end{tabular}
       
   448   \end{minipage}};
       
   449   \end{tikzpicture}
       
   450   \end{textblock}}
       
   451   \only<3->{
       
   452   \begin{textblock}{4}(5.2,12)
       
   453   \begin{tikzpicture}
       
   454   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   455   {\tiny\color{darkgray}
       
   456   \begin{minipage}{3.4cm}\raggedright
       
   457   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   458   \multicolumn{2}{@ {}l}{set:}\\
       
   459   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   460   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   461   $\wedge$ & $\pi \cdot x = y$\\
       
   462   $\wedge$ & $\pi \cdot as = bs$\\
       
   463   \end{tabular}
       
   464   \end{minipage}};
       
   465   \end{tikzpicture}
       
   466   \end{textblock}}
       
   467   \only<3->{
       
   468   \begin{textblock}{4}(10.2,12)
       
   469   \begin{tikzpicture}
       
   470   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   471   {\tiny\color{darkgray}
       
   472   \begin{minipage}{3.4cm}\raggedright
       
   473   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   474   \multicolumn{2}{@ {}l}{list:}\\
       
   475   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   476   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   477   $\wedge$ & $\pi \cdot x = y$\\
       
   478   $\wedge$ & $\pi \cdot as = bs$\\
       
   479   \end{tabular}
       
   480   \end{minipage}};
       
   481   \end{tikzpicture}
       
   482   \end{textblock}}
       
   483 
       
   484   \end{frame}}
       
   485   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   486 *}
       
   487 
       
   488 text_raw {*
       
   489   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   490   \mode<presentation>{
       
   491   \begin{frame}<1-2>
       
   492   \frametitle{\begin{tabular}{c}Examples\end{tabular}}
       
   493   \mbox{}\\[-3mm]
       
   494 
       
   495   \begin{center}
       
   496   \only<1>{$(\{x, y\}, x \rightarrow y) \approx_? (\{x, y\}, y \rightarrow x)$}
       
   497   \only<2>{$([x, y], x \rightarrow y) \approx_? ([x, y], y \rightarrow x)$}
       
   498   \end{center}
       
   499 
       
   500   \begin{itemize}
       
   501   \item $\approx_{\text{set+}}$, $\approx_{\text{set}}$% 
       
   502   \only<2>{, \alert{$\not\approx_{\text{list}}$}}
       
   503   \end{itemize}
       
   504 
       
   505   
       
   506   \only<1->{
       
   507   \begin{textblock}{4}(0.3,12)
       
   508   \begin{tikzpicture}
       
   509   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   510   {\tiny\color{darkgray}
       
   511   \begin{minipage}{3.4cm}\raggedright
       
   512   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   513   \multicolumn{2}{@ {}l}{set+:}\\
       
   514   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   515   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   516   $\wedge$ & $\pi \cdot x = y$\\
       
   517   \\
       
   518   \end{tabular}
       
   519   \end{minipage}};
       
   520   \end{tikzpicture}
       
   521   \end{textblock}}
       
   522   \only<1->{
       
   523   \begin{textblock}{4}(5.2,12)
       
   524   \begin{tikzpicture}
       
   525   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   526   {\tiny\color{darkgray}
       
   527   \begin{minipage}{3.4cm}\raggedright
       
   528   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   529   \multicolumn{2}{@ {}l}{set:}\\
       
   530   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   531   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   532   $\wedge$ & $\pi \cdot x = y$\\
       
   533   $\wedge$ & $\pi \cdot as = bs$\\
       
   534   \end{tabular}
       
   535   \end{minipage}};
       
   536   \end{tikzpicture}
       
   537   \end{textblock}}
       
   538   \only<1->{
       
   539   \begin{textblock}{4}(10.2,12)
       
   540   \begin{tikzpicture}
       
   541   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   542   {\tiny\color{darkgray}
       
   543   \begin{minipage}{3.4cm}\raggedright
       
   544   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   545   \multicolumn{2}{@ {}l}{list:}\\
       
   546   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   547   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   548   $\wedge$ & $\pi \cdot x = y$\\
       
   549   $\wedge$ & $\pi \cdot as = bs$\\
       
   550   \end{tabular}
       
   551   \end{minipage}};
       
   552   \end{tikzpicture}
       
   553   \end{textblock}}
       
   554 
       
   555   \end{frame}}
       
   556   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   557 *}
       
   558 
       
   559 text_raw {*
       
   560   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   561   \mode<presentation>{
       
   562   \begin{frame}<1-2>
       
   563   \frametitle{\begin{tabular}{c}Examples\end{tabular}}
       
   564   \mbox{}\\[-3mm]
       
   565 
       
   566   \begin{center}
       
   567   \only<1>{$(\{x\}, x) \approx_? (\{x, y\}, x)$}
       
   568   \end{center}
       
   569 
       
   570   \begin{itemize}
       
   571   \item $\approx_{\text{set+}}$, $\not\approx_{\text{set}}$,
       
   572         $\not\approx_{\text{list}}$
       
   573   \end{itemize}
       
   574 
       
   575   
       
   576   \only<1->{
       
   577   \begin{textblock}{4}(0.3,12)
       
   578   \begin{tikzpicture}
       
   579   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   580   {\tiny\color{darkgray}
       
   581   \begin{minipage}{3.4cm}\raggedright
       
   582   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   583   \multicolumn{2}{@ {}l}{set+:}\\
       
   584   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   585   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   586   $\wedge$ & $\pi \cdot x = y$\\
       
   587   \\
       
   588   \end{tabular}
       
   589   \end{minipage}};
       
   590   \end{tikzpicture}
       
   591   \end{textblock}}
       
   592   \only<1->{
       
   593   \begin{textblock}{4}(5.2,12)
       
   594   \begin{tikzpicture}
       
   595   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   596   {\tiny\color{darkgray}
       
   597   \begin{minipage}{3.4cm}\raggedright
       
   598   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   599   \multicolumn{2}{@ {}l}{set:}\\
       
   600   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   601   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   602   $\wedge$ & $\pi \cdot x = y$\\
       
   603   $\wedge$ & $\pi \cdot as = bs$\\
       
   604   \end{tabular}
       
   605   \end{minipage}};
       
   606   \end{tikzpicture}
       
   607   \end{textblock}}
       
   608   \only<1->{
       
   609   \begin{textblock}{4}(10.2,12)
       
   610   \begin{tikzpicture}
       
   611   \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   612   {\tiny\color{darkgray}
       
   613   \begin{minipage}{3.4cm}\raggedright
       
   614   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   615   \multicolumn{2}{@ {}l}{list:}\\
       
   616   $\exists\pi.$ & $\text{fv}(x) - as = \text{fv}(y) - bs$\\
       
   617   $\wedge$ & $\text{fv}(x) - as \fresh^* \pi$\\
       
   618   $\wedge$ & $\pi \cdot x = y$\\
       
   619   $\wedge$ & $\pi \cdot as = bs$\\
       
   620   \end{tabular}
       
   621   \end{minipage}};
       
   622   \end{tikzpicture}
       
   623   \end{textblock}}
       
   624 
       
   625   \only<2>{
       
   626   \begin{textblock}{6}(2.5,4)
       
   627   \begin{tikzpicture}
       
   628   \draw (0,0) node[inner sep=5mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   629   {\normalsize
       
   630   \begin{minipage}{8cm}\raggedright
       
   631   \begin{itemize}
       
   632   \item \color{darkgray}$\alpha$-equivalences coincide when a single name is
       
   633   abstracted
       
   634   \item \color{darkgray}in that case they are equivalent to ``old-fashioned'' definitions of $\alpha$ 
       
   635   \end{itemize}
       
   636   \end{minipage}};
       
   637   \end{tikzpicture}
       
   638   \end{textblock}}
       
   639 
       
   640   \end{frame}}
       
   641   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   642 *}
       
   643 
       
   644 text_raw {*
       
   645   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   646   \mode<presentation>{
       
   647   \begin{frame}<1-3>
       
   648   \frametitle{\begin{tabular}{c}General Abstractions\end{tabular}}
       
   649   \mbox{}\\[-7mm]
       
   650 
       
   651   \begin{itemize}
       
   652   \item we take $(as, x) \approx\!\makebox[0mm][l]{${}_{{}*{}}$}^{=,\text{supp}} (bs, y)$\medskip
       
   653   \item they are equivalence relations\medskip  
       
   654   \item we can therefore use the quotient package to introduce the 
       
   655   types $\beta\;\text{abs}_*$\bigskip 
       
   656   \begin{center}
       
   657   \only<1>{$[as].\,x$}
       
   658   \only<2>{$\text{supp}([as].x) = \text{supp}(x) - as$}
       
   659   \only<3>{%
       
   660   \begin{tabular}{r@ {\hspace{1mm}}l}
       
   661   \multicolumn{2}{@ {\hspace{-7mm}}l}{$[as]. x \alert{=}  [bs].y\;\;\;\text{if\!f}$}\\[2mm]
       
   662   $\exists \pi.$ & $\text{supp}(x) - as = \text{supp}(y) - bs$\\
       
   663   $\wedge$       & $\text{supp}(x) - as \fresh^* \pi$\\
       
   664   $\wedge$       & $\pi \act x = y $\\
       
   665   $(\wedge$       & $\pi \act as = bs)\;^*$\\
       
   666   \end{tabular}}
       
   667   \end{center}
       
   668   \end{itemize}
       
   669 
       
   670   \only<1->{
       
   671   \begin{textblock}{8}(12,3.8)
       
   672   \footnotesize $^*$ set, set+, list
       
   673   \end{textblock}}
       
   674   
       
   675   \end{frame}}
       
   676   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   677 *}
       
   678 
       
   679 text_raw {*
       
   680   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   681   \mode<presentation>{
       
   682   \begin{frame}<1>
       
   683   \frametitle{\begin{tabular}{c}A Problem\end{tabular}}
       
   684   \mbox{}\\[-3mm]
       
   685 
       
   686   \begin{center}
       
   687   $\text{let}\;x_1=t_1 \ldots x_n=t_n\;\text{in}\;s$
       
   688   \end{center}
       
   689 
       
   690   \begin{itemize}
       
   691   \item we cannot represent this as\medskip
       
   692   \begin{center}
       
   693   $\text{let}\;[x_1,\ldots,x_n]\alert{.}s\;\;[t_1,\ldots,t_n]$
       
   694   \end{center}\bigskip
       
   695 
       
   696   because\medskip
       
   697   \begin{center}
       
   698   $\text{let}\;[x].s\;\;[t_1,t_2]$
       
   699   \end{center}
       
   700   \end{itemize}
       
   701 
       
   702   
       
   703   \end{frame}}
       
   704   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   705 *}
       
   706 
       
   707 text_raw {*
       
   708   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   709   \mode<presentation>{
       
   710   \begin{frame}<1->
       
   711   \frametitle{\begin{tabular}{c}Our Specifications\end{tabular}}
       
   712   \mbox{}\\[-6mm]
       
   713 
       
   714   \mbox{}\hspace{10mm}
       
   715   \begin{tabular}{ll}
       
   716   \multicolumn{2}{l}{\isacommand{nominal\_datatype} trm $=$}\\
       
   717   \hspace{5mm}\phantom{$|$} Var name\\
       
   718   \hspace{5mm}$|$ App trm trm\\
       
   719   \hspace{5mm}$|$ Lam x::name t::trm
       
   720   & \isacommand{bind} x \isacommand{in} t\\
       
   721   \hspace{5mm}$|$ Let as::assn t::trm
       
   722   & \isacommand{bind} bn(as) \isacommand{in} t\\
       
   723   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
       
   724   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
       
   725   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\
       
   726   \multicolumn{2}{l}{\isacommand{binder} bn \isacommand{where}}\\
       
   727   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $[]$}\\
       
   728   \multicolumn{2}{l}{\hspace{5mm}$|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)}\\
       
   729   \end{tabular}
       
   730 
       
   731   \end{frame}}
       
   732   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   733 *}
       
   734 
       
   735 text_raw {*
       
   736   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   737   \mode<presentation>{
       
   738   \begin{frame}<1-2>
       
   739   \frametitle{\begin{tabular}{c}``Raw'' Definitions\end{tabular}}
       
   740   \mbox{}\\[-6mm]
       
   741 
       
   742   \mbox{}\hspace{10mm}
       
   743   \begin{tabular}{ll}
       
   744   \multicolumn{2}{l}{\isacommand{datatype} trm $=$}\\
       
   745   \hspace{5mm}\phantom{$|$} Var name\\
       
   746   \hspace{5mm}$|$ App trm trm\\
       
   747   \hspace{5mm}$|$ Lam name trm\\
       
   748   \hspace{5mm}$|$ Let assn trm\\
       
   749   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
       
   750   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
       
   751   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\[5mm]
       
   752   \multicolumn{2}{l}{\isacommand{function} bn \isacommand{where}}\\
       
   753   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $[]$}\\
       
   754   \multicolumn{2}{l}{\hspace{5mm}$|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)}\\
       
   755   \end{tabular}
       
   756 
       
   757   \only<2>{
       
   758   \begin{textblock}{5}(10,5)
       
   759   $+$ \begin{tabular}{l}automatically\\ 
       
   760   generate fv's\end{tabular}
       
   761   \end{textblock}}
       
   762   \end{frame}}
       
   763   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   764 *}
       
   765 
       
   766 text_raw {*
       
   767   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   768   \mode<presentation>{
       
   769   \begin{frame}<1>
       
   770   \frametitle{\begin{tabular}{c}\LARGE``Raw'' Alpha-Equivalence\end{tabular}}
       
   771   \mbox{}\\[6mm]
       
   772 
       
   773   \begin{center}
       
   774   Lam x::name t::trm \hspace{10mm}\isacommand{bind} x \isacommand{in} t\\
       
   775   \end{center}
       
   776 
       
   777 
       
   778   \[
       
   779   \infer[\text{Lam-}\!\approx_\alpha]
       
   780   {\text{Lam}\;x\;t \approx_\alpha \text{Lam}\;x'\;t'}
       
   781   {([x], t) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
       
   782     ^{\approx_\alpha,\text{fv}} ([x'], t')}
       
   783   \]
       
   784 
       
   785 
       
   786   \end{frame}}
       
   787   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   788 *}
       
   789 
       
   790 text_raw {*
       
   791   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   792   \mode<presentation>{
       
   793   \begin{frame}<1>
       
   794   \frametitle{\begin{tabular}{c}\LARGE``Raw'' Alpha-Equivalence\end{tabular}}
       
   795   \mbox{}\\[6mm]
       
   796 
       
   797   \begin{center}
       
   798   Lam x::name y::name t::trm s::trm \hspace{5mm}\isacommand{bind} x y \isacommand{in} t s\\
       
   799   \end{center}
       
   800 
       
   801 
       
   802   \[
       
   803   \infer[\text{Lam-}\!\approx_\alpha]
       
   804   {\text{Lam}\;x\;y\;t\;s \approx_\alpha \text{Lam}\;x'\;y'\;t'\;s'}
       
   805   {([x, y], (t, s)) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
       
   806     ^{R, fv} ([x', y'], (t', s'))}
       
   807   \]
       
   808 
       
   809   \footnotesize
       
   810   where $R =\;\approx_\alpha\times\approx_\alpha$ and $fv = \text{fv}\cup\text{fv}$
       
   811 
       
   812   \end{frame}}
       
   813   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   814 *}
       
   815 
       
   816 text_raw {*
       
   817   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   818   \mode<presentation>{
       
   819   \begin{frame}<1-2>
       
   820   \frametitle{\begin{tabular}{c}\LARGE``Raw'' Alpha-Equivalence\end{tabular}}
       
   821   \mbox{}\\[6mm]
       
   822 
       
   823   \begin{center}
       
   824   Let as::assn t::trm \hspace{10mm}\isacommand{bind} bn(as) \isacommand{in} t\\
       
   825   \end{center}
       
   826 
       
   827 
       
   828   \[
       
   829   \infer[\text{Let-}\!\approx_\alpha]
       
   830   {\text{Let}\;as\;t \approx_\alpha \text{Let}\;as'\;t'}
       
   831   {(\text{bn}(as), t) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
       
   832     ^{\approx_\alpha,\text{fv}} (\text{bn}(as'), t') &
       
   833    \onslide<2->{as \approx_\alpha^{\text{bn}} as'}}
       
   834   \]\bigskip
       
   835 
       
   836 
       
   837   \onslide<1->{\small{}bn-function $\Rightarrow$ \alert{deep binders}}
       
   838   \end{frame}}
       
   839   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   840 *}
       
   841 
       
   842 
       
   843 text_raw {*
       
   844   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   845   \mode<presentation>{
       
   846   \begin{frame}<1->
       
   847   \frametitle{\begin{tabular}{c}\LARGE{}$\alpha$ for Binding Functions\end{tabular}}
       
   848   \mbox{}\\[-6mm]
       
   849 
       
   850   \mbox{}\hspace{10mm}
       
   851   \begin{tabular}{l}
       
   852   \ldots\\
       
   853   \isacommand{binder} bn \isacommand{where}\\
       
   854   \phantom{$|$} bn(ANil) $=$ $[]$\\
       
   855   $|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)\\
       
   856   \end{tabular}\bigskip
       
   857 
       
   858   \begin{center}
       
   859   \mbox{\infer{\text{ANil} \approx_\alpha^{\text{bn}} \text{ANil}}{}}\bigskip
       
   860 
       
   861   \mbox{\infer{\text{ACons}\;a\;t\;as \approx_\alpha^{\text{bn}} \text{ACons}\;a'\;t'\;as'}
       
   862   {t \approx_\alpha t' & as \approx_\alpha^{bn} as'}}
       
   863   \end{center}
       
   864 
       
   865 
       
   866   \end{frame}}
       
   867   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   868 *}
       
   869 
       
   870 
       
   871 text_raw {*
       
   872   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   873   \mode<presentation>{
       
   874   \begin{frame}<1>
       
   875   \frametitle{\begin{tabular}{c}\LARGE``Raw'' Alpha-Equivalence\end{tabular}}
       
   876   \mbox{}\\[6mm]
       
   877 
       
   878   \begin{center}
       
   879   LetRec as::assn t::trm \hspace{10mm}\isacommand{bind} bn(as) \isacommand{in} t \alert{as}\\
       
   880   \end{center}
       
   881 
       
   882 
       
   883   \[\mbox{}\hspace{-4mm}
       
   884   \infer[\text{LetRec-}\!\approx_\alpha]
       
   885   {\text{LetRec}\;as\;t \approx_\alpha \text{LetRec}\;as'\;t'}
       
   886   {(\text{bn}(as), (t, as)) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
       
   887     ^{R,\text{fv}} (\text{bn}(as'), (t', as'))} 
       
   888   \]\bigskip
       
   889   
       
   890   \onslide<1->{\alert{deep recursive binders}}
       
   891   \end{frame}}
       
   892   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   893 *}
       
   894 
       
   895 text_raw {*
       
   896   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   897   \mode<presentation>{
       
   898   \begin{frame}<1->
       
   899   \frametitle{\begin{tabular}{c}Restrictions\end{tabular}}
       
   900   \mbox{}\\[-6mm]
       
   901 
       
   902   Our restrictions on binding specifications:
       
   903 
       
   904   \begin{itemize}
       
   905   \item a body can only occur once in a list of binding clauses\medskip
       
   906   \item you can only have one binding function for a deep binder\medskip
       
   907   \item binding functions can return: the empty set, singletons, unions (similarly for lists)
       
   908   \end{itemize}
       
   909 
       
   910 
       
   911   \end{frame}}
       
   912   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   913 *}
       
   914 
       
   915 text_raw {*
       
   916   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   917   \mode<presentation>{
       
   918   \begin{frame}<1->
       
   919   \frametitle{\begin{tabular}{c}Automatic Proofs\end{tabular}}
       
   920   \mbox{}\\[-6mm]
       
   921 
       
   922   \begin{itemize}
       
   923   \item we can show that $\alpha$'s are equivalence relations\medskip
       
   924   \item as a result we can use our quotient package to introduce the type(s)
       
   925   of $\alpha$-equated terms
       
   926 
       
   927   \[
       
   928   \infer
       
   929   {\text{Lam}\;x\;t \alert{=} \text{Lam}\;x'\;t'}
       
   930   {\only<1>{([x], t) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
       
   931     ^{=,\text{supp}} ([x'], t')}%
       
   932    \only<2>{[x].t = [x'].t'}}
       
   933   \]
       
   934 
       
   935 
       
   936   \item the properties for support are implied by the properties of $[\_].\_$
       
   937   \item we can derive strong induction principles
       
   938   \end{itemize}
       
   939 
       
   940 
       
   941   \end{frame}}
       
   942   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   943 *}
       
   944 
       
   945 text_raw {*
       
   946   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   947   \mode<presentation>{
       
   948   \begin{frame}<1>[t]
       
   949   \frametitle{\begin{tabular}{c}Runtime is Acceptable\end{tabular}}
       
   950   \mbox{}\\[-7mm]\mbox{}
       
   951 
       
   952   \footnotesize
       
   953   \begin{center}
       
   954   \begin{tikzpicture}
       
   955   \draw (0,0) node[inner sep=2mm, ultra thick, draw=fg, rounded corners=2mm]
       
   956   (A) {\begin{minipage}{0.8cm}bind.\\spec.\end{minipage}};
       
   957   
       
   958   \draw (2,0) node[inner sep=2mm, ultra thick, draw=fg, rounded corners=2mm]
       
   959   (B) {\begin{minipage}{0.8cm}raw\\terms\end{minipage}};
       
   960 
       
   961   \draw (4,0) node[inner sep=2mm, ultra thick, draw=fg, rounded corners=2mm]
       
   962   (C) {\begin{minipage}{0.8cm}$\alpha$-\\equiv.\end{minipage}};
       
   963   
       
   964   \draw (0,-2) node[inner sep=2mm, ultra thick, draw=fg, rounded corners=2mm]
       
   965   (D) {\begin{minipage}{0.8cm}quot.\\type\end{minipage}};
       
   966 
       
   967   \draw (2,-2) node[inner sep=2mm, ultra thick, draw=fg, rounded corners=2mm]
       
   968   (E) {\begin{minipage}{0.8cm}lift\\thms\end{minipage}};
       
   969 
       
   970   \draw (4,-2) node[inner sep=2mm, ultra thick, draw=fg, rounded corners=2mm]
       
   971   (F) {\begin{minipage}{0.8cm}add.\\thms\end{minipage}};
       
   972   
       
   973   \draw[->,fg!50,line width=1mm] (A) -- (B);
       
   974   \draw[->,fg!50,line width=1mm] (B) -- (C);
       
   975   \draw[->,fg!50,line width=1mm, line join=round, rounded corners=2mm] 
       
   976   (C) -- (5,0) -- (5,-1) -- (-1,-1) -- (-1,-2) -- (D);
       
   977   \draw[->,fg!50,line width=1mm] (D) -- (E);
       
   978   \draw[->,fg!50,line width=1mm] (E) -- (F);
       
   979   \end{tikzpicture}
       
   980   \end{center}
       
   981 
       
   982   \begin{itemize}
       
   983   \item Core Haskell: 11 types, 49 term-constructors, 7 binding functions
       
   984   \begin{center}
       
   985   $\sim$ 2 mins
       
   986   \end{center}
       
   987   \end{itemize}
       
   988 
       
   989   \end{frame}}
       
   990   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   991 *}
       
   992 
       
   993 
       
   994 text_raw {*
       
   995   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   996   \mode<presentation>{
       
   997   \begin{frame}<1->
       
   998   \frametitle{\begin{tabular}{c}Interesting Phenomenon\end{tabular}}
       
   999   \mbox{}\\[-6mm]
       
  1000 
       
  1001   \small
       
  1002   \mbox{}\hspace{20mm}
       
  1003   \begin{tabular}{ll}
       
  1004   \multicolumn{2}{l}{\isacommand{nominal\_datatype} trm $=$}\\
       
  1005   \hspace{5mm}\phantom{$|$} Var name\\
       
  1006   \hspace{5mm}$|$ App trm trm\\
       
  1007   \hspace{5mm}$|$ Lam x::name t::trm
       
  1008   & \isacommand{bind} x \isacommand{in} t\\
       
  1009   \hspace{5mm}$|$ Let as::assn t::trm
       
  1010   & \isacommand{bind} bn(as) \isacommand{in} t\\
       
  1011   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
       
  1012   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
       
  1013   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\
       
  1014   \multicolumn{2}{l}{\isacommand{binder} bn \isacommand{where}}\\
       
  1015   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $[]$}\\
       
  1016   \multicolumn{2}{l}{\hspace{5mm}$|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)}\\
       
  1017   \end{tabular}\bigskip\medskip
       
  1018 
       
  1019   we cannot quotient assn: ACons a \ldots $\not\approx_\alpha$ ACons b \ldots
       
  1020 
       
  1021   \only<1->{
       
  1022   \begin{textblock}{8}(0.2,7.3)
       
  1023   \alert{\begin{tabular}{p{2.6cm}}
       
  1024   \raggedright\footnotesize{}Should a ``naked'' assn be quotient?
       
  1025   \end{tabular}\hspace{-3mm}
       
  1026   $\begin{cases}
       
  1027   \mbox{} \\ \mbox{}
       
  1028   \end{cases}$} 
       
  1029   \end{textblock}}
       
  1030   \end{frame}}
       
  1031   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
  1032 *}
       
  1033 
       
  1034 text_raw {*
       
  1035   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1036   \mode<presentation>{
       
  1037   \begin{frame}<1->
       
  1038   \frametitle{\begin{tabular}{c}Conclusion\end{tabular}}
       
  1039   \mbox{}\\[-6mm]
       
  1040 
       
  1041   \begin{itemize}
       
  1042   \item the user does not see anything of the raw level\medskip
       
  1043   \only<1>{\begin{center}
       
  1044   Lam a (Var a) \alert{$=$} Lam b (Var b)
       
  1045   \end{center}\bigskip}
       
  1046 
       
  1047   \item<2-> we have not yet done function definitions (will come soon and
       
  1048   we hope to make improvements over the old way there too)\medskip
       
  1049   \item<3-> it took quite some time to get here, but it seems worthwhile 
       
  1050   (Barendregt's variable convention is unsound in general, 
       
  1051   found bugs in two paper proofs, quotient package, POPL 2011 tutorial)\medskip
       
  1052   \end{itemize}
       
  1053 
       
  1054 
       
  1055   \end{frame}}
       
  1056   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
  1057 *}
       
  1058 
       
  1059 text_raw {*
       
  1060   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1061   \mode<presentation>{
       
  1062   \begin{frame}<1->[c]
       
  1063   \frametitle{\begin{tabular}{c}Future Work\end{tabular}}
       
  1064   \mbox{}\\[-6mm]
       
  1065 
       
  1066   \begin{itemize}
       
  1067   \item Function definitions 
       
  1068   \end{itemize}
       
  1069   
       
  1070   \end{frame}}
       
  1071   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
  1072 *}
       
  1073 
       
  1074 
       
  1075 text_raw {*
       
  1076   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1077   \mode<presentation>{
       
  1078   \begin{frame}<1->[c]
       
  1079   \frametitle{\begin{tabular}{c}Questions?\end{tabular}}
       
  1080   \mbox{}\\[-6mm]
       
  1081 
       
  1082   \begin{center}
       
  1083   \alert{\huge{Thanks!}}
       
  1084   \end{center}
       
  1085   
       
  1086   \end{frame}}
       
  1087   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
  1088 *}
       
  1089 
       
  1090 
       
  1091 
       
  1092 text_raw {*
       
  1093   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
  1094   \mode<presentation>{
       
  1095   \begin{frame}<1-2>[c]
       
  1096   \frametitle{\begin{tabular}{c}Examples\end{tabular}}
       
  1097   \mbox{}\\[-6mm]
       
  1098 
       
  1099   \begin{center}
       
  1100   $(\{a,b\}, a \rightarrow b) \approx_\alpha (\{a, b\}, a \rightarrow b)$
       
  1101   $(\{a,b\}, a \rightarrow b) \approx_\alpha (\{a, b\}, b \rightarrow a)$
       
  1102   \end{center}
       
  1103 
       
  1104   \begin{center}
       
  1105   $(\{a,b\}, (a \rightarrow b, a \rightarrow b))$\\ 
       
  1106   \hspace{17mm}$\not\approx_\alpha (\{a, b\}, (a \rightarrow b, b \rightarrow a))$
       
  1107   \end{center}
       
  1108   
       
  1109   \onslide<2->
       
  1110   {1.) \hspace{3mm}\isacommand{bind (set)} as \isacommand{in} $\tau_1$, 
       
  1111    \isacommand{bind (set)} as \isacommand{in} $\tau_2$\medskip
       
  1112 
       
  1113    2.) \hspace{3mm}\isacommand{bind (set)} as \isacommand{in} $\tau_1$ $\tau_2$ 
       
  1114   }
       
  1115 
       
  1116   \end{frame}}
       
  1117   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
  1118 *}
       
  1119 
       
  1120 (*<*)
       
  1121 end
       
  1122 (*>*)