Slides/Slides2.thy
changeset 2353 ac064c47138b
parent 2352 f961a32eb0d9
child 2354 e2be455093a1
equal deleted inserted replaced
2352:f961a32eb0d9 2353:ac064c47138b
    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   \LARGE Proof Pearl:\\[-2mm]
    21   \LARGE Proof Pearl:\\[-0mm]
    22   \LARGE A New Foundation for\\[-2mm] 
    22   \LARGE A New Foundation for\\[-2mm] 
    23   \LARGE Nominal Isabelle\\[12mm]
    23   \LARGE Nominal Isabelle\\[12mm]
    24   \end{tabular}}
    24   \end{tabular}}
    25   \begin{center}
    25   \begin{center}
    26   \small
       
    27   Brian Huf\!fman and {\bf Christian Urban}\\[0mm] 
    26   Brian Huf\!fman and {\bf Christian Urban}\\[0mm] 
    28   \end{center}
    27   \end{center}
    29   \end{frame}}
    28   \end{frame}}
    30   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    29   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    31 
    30 
    32 *}
    31 *}
    33 
    32 
    34 text_raw {*
    33 text_raw {*
    35   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    34   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    36   \mode<presentation>{
    35   \mode<presentation>{
    37   \begin{frame}<1-2>
    36   \begin{frame}<1-2>[c]
    38   \frametitle{\begin{tabular}{c}Nominal Isabelle\end{tabular}}
    37   \frametitle{Nominal Isabelle}
    39   \mbox{}\\[-3mm]
    38 
    40 
    39   \begin{itemize}
    41   \begin{itemize}
    40   \item \ldots is a definitional extension of Isabelle/HOL
    42   \item sorted atoms and sort-respecting permutations\medskip
    41   (let-polymorphism and type classes)\medskip
       
    42 
       
    43   \item \ldots provides a convenient reasoning infrastructure for
       
    44   terms involving binders (e.g.~lambda calculus, variable convention)\medskip
       
    45   
       
    46   \item<2-> \ldots mainly used to find errors in my own 
       
    47   (published) paper proofs and in that of others \alert{\bf ;o)}
       
    48   \end{itemize}
       
    49 
       
    50   \end{frame}}
       
    51   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    52 *}
       
    53  
       
    54 text_raw {*
       
    55   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    56   \mode<presentation>{
       
    57   \begin{frame}<1-3>[c]
       
    58   \frametitle{Nominal Theory}
       
    59   
       
    60   by Pitts; at its core are:\bigskip
       
    61 
       
    62   \begin{itemize}
       
    63   \item sorted atoms and 
       
    64   \item sort-respecting permutations
       
    65   \end{itemize}
    43 
    66 
    44   \onslide<2->{
    67   \onslide<2->{
    45   \item[] in old Nominal: atoms have \underline{dif\!ferent} type\medskip
    68   \begin{textblock}{8}(4,11)
    46 
    69   \onslide<3->{$\text{inv\_of\_}\pi \,\act\, ($}\onslide<2->{$\pi \,\act\, x$}%
    47   \begin{center}
    70   \onslide<3->{$) \,=\, x$}
       
    71   \end{textblock}}
       
    72 
       
    73 
       
    74   \end{frame}}
       
    75   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    76 *}
       
    77 
       
    78 text_raw {*
       
    79   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    80   \mode<presentation>{
       
    81   \begin{frame}<1-4>[t]
       
    82   \frametitle{The ``Old Way''}
       
    83   
       
    84   \begin{itemize}
       
    85   \item sorted atoms\\ \alert{$\quad\mapsto$ separate types}\; (``copies'' of nat)\bigskip 
       
    86   \item sort-respecting permutations\\ \alert{$\quad\mapsto$ lists of pairs of atoms (list swappings)}
       
    87   \onslide<2->{
       
    88   \begin{center} 
    48   \begin{tabular}{c@ {\hspace{7mm}}c}
    89   \begin{tabular}{c@ {\hspace{7mm}}c}
    49   $[]\;\act\;c \dn c$ &
    90   $\text{[]} \,\act\, c = c$ &
    50   $(a\;b)\!::\!\pi\;\act\;c \dn$ 
    91   $\swap{a}{b}\!::\!\pi \,\act\, c =
    51   $\begin{cases}
    92   \begin{cases}
    52   b & \text{if}\; \pi \act c = a\\
    93   b & \text{if}\, \pi\act c = a\\
    53   a & \text{if}\; \pi \act c = b\\
    94   a & \text{if}\, \pi\act c = b\\
    54   \pi \act c & \text{otherwise}
    95   \pi\act c & \text{otherwise}
    55   \end{cases}$
    96   \end{cases}$
    56   \end{tabular}
    97   \end{tabular}
    57   \end{center}}
    98   \end{center}}
    58   \end{itemize}
    99   \end{itemize}
    59 
   100 
    60   \end{frame}}
   101   \only<3>{
    61   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   102   \begin{textblock}{14}(1,12.5)
    62 *}
   103   \alert{The big benefit:} the type system takes care of the sort-respecting part.
    63 
   104   \end{textblock}}
    64 text_raw {*
   105   \only<4>{
    65   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   106   \begin{textblock}{14}(1,12.5)
    66   \mode<presentation>{
   107   \alert{A small benefit:} permutation composition is \alert{list append} 
    67   \begin{frame}<1-2>
   108   and permutation inversion is \alert{list reversal}.
    68   \frametitle{\begin{tabular}{c}Nominal Theory\end{tabular}}
   109   \end{textblock}
    69   \mbox{}\\[-3mm]
   110   }
    70 
   111 
    71   \begin{itemize}
   112   \end{frame}}
    72   \item sorted atoms and sort-respecting permutations\medskip
   113   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    73 
   114 *}
    74   \onslide<2->{
   115 
    75   \item[] in old Nominal: atoms have \underline{dif\!ferent} type\medskip
   116 text_raw {*
    76 
   117   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    77   \begin{center}
   118   \mode<presentation>{
    78   \begin{tabular}{c@ {\hspace{7mm}}c}
   119   \begin{frame}<1-4>
    79   $[]\;\act\;c \dn c$ &
   120   \frametitle{Problems}
    80   $(a\;b)\!::\!\pi\;\act\;c \dn$ 
       
    81   $\begin{cases}
       
    82   b & \text{if}\; \pi \act c = a\\
       
    83   a & \text{if}\; \pi \act c = b\\
       
    84   \pi \act c & \text{otherwise}
       
    85   \end{cases}$
       
    86   \end{tabular}
       
    87   \end{center}}
       
    88   \end{itemize}
       
    89 
       
    90   \end{frame}}
       
    91   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
    92 *}
       
    93 
       
    94 text_raw {*
       
    95   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    96   \mode<presentation>{
       
    97   \begin{frame}<1>
       
    98   \frametitle{\begin{tabular}{c}Problems\end{tabular}}
       
    99   \mbox{}\\[-3mm]
       
   100 
   121 
   101   \begin{itemize}
   122   \begin{itemize}
   102   \item @{text "_ \<bullet> _ :: \<alpha> perm \<Rightarrow> \<beta> \<Rightarrow> \<beta>"}\bigskip
   123   \item @{text "_ \<bullet> _ :: \<alpha> perm \<Rightarrow> \<beta> \<Rightarrow> \<beta>"}\bigskip
   103 
   124 
   104   \item @{text "supp _ :: \<beta> \<Rightarrow> \<alpha> set"}
   125   \item @{text "supp _ :: \<beta> \<Rightarrow> \<alpha> set"}
   108   $\text{finite} (\text{supp}\;x)_{\,\alpha_n\,\text{set}}$
   129   $\text{finite} (\text{supp}\;x)_{\,\alpha_n\,\text{set}}$
   109   \end{center}\bigskip
   130   \end{center}\bigskip
   110   
   131   
   111   \item $\forall \pi_{\alpha_1} \ldots \pi_{\alpha_n}\;.\; P$\bigskip
   132   \item $\forall \pi_{\alpha_1} \ldots \pi_{\alpha_n}\;.\; P$\bigskip
   112 
   133 
   113   \item type-classes
   134   \item type-classes 
   114   \end{itemize}
   135   \onslide<3>{\small\hspace{5mm}can only have \alert{\bf one} type parameter}
   115 
   136   \begin{itemize}
   116   \end{frame}}
   137   \item<2-> $\text{[]}\,\act\, x = x$
   117   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   138   \item<2-> $(\pi_1 @  \pi_2) \,\act \, x = \pi_1 \,\act\,(\pi_2 \,\act\, x)$
   118 *}
   139   \item<2-> if $\pi_1 \sim \pi_2$ then $\pi_1 \,\act\, x = \pi_2 \,\act\, x$
   119 
   140   \end{itemize}
   120 text_raw {*
   141   \end{itemize}
   121   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   142 
   122   \mode<presentation>{
   143   \only<4->{
   123   \begin{frame}<1-4>
   144   \begin{textblock}{9}(3,7)\begin{tikzpicture}
   124   \frametitle{\begin{tabular}{c}Our New Solution\end{tabular}}
   145   \draw (0,0) node[inner sep=3mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
   125   \mbox{}\\[-3mm]
   146   {\normalsize\color{darkgray}
       
   147   \begin{quote}
       
   148   \begin{itemize}
       
   149   \item \alert{lots} of ML-code 
       
   150   \item \alert{not} pretty 
       
   151   \item \alert{not a proof pearl} :o( 
       
   152   \end{itemize}
       
   153   \end{quote}};
       
   154   \end{tikzpicture}
       
   155   \end{textblock}}
       
   156 
       
   157   \end{frame}}
       
   158   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   159 *}
       
   160 
       
   161 text_raw {*
       
   162   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   163   \mode<presentation>{
       
   164   \begin{frame}<1-5>
       
   165   \frametitle{A Better Way}
   126 *}
   166 *}
   127 datatype atom = Atom string nat
   167 datatype atom = Atom string nat
   128 
   168 
   129 text_raw {*
   169 text_raw {*
   130   \mbox{}\bigskip
   170   \mbox{}\bigskip
   131   \begin{itemize}
   171   \begin{itemize}
   132   \item<2-> permutations are (restricted) bijective functions from @{text "atom \<Rightarrow> atom"}
   172   \item<3-> permutations are (restricted) bijective functions from @{text "atom \<Rightarrow> atom"}
   133 
   173 
   134      \begin{itemize}
   174      \begin{itemize}
   135      \item sort-respecting \hspace{5mm}($\forall a.\;\text{sort}(f a) = \text{sort}(a)$)
   175      \item sort-respecting \hspace{5mm}($\,\forall a.\;\text{sort}(\pi a) = \text{sort}(a)$)
   136      \item finite domain \hspace{5mm}($\text{finite} \{a.\;f a \not= a\}$)
   176      \item finite domain \hspace{5mm}($\text{finite} \{a.\;\pi a \not= a\}$)
   137      \end{itemize}\medskip
   177      \end{itemize}\medskip
   138 
   178      
   139   \item<3-> swappings:
   179   \item<4-> \alert{What about swappings?}
   140      \small
   180      \small
   141      \[
   181      \[
   142      \begin{array}{l@ {\hspace{1mm}}l}
   182      \begin{array}{l@ {\hspace{1mm}}l}
   143      (a\;b) \dn & \text{if}\;\text{sort}(a) = \text{sort}(b)\\
   183      (a\;b) \dn & \text{if}\;\text{sort}(a) = \text{sort}(b)\\
   144         & \text{then}\;\lambda  c. \text{if}\;a = c\;\text{then}\;b\;\text{else}\;
   184         & \text{then}\;\lambda  c. \text{if}\;a = c\;\text{then}\;b\;\text{else}\;
   145           \text{if}\;b = c\;\text{then}\;a\;\text{else}\;c\\
   185           \text{if}\;b = c\;\text{then}\;a\;\text{else}\;c\\
   146         & \text{else}\;\only<3>{\mbox{\textcolor{red}{\bf ?}}}\only<4->{\text{id}}
   186         & \text{else}\;\only<4>{\raisebox{-5mm}{\textcolor{red}{\huge\bf $?$}}}
       
   187           \only<5->{\text{\alert{\bf id}}}
   147      \end{array}
   188      \end{array}
   148      \]
   189      \]
   149   \end{itemize}
   190   \end{itemize}
   150 
   191 
   151   \end{frame}}
   192   \only<3>{
   152   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   193   \begin{textblock}{7}(4,11)
   153 *}
   194   @{text "\<pi> \<bullet> _ :: perm \<Rightarrow> \<beta> \<Rightarrow> \<beta>"}
   154 
   195   \end{textblock}}
   155 text_raw {*
   196   
   156   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   197   \end{frame}}
   157   \mode<presentation>{
   198   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   158   \begin{frame}<1-6>
   199 *}
   159   \frametitle{\begin{tabular}{c}\LARGE{}A Smoother Nominal Theory\end{tabular}}
   200 
   160   \mbox{}\\[-3mm]
   201 text_raw {*
   161 
   202   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   162   \begin{itemize}
   203   \mode<presentation>{
   163   \item<1-> $(a\;b) = (b\;a) \onslide<3->{= (a\;c) + (b\;c) + (a\;c)}$\bigskip  
   204   \begin{frame}<1-7>
   164 
   205   \frametitle{A Smoother Nominal Theory}
   165   \item<2-> permutations are an instance of group\_add\\ $0$, $\pi_1 + \pi_2$, $- \pi$\bigskip
   206   
   166 
   207   From there it is essentially plain sailing:\bigskip
   167   \item<5-> $\_\;\act\;\_ :: \text{perm} \Rightarrow \alpha \Rightarrow \alpha$\medskip
   208 
       
   209   \begin{itemize}
       
   210   \item<2-> $(a\;b) = (b\;a) \onslide<4->{= (a\;c) + (b\;c) + (a\;c)}$\bigskip  
       
   211 
       
   212   \item<3-> permutations are an instance of Isabelle's\\  
       
   213   group\_add ($0$, $\pi_1 + \pi_2$, $- \pi$)\bigskip
       
   214 
       
   215   \item<6-> $\_\;\act\;\_ :: \text{perm} \Rightarrow \alpha \Rightarrow \alpha$\medskip
   168   
   216   
   169    \begin{itemize}
   217    \begin{itemize}
   170    \item $0\;\act\;x = x$\\
   218    \item $0\;\act\;x = x$\\
   171    \item $(\pi_1 + \pi_2)\;\act\;x = \pi_1\;\act\;(\pi_2\;\act\;x)$
   219    \item $(\pi_1 + \pi_2)\;\act\;x = \pi_1\;\act\;(\pi_2\;\act\;x)$
   172    \end{itemize}
   220    \end{itemize}\medskip
   173 
   221 
   174    \small
   222    \onslide<7->{\alert{$\;\mapsto\;$}only one type class, $\text{finite}(\text{supp}\;x)$, $\forall \pi. P$}
   175    \onslide<6->{$\text{finite}(\text{supp}\;x)$, $\forall \pi. P$}
   223   \end{itemize}
   176   \end{itemize}
   224 
   177 
   225   \only<5>{
   178   \only<4>{
       
   179   \begin{textblock}{6}(2.5,11)
   226   \begin{textblock}{6}(2.5,11)
   180   \begin{tikzpicture}
   227   \begin{tikzpicture}
   181   \draw (0,0) node[inner sep=3mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
   228   \draw (0,0) node[inner sep=3mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] 
   182   {\normalsize\color{darkgray}
   229   {\normalsize\color{darkgray}
   183   \begin{minipage}{8cm}\raggedright
   230   \begin{minipage}{8cm}\raggedright
   193 
   240 
   194 text_raw {*
   241 text_raw {*
   195   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   242   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   196   \mode<presentation>{
   243   \mode<presentation>{
   197   \begin{frame}<1-3>
   244   \begin{frame}<1-3>
   198   \frametitle{\begin{tabular}{c}Very Few Snatches\end{tabular}}
   245   \frametitle{One Snatch}
   199   \mbox{}\\[-3mm]
   246 
   200 
   247 
   201   \begin{itemize}
   248   \begin{itemize}
   202   \item \underline{concrete} atoms:
   249   \item \underline{concrete} atoms:
   203   \end{itemize}
   250   \end{itemize}
   204 *}
   251 *}
   210 typedef ident = "{a :: atom. sort a = ''ident''}" (*<*)sorry(*>*)
   257 typedef ident = "{a :: atom. sort a = ''ident''}" (*<*)sorry(*>*)
   211 
   258 
   212 text_raw {*
   259 text_raw {*
   213   \mbox{}\bigskip\bigskip
   260   \mbox{}\bigskip\bigskip
   214   \begin{itemize}
   261   \begin{itemize}
   215   \item<2-> there is an overloaded  function \underline{atom}, which injects concrete 
   262   \item<2-> there is an overloaded  function \alert{\bf atom}, which injects concrete 
   216   atoms into generic ones\medskip 
   263   atoms into generic ones\medskip 
   217   \begin{center}
   264   \begin{center}
   218   \begin{tabular}{l}
   265   \begin{tabular}{l}
   219   $\text{atom}(a) \fresh x$\\
   266   $\text{atom}(a) \fresh x$\\
   220   $(a \leftrightarrow b) \dn (\text{atom}(a)\;\;\text{atom}(b))$
   267   $(a \leftrightarrow b) \dn (\text{atom}(a)\;\;\text{atom}(b))$
   221   \end{tabular}
   268   \end{tabular}
   222   \end{center}\bigskip\medskip
   269   \end{center}\bigskip\medskip
   223 
   270 
   224   \onslide<3->
   271   \onslide<3->
   225   {I would like to have $a \fresh x$, $(a\; b)$, \ldots}
   272   {One would like to have $a \fresh x$, $(a\; b)$, \ldots}
   226 
   273   \end{itemize}
   227   \end{itemize}
   274 
   228 
   275   \only<1>{
       
   276   \begin{textblock}{11}(2.5,8.5)
       
   277   You like to get the advantages of the old way back: you \alert{cannot mix} atoms
       
   278   of dif$\!$ferent sort:\bigskip
       
   279   
       
   280   \small
       
   281   e.g.~LF-objects:\\[-9mm]\mbox{} 
       
   282   \begin{center}$\quad M ::= c \mid x \mid \lambda x\!:\!A. M \mid M_1\;M_2$
       
   283   \end{center}
       
   284   \end{textblock}}
       
   285 
       
   286   \end{frame}}
       
   287   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   288 *}
       
   289 
       
   290 text_raw {*
       
   291   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   292   \mode<presentation>{
       
   293   \begin{frame}<1-4>
       
   294   \frametitle{Sorts Reloaded}
       
   295 *}
       
   296 datatype atom\<iota> = Atom\<iota> string nat
       
   297 
       
   298 text_raw {*
       
   299   \isanewline\isanewline
       
   300   \pause
       
   301   \alert{Problem}: HOL-binders or Church-style lambda-terms
       
   302   \begin{center}
       
   303   $\lambda x_\alpha.\, x_\alpha\;x_\beta$
       
   304   \end{center}
       
   305   \pause
       
   306   \isanewline\isanewline
       
   307 
       
   308 \isacommand{datatype} ty = TVar string $\mid$ ty $\rightarrow$ ty\\
       
   309 \isacommand{datatype} var = Var name ty\\
       
   310 \pause
       
   311 $(x \leftrightarrow y) \,\act\, (x_\alpha, x_\beta) = (y_\alpha, y_\beta)$
       
   312 
       
   313   \end{frame}}
       
   314   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   315 *}
       
   316 
       
   317 text_raw {*
       
   318   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   319   \mode<presentation>{
       
   320   \begin{frame}<1-3>
       
   321   \frametitle{Non-Working Solution}
       
   322 
       
   323 Instead of\isanewline\isanewline
       
   324 *}
       
   325     datatype atom\<iota>\<iota> = Atom\<iota>\<iota> string nat
       
   326 
       
   327 text_raw {*
       
   328 \isanewline\isanewline
       
   329 have
       
   330 \isanewline\isanewline
       
   331 *}
       
   332 
       
   333     datatype 'a atom\<iota>\<iota>\<iota> = Atom\<iota>\<iota> 'a nat
       
   334 text_raw {*
       
   335   \pause
       
   336   \isanewline\isanewline
       
   337   But then
       
   338   \begin{center}
       
   339   @{text "_ \<bullet> _ :: \<alpha> perm \<Rightarrow> \<beta> \<Rightarrow> \<beta>"}
       
   340   \end{center}
       
   341   \end{frame}}
       
   342   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   343 *}
       
   344 
       
   345 text_raw {*
       
   346   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   347   \mode<presentation>{
       
   348   \begin{frame}<1-3>
       
   349   \frametitle{A Working Solution}
       
   350 
       
   351 *}
       
   352     datatype sort = Sort string "sort list"
       
   353     datatype atom\<iota>\<iota> = Atom\<iota>\<iota> string nat
       
   354 
       
   355 text_raw {*
       
   356 \isanewline\isanewline
       
   357 have
       
   358 \isanewline\isanewline
       
   359 *}
       
   360 
       
   361     datatype 'a atom\<iota>\<iota>\<iota> = Atom\<iota>\<iota> 'a nat
       
   362 text_raw {*
       
   363   \pause
       
   364   \isanewline\isanewline
       
   365   But then
       
   366   \begin{center}
       
   367   @{text "_ \<bullet> _ :: \<alpha> perm \<Rightarrow> \<beta> \<Rightarrow> \<beta>"}
       
   368   \end{center}
   229   \end{frame}}
   369   \end{frame}}
   230   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   370   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   231 *}
   371 *}
   232 
   372 
   233 text_raw {*
   373 text_raw {*
   234   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   374   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   235   \mode<presentation>{
   375   \mode<presentation>{
   236   \begin{frame}<1-2>[c]
   376   \begin{frame}<1-2>[c]
   237   \frametitle{\begin{tabular}{c}\LARGE{}End of Part I\end{tabular}}
   377   \frametitle{Conclusion}
   238   \mbox{}\\[-3mm]
   378   \mbox{}\\[-3mm]
   239 
   379 
   240   \begin{itemize}
   380   \begin{itemize}
   241   \item the formalised version of the nominal theory is now much nicer to 
   381   \item the formalised version of the nominal theory is now much nicer to 
   242   work with (sorts are occasionally explicit)\bigskip
   382   work with (sorts are occasionally explicit)\bigskip