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 |
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> |
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |