Slides/Slides1.thy
changeset 2309 13f20fe02ff3
parent 2304 8a98171ba1fc
child 2311 4da5c5c29009
equal deleted inserted replaced
2308:387fcbd33820 2309:13f20fe02ff3
     9 
     9 
    10 (*>*)
    10 (*>*)
    11 
    11 
    12 
    12 
    13 text_raw {*
    13 text_raw {*
    14   \renewcommand{\slidecaption}{TU Munich, 28.~May 2010}
    14   \renewcommand{\slidecaption}{Cambridge, 8.~June 2010}
    15   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    15   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    16   \mode<presentation>{
    16   \mode<presentation>{
    17   \begin{frame}<1>[t]
    17   \begin{frame}<1>[t]
    18   \frametitle{%
    18   \frametitle{%
    19   \begin{tabular}{@ {\hspace{-3mm}}c@ {}}
    19   \begin{tabular}{@ {\hspace{-3mm}}c@ {}}
    20   \\
    20   \\
    21   \huge Nominal 2\\[-2mm] 
    21   \huge Nominal 2\\[-2mm] 
    22   \large Or, How to Reason Conveniently with\\[-5mm]
    22   \large Or, How to Reason Conveniently with\\[-5mm]
    23   \large General Bindings in Isabelle\\[15mm]
    23   \large General Bindings in Isabelle/HOL\\[5mm]
    24   \end{tabular}}
    24   \end{tabular}}
    25   \begin{center}
    25   \begin{center}
    26   joint work with {\bf Cezary} and Brian Huf\!fman\\[0mm] 
    26   Christian Urban
       
    27   \end{center}
       
    28   \begin{center}
       
    29   joint work with {\bf Cezary Kaliszyk}\\[0mm] 
    27   \end{center}
    30   \end{center}
    28   \end{frame}}
    31   \end{frame}}
    29   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    32   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    30 
    33 
    31 *}
    34 *}
    32 
    35 
    33 text_raw {*
    36 text_raw {*
    34   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    37   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    35   \mode<presentation>{
    38   \mode<presentation>{
    36   \begin{frame}<1-2>
    39   \begin{frame}<1-2>
    37   \frametitle{\begin{tabular}{c}Part I: Nominal Theory\end{tabular}}
    40   \frametitle{\begin{tabular}{c}Binding in Old Nominal\end{tabular}}
    38   \mbox{}\\[-3mm]
       
    39 
       
    40   \begin{itemize}
       
    41   \item sorted atoms and sort-respecting permutations\medskip
       
    42 
       
    43   \onslide<2->{
       
    44   \item[] in old Nominal: atoms have \underline{dif\!ferent} type\medskip
       
    45 
       
    46   \begin{center}
       
    47   \begin{tabular}{c@ {\hspace{7mm}}c}
       
    48   $[]\;\act\;c \dn c$ &
       
    49   $(a\;b)\!::\!\pi\;\act\;c \dn$ 
       
    50   $\begin{cases}
       
    51   b & \text{if}\; \pi \act c = a\\
       
    52   a & \text{if}\; \pi \act c = b\\
       
    53   \pi \act c & \text{otherwise}
       
    54   \end{cases}$
       
    55   \end{tabular}
       
    56   \end{center}}
       
    57   \end{itemize}
       
    58 
       
    59   \end{frame}}
       
    60   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    61 *}
       
    62 
       
    63 text_raw {*
       
    64   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    65   \mode<presentation>{
       
    66   \begin{frame}<1>
       
    67   \frametitle{\begin{tabular}{c}Problems\end{tabular}}
       
    68   \mbox{}\\[-3mm]
       
    69 
       
    70   \begin{itemize}
       
    71   \item @{text "_ \<bullet> _ :: \<alpha> perm \<Rightarrow> \<beta> \<Rightarrow> \<beta>"}\bigskip
       
    72 
       
    73   \item @{text "supp _ :: \<beta> \<Rightarrow> \<alpha> set"}
       
    74 
       
    75   \begin{center}
       
    76   $\text{finite} (\text{supp}\;x)_{\,\alpha_1\,\text{set}}$ \ldots 
       
    77   $\text{finite} (\text{supp}\;x)_{\,\alpha_n\,\text{set}}$
       
    78   \end{center}\bigskip
       
    79   
       
    80   \item $\forall \pi_{\alpha_1} \ldots \pi_{\alpha_n}\;.\; P$\bigskip
       
    81 
       
    82   \item type-classes
       
    83   \end{itemize}
       
    84 
       
    85   \end{frame}}
       
    86   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    87 *}
       
    88 
       
    89 text_raw {*
       
    90   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    91   \mode<presentation>{
       
    92   \begin{frame}<1-4>
       
    93   \frametitle{\begin{tabular}{c}Our New Solution\end{tabular}}
       
    94   \mbox{}\\[-3mm]
       
    95 *}
       
    96 datatype atom = Atom string nat
       
    97 
       
    98 text_raw {*
       
    99   \mbox{}\bigskip
       
   100   \begin{itemize}
       
   101   \item<2-> permutations are (restricted) bijective functions from @{text "atom \<Rightarrow> atom"}
       
   102 
       
   103      \begin{itemize}
       
   104      \item sort-respecting \hspace{5mm}($\forall a.\;\text{sort}(f a) = \text{sort}(a)$)
       
   105      \item finite domain \hspace{5mm}($\text{finite} \{a.\;f a \not= a\}$)
       
   106      \end{itemize}\medskip
       
   107 
       
   108   \item<3-> swappings:
       
   109      \small
       
   110      \[
       
   111      \begin{array}{l@ {\hspace{1mm}}l}
       
   112      (a\;b) \dn & \text{if}\;\text{sort}(a) = \text{sort}(b)\\
       
   113         & \text{then}\;\lambda  c. \text{if}\;a = c\;\text{then}\;b\;\text{else}\;
       
   114           \text{if}\;b = c\;\text{then}\;a\;\text{else}\;c\\
       
   115         & \text{else}\;\only<3>{\mbox{\textcolor{red}{\bf ?}}}\only<4->{\text{id}}
       
   116      \end{array}
       
   117      \]
       
   118   \end{itemize}
       
   119 
       
   120   \end{frame}}
       
   121   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   122 *}
       
   123 
       
   124 text_raw {*
       
   125   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   126   \mode<presentation>{
       
   127   \begin{frame}<1-6>
       
   128   \frametitle{\begin{tabular}{c}\LARGE{}A Smoother Nominal Theory\end{tabular}}
       
   129   \mbox{}\\[-3mm]
       
   130 
       
   131   \begin{itemize}
       
   132   \item<1-> $(a\;b) = (b\;a) \onslide<3->{= (a\;c) + (b\;c) + (a\;c)}$\bigskip  
       
   133 
       
   134   \item<2-> permutations are an instance of group\_add\\ $0$, $\pi_1 + \pi_2$, $- \pi$\bigskip
       
   135 
       
   136   \item<5-> $\_\;\act\;\_ :: \text{perm} \Rightarrow \alpha \Rightarrow \alpha$\medskip
       
   137   
       
   138    \begin{itemize}
       
   139    \item $0\;\act\;x = x$\\
       
   140    \item $(\pi_1 + \pi_2)\;\act\;x = \pi_1\;\act\;(\pi_2\;\act\;x)$
       
   141    \end{itemize}
       
   142 
       
   143    \small
       
   144    \onslide<6->{$\text{finite}(\text{supp}\;x)$, $\forall \pi. P$}
       
   145   \end{itemize}
       
   146 
       
   147   \only<4>{
       
   148   \begin{textblock}{6}(2.5,11)
       
   149   \begin{tikzpicture}
       
   150   \draw (0,0) node[inner sep=3mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
       
   151   {\normalsize\color{darkgray}
       
   152   \begin{minipage}{8cm}\raggedright
       
   153   This is slightly odd, since in general: 
       
   154   \begin{center}$\pi_1 + \pi_2 \alert{\not=} \pi_2 + \pi_1$\end{center}
       
   155   \end{minipage}};
       
   156   \end{tikzpicture}
       
   157   \end{textblock}}
       
   158 
       
   159   \end{frame}}
       
   160   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   161 *}
       
   162 
       
   163 text_raw {*
       
   164   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   165   \mode<presentation>{
       
   166   \begin{frame}<1-3>
       
   167   \frametitle{\begin{tabular}{c}Very Few Snatches\end{tabular}}
       
   168   \mbox{}\\[-3mm]
       
   169 
       
   170   \begin{itemize}
       
   171   \item \underline{concrete} atoms:
       
   172   \end{itemize}
       
   173 *}
       
   174 (*<*)
       
   175 consts sort :: "atom \<Rightarrow> string"
       
   176 (*>*)
       
   177 
       
   178 typedef name = "{a :: atom. sort a = ''name''}" (*<*)sorry(*>*)
       
   179 typedef ident = "{a :: atom. sort a = ''ident''}" (*<*)sorry(*>*)
       
   180 
       
   181 text_raw {*
       
   182   \mbox{}\bigskip\bigskip
       
   183   \begin{itemize}
       
   184   \item<2-> there is an overloaded  function \underline{atom}, which injects concrete 
       
   185   atoms into generic ones\medskip 
       
   186   \begin{center}
       
   187   \begin{tabular}{l}
       
   188   $\text{atom}(a) \fresh x$\\
       
   189   $(a \leftrightarrow b) \dn (\text{atom}(a)\;\;\text{atom}(b))$
       
   190   \end{tabular}
       
   191   \end{center}\bigskip\medskip
       
   192 
       
   193   \onslide<3->
       
   194   {I would like to have $a \fresh x$, $(a\; b)$, \ldots}
       
   195 
       
   196   \end{itemize}
       
   197 
       
   198   \end{frame}}
       
   199   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   200 *}
       
   201 
       
   202 text_raw {*
       
   203   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   204   \mode<presentation>{
       
   205   \begin{frame}<1-2>[c]
       
   206   \frametitle{\begin{tabular}{c}\LARGE{}End of Part I\end{tabular}}
       
   207   \mbox{}\\[-3mm]
       
   208 
       
   209   \begin{itemize}
       
   210   \item the formalised version of the nominal theory is now much nicer to 
       
   211   work with (sorts are occasionally explicit)\bigskip
       
   212 
       
   213   \item permutations: ``be as abstract as you can'' (group\_add is a slight oddity)\bigskip
       
   214 
       
   215   \item allow sort-disrespecting swappings\onslide<2->{: just define them as the identity}
       
   216   \end{itemize}
       
   217 
       
   218   
       
   219   \end{frame}}
       
   220   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   221 *}
       
   222 
       
   223 text_raw {*
       
   224   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   225   \mode<presentation>{
       
   226   \begin{frame}<1-2>
       
   227   \frametitle{\begin{tabular}{c}\LARGE{}Part II: General Bindings\end{tabular}}
       
   228   \mbox{}\\[-6mm]
    41   \mbox{}\\[-6mm]
   229 
    42 
   230   \begin{itemize}
    43   \begin{itemize}
   231   \item old Nominal provided a reasoning infrastructure for single binders\medskip
    44   \item old Nominal provided a reasoning infrastructure for single binders\medskip
   232   
    45   
   238 
    51 
   239   \begin{center}
    52   \begin{center}
   240   $\forall\{a_1,\ldots,a_n\}.\; T$ 
    53   $\forall\{a_1,\ldots,a_n\}.\; T$ 
   241   \end{center}\medskip
    54   \end{center}\medskip
   242 
    55 
   243   with single binders is a \alert{major} pain; take my word for it!
    56   with single binders and reasoning about it is a \alert{\bf major} pain; 
       
    57   take my word for it!
   244   \end{itemize}
    58   \end{itemize}
   245 
    59 
   246   \only<1>{
    60   \only<1>{
   247   \begin{textblock}{6}(1.5,11)
    61   \begin{textblock}{6}(1.5,11)
   248   \small
    62   \small
   249   for example\\
    63   for example\\
   250   \begin{tabular}{l@ {\hspace{2mm}}l}
    64   \begin{tabular}{l@ {\hspace{2mm}}l}
   251   \pgfuseshading{smallspherered} & a $\fresh$ Lam [a]. t\\
    65   \pgfuseshading{smallspherered} & a $\fresh$ Lam [a]. t\\
   252   \pgfuseshading{smallspherered} & Lam [a]. (Var a) \alert{$=$} Lam [b]. (Var b)\\
    66   \pgfuseshading{smallspherered} & Lam [a]. (Var a) \alert{$=$} Lam [b]. (Var b)\\
       
    67   \pgfuseshading{smallspherered} & Barendregt style reasoning about bound variables\\
   253   \end{tabular}
    68   \end{tabular}
   254   \end{textblock}}
    69   \end{textblock}}
   255   
    70   
   256   \end{frame}}
    71   \end{frame}}
   257   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    72   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   360   \frametitle{\begin{tabular}{c}\LARGE{}Three Binding Modes\end{tabular}}
   175   \frametitle{\begin{tabular}{c}\LARGE{}Three Binding Modes\end{tabular}}
   361   \mbox{}\\[-3mm]
   176   \mbox{}\\[-3mm]
   362 
   177 
   363   \begin{itemize}
   178   \begin{itemize}
   364   \item the order does not matter and alpha-equivelence is preserved under
   179   \item the order does not matter and alpha-equivelence is preserved under
   365   vacuous binders (restriction)\medskip
   180   vacuous binders \textcolor{gray}{(restriction)}\medskip
   366   
   181   
   367   \item the order does not matter, but the cardinality of the binders 
   182   \item the order does not matter, but the cardinality of the binders 
   368   must be the same (abstraction)\medskip
   183   must be the same \textcolor{gray}{(abstraction)}\medskip
   369 
   184 
   370   \item the order does matter
   185   \item the order does matter
   371   \end{itemize}
   186   \end{itemize}
   372 
   187 
   373   \onslide<2->{
   188   \onslide<2->{
   399   & \onslide<2->{\isacommand{bind} bn(as) \isacommand{in} t}\\
   214   & \onslide<2->{\isacommand{bind} bn(as) \isacommand{in} t}\\
   400   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
   215   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
   401   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
   216   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
   402   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\
   217   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\
   403   \multicolumn{2}{l}{\onslide<3->{\isacommand{binder} bn \isacommand{where}}}\\
   218   \multicolumn{2}{l}{\onslide<3->{\isacommand{binder} bn \isacommand{where}}}\\
   404   \multicolumn{2}{l}{\onslide<3->{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $\varnothing$}}\\
   219   \multicolumn{2}{l}{\onslide<3->{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ []}}\\
   405   \multicolumn{2}{l}{\onslide<3->{\hspace{5mm}$|$ bn(ACons a t as) $=$ $\{$a$\}$ $\cup$ bn(as)}}\\
   220   \multicolumn{2}{l}{\onslide<3->{\hspace{5mm}$|$ bn(ACons a t as) $=$ [a] @ bn(as)}}\\
   406   \end{tabular}
   221   \end{tabular}
   407 
   222 
   408 
   223 
   409 
   224 
   410   \end{frame}}
   225   \end{frame}}
   411   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   226   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   412 *}
   227 *}
   413 
   228 
   414 text_raw {*
   229 text_raw {*
   415   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   230   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   416   \mode<presentation>{
   231   \mode<presentation>{
   417   \begin{frame}<1-4>
   232   \begin{frame}<1-5>
   418   \frametitle{\begin{tabular}{c}Ott\end{tabular}}
   233   \frametitle{\begin{tabular}{c}Inspiration from Ott\end{tabular}}
   419   \mbox{}\\[-3mm]
   234   \mbox{}\\[-3mm]
   420 
   235 
   421   \begin{itemize}
   236   \begin{itemize}
   422   \item this way of specifying binding is pretty much stolen from 
   237   \item this way of specifying binding is inspired by 
   423   Ott\onslide<2->{, \alert{\bf but} with adjustments:}\medskip
   238   Ott\onslide<2->{, \alert{\bf but} we made adjustments:}\medskip
   424 
   239   
   425   \begin{itemize}
   240 
   426   \item<2-> Ott allows specifications like\smallskip
   241   \only<2>{
       
   242   \begin{itemize}
       
   243   \item Ott allows specifications like\smallskip
   427   \begin{center}
   244   \begin{center}
   428   $t ::= t\;t\; |\;\lambda x.t$
   245   $t ::= t\;t\; |\;\lambda x.t$
   429   \end{center}\medskip
   246   \end{center}
   430 
   247   \end{itemize}}
   431   \item<3-> whether something is bound can depend on other bound things\smallskip
   248 
   432   \begin{center}
   249   \only<3-4>{
   433   Foo $(\lambda x. t)\; s$ 
   250   \begin{itemize}
   434   \end{center}\medskip
   251   \item whether something is bound can depend in Ott on other bound things\smallskip
   435   \onslide<4->{this might make sense for ``raw'' terms, but not at all 
   252   \begin{center}
       
   253   \begin{tikzpicture}
       
   254   \node (A) at (-0.5,1) {Foo $(\lambda y. \lambda x. t)$};
       
   255   \node (B) at ( 1.1,1) {$s$};
       
   256   \onslide<4>{\node (C) at (0.5,0) {$\{y, x\}$};}
       
   257   \onslide<4>{\draw[->,red,line width=1mm] (A) -- (C);}
       
   258   \onslide<4>{\draw[->,red,line width=1mm] (C) -- (B);}
       
   259   \end{tikzpicture}
       
   260   \end{center}
       
   261   \onslide<4>{this might make sense for ``raw'' terms, but not at all 
   436   for $\alpha$-equated terms}
   262   for $\alpha$-equated terms}
   437   \end{itemize}
   263   \end{itemize}}
   438   \end{itemize}
   264 
   439 
   265   \only<5>{
   440 
   266   \begin{itemize}
   441   \end{frame}}
   267   \item we allow multiple binders and bodies\smallskip
   442   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   268   \begin{center}
   443 *}
   269   \isacommand{bind} a b c \isacommand{in} x y z
       
   270   \end{center}\bigskip\medskip
       
   271   the reason is that in general
       
   272   \begin{center}
       
   273   \begin{tabular}{rcl}
       
   274   \isacommand{bind\_res} as \isacommand{in} x y & $\not\Leftrightarrow$ &
       
   275   \begin{tabular}{@ {}l}
       
   276   \isacommand{bind\_res} as \isacommand{in} x,\\
       
   277   \isacommand{bind\_res} as \isacommand{in} y
       
   278   \end{tabular}
       
   279   \end{tabular}
       
   280   \end{center}\smallskip
       
   281 
       
   282   same with \isacommand{bind\_set}
       
   283   \end{itemize}}
       
   284   \end{itemize}
       
   285 
       
   286 
       
   287   \end{frame}}
       
   288   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   289 *}
       
   290 
   444 text_raw {*
   291 text_raw {*
   445   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   292   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   446   \mode<presentation>{
   293   \mode<presentation>{
   447   \begin{frame}<1>
   294   \begin{frame}<1>
   448   \frametitle{\begin{tabular}{c}Alpha-Equivalence\end{tabular}}
   295   \frametitle{\begin{tabular}{c}Alpha-Equivalence\end{tabular}}
   449   \mbox{}\\[-3mm]
   296   \mbox{}\\[-3mm]
   450 
   297 
   451   \begin{itemize}
   298   \begin{itemize}
   452   \item in old Nominal we represented single binders as partial functions:\bigskip
   299   \item in old Nominal, we represented single binders as partial functions:\bigskip
   453   
   300   
   454   \begin{center}
   301   \begin{center}
   455   \begin{tabular}{l}
   302   \begin{tabular}{l}
   456   Lam [$a$].$t$ $\;\dn$\\[2mm]
   303   Lam [$a$].\,$t$ $\;{^\text{``}}\!\dn{}\!^{\text{''}}$\\[2mm]
   457   \;\;\;\;$\lambda b.$\;$\text{if}\;a = b\;\text{then}\;t\;\text{else}$\\
   304   \;\;\;\;$\lambda b.$\;$\text{if}\;a = b\;\text{then}\;t\;\text{else}$\\
   458   \phantom{\;\;\;\;$\lambda b.$\;\;\;}$\text{if}\;b \fresh t\;
   305   \phantom{\;\;\;\;$\lambda b.$\;\;\;\;\;\;}$\text{if}\;b \fresh t\;
   459   \text{then}\;(a\;b)\act t\;\text{else}\;\text{error}$ 
   306   \text{then}\;(a\;b)\act t\;\text{else}\;\text{error}$ 
   460   \end{tabular}
   307   \end{tabular}
   461   \end{center}
   308   \end{center}
   462   \end{itemize}
   309   \end{itemize}
   463 
   310 
   465   \footnotesize $^*$ alpha-equality coincides with equality on functions
   312   \footnotesize $^*$ alpha-equality coincides with equality on functions
   466   \end{textblock}
   313   \end{textblock}
   467   \end{frame}}
   314   \end{frame}}
   468   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   315   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   469 *}
   316 *}
       
   317 
       
   318 text_raw {*
       
   319   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   320   \mode<presentation>{
       
   321   \begin{frame}<1->
       
   322   \frametitle{\begin{tabular}{c}New Design\end{tabular}}
       
   323   \mbox{}\\[4mm]
       
   324 
       
   325   \begin{center}
       
   326   \begin{tikzpicture}
       
   327   \alt<2>
       
   328   {\draw (0,0) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   329   (A) {\textcolor{red}{\begin{minipage}{1.1cm}bind.\\spec.\end{minipage}}};}
       
   330   {\draw (0,0) node[inner sep=3mm, ultra thick, draw=white, rounded corners=2mm]
       
   331   (A) {\begin{minipage}{1.1cm}bind.\\spec.\end{minipage}};}
       
   332   
       
   333   \alt<3>
       
   334   {\draw (3,0) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   335   (B) {\textcolor{red}{\begin{minipage}{1.1cm}raw\\terms\end{minipage}}};}
       
   336   {\draw (3,0) node[inner sep=3mm, ultra thick, draw=white, rounded corners=2mm]
       
   337   (B) {\begin{minipage}{1.1cm}raw\\terms\end{minipage}};}
       
   338 
       
   339   \alt<4>
       
   340   {\draw (6,0) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   341   (C) {\textcolor{red}{\begin{minipage}{1.1cm}$\alpha$-\\equiv.\end{minipage}}};}
       
   342   {\draw (6,0) node[inner sep=3mm, ultra thick, draw=white, rounded corners=2mm]
       
   343   (C) {\begin{minipage}{1.1cm}$\alpha$-\\equiv.\end{minipage}};}
       
   344   
       
   345   \alt<5>
       
   346   {\draw (0,-3) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   347   (D) {\textcolor{red}{\begin{minipage}{1.1cm}quot.\\type\end{minipage}}};}
       
   348   {\draw (0,-3) node[inner sep=3mm, ultra thick, draw=white, rounded corners=2mm]
       
   349   (D) {\begin{minipage}{1.1cm}quot.\\type\end{minipage}};}
       
   350 
       
   351   \alt<6>
       
   352   {\draw (3,-3) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   353   (E) {\textcolor{red}{\begin{minipage}{1.1cm}lift\\thms\end{minipage}}};}
       
   354   {\draw (3,-3) node[inner sep=3mm, ultra thick, draw=white, rounded corners=2mm]
       
   355   (E) {\begin{minipage}{1.1cm}lift\\thms\end{minipage}};}
       
   356 
       
   357   \alt<7>
       
   358   {\draw (6,-3) node[inner sep=3mm, ultra thick, draw=red, rounded corners=2mm]
       
   359   (F) {\textcolor{red}{\begin{minipage}{1.1cm}add.\\thms\end{minipage}}};}
       
   360   {\draw (6,-3) node[inner sep=3mm, ultra thick, draw=white, rounded corners=2mm]
       
   361   (F) {\begin{minipage}{1.1cm}add.\\thms\end{minipage}};}
       
   362   
       
   363   \draw[->,white!50,line width=1mm] (A) -- (B);
       
   364   \draw[->,white!50,line width=1mm] (B) -- (C);
       
   365   \draw[->,white!50,line width=1mm, line join=round, rounded corners=2mm] 
       
   366   (C) -- (8,0) -- (8,-1.5) -- (-2,-1.5) -- (-2,-3) -- (D);
       
   367   \draw[->,white!50,line width=1mm] (D) -- (E);
       
   368   \draw[->,white!50,line width=1mm] (E) -- (F);
       
   369   \end{tikzpicture}
       
   370   \end{center}
       
   371 
       
   372   \end{frame}}
       
   373   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   374 *}
       
   375 
       
   376 
   470 
   377 
   471 text_raw {*
   378 text_raw {*
   472   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   379   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   473   \mode<presentation>{
   380   \mode<presentation>{
   474   \begin{frame}<1-9>
   381   \begin{frame}<1-9>
   813   \multicolumn{2}{l}{\isacommand{binder} bn \isacommand{where}}\\
   720   \multicolumn{2}{l}{\isacommand{binder} bn \isacommand{where}}\\
   814   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $[]$}\\
   721   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $[]$}\\
   815   \multicolumn{2}{l}{\hspace{5mm}$|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)}\\
   722   \multicolumn{2}{l}{\hspace{5mm}$|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)}\\
   816   \end{tabular}
   723   \end{tabular}
   817 
   724 
   818 
       
   819 
       
   820   \end{frame}}
   725   \end{frame}}
   821   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   726   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   822 *}
   727 *}
   823 
   728 
   824 text_raw {*
   729 text_raw {*
   894   {([x, y], (t, s)) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
   799   {([x, y], (t, s)) \approx\!\makebox[0mm][l]{${}_{\text{list}}$}
   895     ^{R, fv} ([x', y'], (t', s'))}
   800     ^{R, fv} ([x', y'], (t', s'))}
   896   \]
   801   \]
   897 
   802 
   898   \footnotesize
   803   \footnotesize
   899   where $R =\;\approx_\alpha\times\approx_\alpha$ and $fv = \text{fv}\times\text{fv}$
   804   where $R =\;\approx_\alpha\times\approx_\alpha$ and $fv = \text{fv}\cup\text{fv}$
   900 
   805 
   901   \end{frame}}
   806   \end{frame}}
   902   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   807   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   903 *}
   808 *}
   904 
   809 
   986 *}
   891 *}
   987 
   892 
   988 text_raw {*
   893 text_raw {*
   989   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   894   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   990   \mode<presentation>{
   895   \mode<presentation>{
       
   896   \begin{frame}<1>[t]
       
   897   \frametitle{\begin{tabular}{c}Runtime is Acceptable\end{tabular}}
       
   898   \mbox{}\\[-7mm]\mbox{}
       
   899 
       
   900   \footnotesize
       
   901   \begin{center}
       
   902   \begin{tikzpicture}
       
   903   \draw (0,0) node[inner sep=2mm, ultra thick, draw=white, rounded corners=2mm]
       
   904   (A) {\begin{minipage}{0.8cm}bind.\\spec.\end{minipage}};
       
   905   
       
   906   \draw (2,0) node[inner sep=2mm, ultra thick, draw=white, rounded corners=2mm]
       
   907   (B) {\begin{minipage}{0.8cm}raw\\terms\end{minipage}};
       
   908 
       
   909   \draw (4,0) node[inner sep=2mm, ultra thick, draw=white, rounded corners=2mm]
       
   910   (C) {\begin{minipage}{0.8cm}$\alpha$-\\equiv.\end{minipage}};
       
   911   
       
   912   \draw (0,-2) node[inner sep=2mm, ultra thick, draw=white, rounded corners=2mm]
       
   913   (D) {\begin{minipage}{0.8cm}quot.\\type\end{minipage}};
       
   914 
       
   915   \draw (2,-2) node[inner sep=2mm, ultra thick, draw=white, rounded corners=2mm]
       
   916   (E) {\begin{minipage}{0.8cm}lift\\thms\end{minipage}};
       
   917 
       
   918   \draw (4,-2) node[inner sep=2mm, ultra thick, draw=white, rounded corners=2mm]
       
   919   (F) {\begin{minipage}{0.8cm}add.\\thms\end{minipage}};
       
   920   
       
   921   \draw[->,white!50,line width=1mm] (A) -- (B);
       
   922   \draw[->,white!50,line width=1mm] (B) -- (C);
       
   923   \draw[->,white!50,line width=1mm, line join=round, rounded corners=2mm] 
       
   924   (C) -- (5,0) -- (5,-1) -- (-1,-1) -- (-1,-2) -- (D);
       
   925   \draw[->,white!50,line width=1mm] (D) -- (E);
       
   926   \draw[->,white!50,line width=1mm] (E) -- (F);
       
   927   \end{tikzpicture}
       
   928   \end{center}
       
   929 
       
   930   \begin{itemize}
       
   931   \item Core Haskell: 11 types, 49 term-constructors, 
       
   932   \end{itemize}
       
   933 
       
   934   \end{frame}}
       
   935   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   936 *}
       
   937 
       
   938 
       
   939 text_raw {*
       
   940   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   941   \mode<presentation>{
       
   942   \begin{frame}<1->
       
   943   \frametitle{\begin{tabular}{c}Interesting Phenomenon\end{tabular}}
       
   944   \mbox{}\\[-6mm]
       
   945 
       
   946   \small
       
   947   \mbox{}\hspace{10mm}
       
   948   \begin{tabular}{ll}
       
   949   \multicolumn{2}{l}{\isacommand{nominal\_datatype} trm $=$}\\
       
   950   \hspace{5mm}\phantom{$|$} Var name\\
       
   951   \hspace{5mm}$|$ App trm trm\\
       
   952   \hspace{5mm}$|$ Lam x::name t::trm
       
   953   & \isacommand{bind} x \isacommand{in} t\\
       
   954   \hspace{5mm}$|$ Let as::assn t::trm
       
   955   & \isacommand{bind} bn(as) \isacommand{in} t\\
       
   956   \multicolumn{2}{l}{\isacommand{and} assn $=$}\\
       
   957   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} ANil}\\
       
   958   \multicolumn{2}{l}{\hspace{5mm}$|$ ACons name trm assn}\\
       
   959   \multicolumn{2}{l}{\isacommand{binder} bn \isacommand{where}}\\
       
   960   \multicolumn{2}{l}{\hspace{5mm}\phantom{$|$} bn(ANil) $=$ $[]$}\\
       
   961   \multicolumn{2}{l}{\hspace{5mm}$|$ bn(ACons a t as) $=$ $[$a$]$ @ bn(as)}\\
       
   962   \end{tabular}\bigskip\medskip
       
   963 
       
   964   we cannot quotient assn: ACons a \ldots $\not\approx_\alpha$ ACons b \ldots
       
   965 
       
   966   \end{frame}}
       
   967   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   968 *}
       
   969 
       
   970 text_raw {*
       
   971   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   972   \mode<presentation>{
   991   \begin{frame}<1->
   973   \begin{frame}<1->
   992   \frametitle{\begin{tabular}{c}Conclusion\end{tabular}}
   974   \frametitle{\begin{tabular}{c}Conclusion\end{tabular}}
   993   \mbox{}\\[-6mm]
   975   \mbox{}\\[-6mm]
   994 
   976 
   995   \begin{itemize}
   977   \begin{itemize}
   996   \item the user does not see anything of the raw level\medskip
   978   \item the user does not see anything of the raw level\medskip
   997   \only<1>{\begin{center}
   979   \only<1>{\begin{center}
   998   Lam [a]. (Var a) \alert{$=$} Lam [b]. (Var b)
   980   Lam a (Var a) \alert{$=$} Lam b (Var b)
   999   \end{center}\bigskip}
   981   \end{center}\bigskip}
  1000 
   982 
  1001   \item<2-> we have not yet done function definitions (will come soon and
   983   \item<2-> we have not yet done function definitions (will come soon and
  1002   we hope to make improvements over the old way there too)\medskip
   984   we hope to make improvements over the old way there too)\medskip
  1003   \item<3-> it took quite some time to get here, but it seems worthwhile (POPL 2011 tutorial)\medskip
   985   \item<3-> it took quite some time to get here, but it seems worthwhile 
  1004   \item<4-> Thanks goes to Cezary!\\ 
   986   (Barendregt's variable convention is unsound in general, 
  1005   \only<5->{\hspace{3mm}\ldots{}and of course others $\in$ Isabelle-team!} 
   987   found bugs in two paper proofs, quotient package, POPL 2011 tutorial)\medskip
  1006   \end{itemize}
   988   \end{itemize}
  1007 
   989 
  1008 
   990 
  1009   \end{frame}}
   991   \end{frame}}
  1010   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   992   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%