62 \small |
62 \small |
63 for example\\ |
63 for example\\ |
64 \begin{tabular}{l@ {\hspace{2mm}}l} |
64 \begin{tabular}{l@ {\hspace{2mm}}l} |
65 \pgfuseshading{smallspherered} & a $\fresh$ Lam [a]. t\\ |
65 \pgfuseshading{smallspherered} & a $\fresh$ Lam [a]. t\\ |
66 \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\\ |
67 \pgfuseshading{smallspherered} & Barendregt-style reasoning about bound variables\\ |
68 \end{tabular} |
68 \end{tabular} |
69 \end{textblock}} |
69 \end{textblock}} |
70 |
70 |
71 \end{frame}} |
71 \end{frame}} |
72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
233 \frametitle{\begin{tabular}{c}Inspiration from Ott\end{tabular}} |
233 \frametitle{\begin{tabular}{c}Inspiration from Ott\end{tabular}} |
234 \mbox{}\\[-3mm] |
234 \mbox{}\\[-3mm] |
235 |
235 |
236 \begin{itemize} |
236 \begin{itemize} |
237 \item this way of specifying binding is inspired by |
237 \item this way of specifying binding is inspired by |
238 Ott\onslide<2->{, \alert{\bf but} we made adjustments:}\medskip |
238 {\bf Ott}\onslide<2->{, \alert{\bf but} we made some adjustments:}\medskip |
239 |
239 |
240 |
240 |
241 \only<2>{ |
241 \only<2>{ |
242 \begin{itemize} |
242 \begin{itemize} |
243 \item Ott allows specifications like\smallskip |
243 \item Ott allows specifications like\smallskip |
262 for $\alpha$-equated terms} |
262 for $\alpha$-equated terms} |
263 \end{itemize}} |
263 \end{itemize}} |
264 |
264 |
265 \only<5>{ |
265 \only<5>{ |
266 \begin{itemize} |
266 \begin{itemize} |
267 \item we allow multiple binders and bodies\smallskip |
267 \item we allow multiple ``binders'' and ``bodies''\smallskip |
268 \begin{center} |
268 \begin{center} |
269 \isacommand{bind} a b c \isacommand{in} x y z |
269 \isacommand{bind} a b c \isacommand{in} x y z |
270 \end{center}\bigskip\medskip |
270 \end{center}\bigskip\medskip |
271 the reason is that in general |
271 the reason is that with our definitions of $\alpha$-equivalence |
272 \begin{center} |
272 \begin{center} |
273 \begin{tabular}{rcl} |
273 \begin{tabular}{rcl} |
274 \isacommand{bind\_res} as \isacommand{in} x y & $\not\Leftrightarrow$ & |
274 \isacommand{bind\_res} as \isacommand{in} x y & $\not\Leftrightarrow$ & |
275 \begin{tabular}{@ {}l} |
275 \begin{tabular}{@ {}l} |
276 \isacommand{bind\_res} as \isacommand{in} x,\\ |
276 \isacommand{bind\_res} as \isacommand{in} x,\\ |
294 \begin{frame}<1> |
294 \begin{frame}<1> |
295 \frametitle{\begin{tabular}{c}Alpha-Equivalence\end{tabular}} |
295 \frametitle{\begin{tabular}{c}Alpha-Equivalence\end{tabular}} |
296 \mbox{}\\[-3mm] |
296 \mbox{}\\[-3mm] |
297 |
297 |
298 \begin{itemize} |
298 \begin{itemize} |
299 \item in old Nominal, we represented single binders as partial functions:\bigskip |
299 \item in the old Nominal Isabelle, we represented single binders as partial functions:\bigskip |
300 |
300 |
301 \begin{center} |
301 \begin{center} |
302 \begin{tabular}{l} |
302 \begin{tabular}{l} |
303 Lam [$a$].\,$t$ $\;{^\text{``}}\!\dn{}\!^{\text{''}}$\\[2mm] |
303 Lam [$a$].\,$t$ $\;{^\text{``}}\!\dn{}\!^{\text{''}}$\\[2mm] |
304 \;\;\;\;$\lambda b.$\;$\text{if}\;a = b\;\text{then}\;t\;\text{else}$\\ |
304 \;\;\;\;$\lambda b.$\;$\text{if}\;a = b\;\text{then}\;t\;\text{else}$\\ |
394 \end{itemize} |
394 \end{itemize} |
395 |
395 |
396 \only<1>{ |
396 \only<1>{ |
397 \begin{textblock}{8}(3,8.5) |
397 \begin{textblock}{8}(3,8.5) |
398 \begin{tabular}{l@ {\hspace{2mm}}p{8cm}} |
398 \begin{tabular}{l@ {\hspace{2mm}}p{8cm}} |
399 \pgfuseshading{smallspherered} & $as$ is a set of atoms\ldots the binders\\ |
399 \pgfuseshading{smallspherered} & $as$ is a set of names\ldots the binders\\ |
400 \pgfuseshading{smallspherered} & $x$ is the body\\ |
400 \pgfuseshading{smallspherered} & $x$ is the body\\ |
401 \pgfuseshading{smallspherered} & $\approx_{\text{set}}$ is where the cardinality |
401 \pgfuseshading{smallspherered} & $\approx_{\text{set}}$ is where the cardinality |
402 of the binders has to be the same\\ |
402 of the binders has to be the same\\ |
403 \end{tabular} |
403 \end{tabular} |
404 \end{textblock}} |
404 \end{textblock}} |
413 \end{tabular} |
413 \end{tabular} |
414 \end{textblock}} |
414 \end{textblock}} |
415 |
415 |
416 \only<8>{ |
416 \only<8>{ |
417 \begin{textblock}{8}(3,13.8) |
417 \begin{textblock}{8}(3,13.8) |
418 \footnotesize $^*$ $as$ and $bs$ are \alert{lists} of atoms |
418 \footnotesize $^*$ $as$ and $bs$ are \alert{lists} of names |
419 \end{textblock}} |
419 \end{textblock}} |
420 \end{frame}} |
420 \end{frame}} |
421 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
421 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
422 *} |
422 *} |
423 |
423 |
424 text_raw {* |
424 text_raw {* |
425 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
425 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
426 \mode<presentation>{ |
426 \mode<presentation>{ |
427 \begin{frame}<1-2> |
427 \begin{frame}<1-3> |
428 \frametitle{\begin{tabular}{c}Examples\end{tabular}} |
428 \frametitle{\begin{tabular}{c}Examples\end{tabular}} |
429 \mbox{}\\[-3mm] |
429 \mbox{}\\[-3mm] |
430 |
430 |
431 \begin{itemize} |
431 \begin{itemize} |
432 \item lets look at ``type-schemes'':\medskip\medskip |
432 \item lets look at ``type-schemes'':\medskip\medskip |
443 \end{tabular} |
443 \end{tabular} |
444 \end{center}} |
444 \end{center}} |
445 \end{itemize} |
445 \end{itemize} |
446 |
446 |
447 |
447 |
448 \only<2->{ |
448 \only<3->{ |
449 \begin{textblock}{4}(0.3,12) |
449 \begin{textblock}{4}(0.3,12) |
450 \begin{tikzpicture} |
450 \begin{tikzpicture} |
451 \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
451 \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
452 {\tiny\color{darkgray} |
452 {\tiny\color{darkgray} |
453 \begin{minipage}{3.4cm}\raggedright |
453 \begin{minipage}{3.4cm}\raggedright |
459 \\ |
459 \\ |
460 \end{tabular} |
460 \end{tabular} |
461 \end{minipage}}; |
461 \end{minipage}}; |
462 \end{tikzpicture} |
462 \end{tikzpicture} |
463 \end{textblock}} |
463 \end{textblock}} |
464 \only<2->{ |
464 \only<3->{ |
465 \begin{textblock}{4}(5.2,12) |
465 \begin{textblock}{4}(5.2,12) |
466 \begin{tikzpicture} |
466 \begin{tikzpicture} |
467 \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
467 \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
468 {\tiny\color{darkgray} |
468 {\tiny\color{darkgray} |
469 \begin{minipage}{3.4cm}\raggedright |
469 \begin{minipage}{3.4cm}\raggedright |
475 $\wedge$ & $\pi \cdot as = bs$\\ |
475 $\wedge$ & $\pi \cdot as = bs$\\ |
476 \end{tabular} |
476 \end{tabular} |
477 \end{minipage}}; |
477 \end{minipage}}; |
478 \end{tikzpicture} |
478 \end{tikzpicture} |
479 \end{textblock}} |
479 \end{textblock}} |
480 \only<2->{ |
480 \only<3->{ |
481 \begin{textblock}{4}(10.2,12) |
481 \begin{textblock}{4}(10.2,12) |
482 \begin{tikzpicture} |
482 \begin{tikzpicture} |
483 \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
483 \draw (0,0) node[inner sep=1mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
484 {\tiny\color{darkgray} |
484 {\tiny\color{darkgray} |
485 \begin{minipage}{3.4cm}\raggedright |
485 \begin{minipage}{3.4cm}\raggedright |
633 \end{tabular} |
633 \end{tabular} |
634 \end{minipage}}; |
634 \end{minipage}}; |
635 \end{tikzpicture} |
635 \end{tikzpicture} |
636 \end{textblock}} |
636 \end{textblock}} |
637 |
637 |
|
638 \only<2>{ |
|
639 \begin{textblock}{6}(2.5,4) |
|
640 \begin{tikzpicture} |
|
641 \draw (0,0) node[inner sep=5mm,fill=cream, ultra thick, draw=red, rounded corners=2mm] |
|
642 {\normalsize |
|
643 \begin{minipage}{8cm}\raggedright |
|
644 \begin{itemize} |
|
645 \item \color{darkgray}$\alpha$-equivalences coincide when a single name is |
|
646 abstracted |
|
647 \item \color{darkgray}in that case they are equivalent to ``old-fashioned'' definitions of $\alpha$ |
|
648 \end{itemize} |
|
649 \end{minipage}}; |
|
650 \end{tikzpicture} |
|
651 \end{textblock}} |
|
652 |
638 \end{frame}} |
653 \end{frame}} |
639 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
654 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
640 *} |
655 *} |
641 |
656 |
642 text_raw {* |
657 text_raw {* |
645 \begin{frame}<1-3> |
660 \begin{frame}<1-3> |
646 \frametitle{\begin{tabular}{c}General Abstractions\end{tabular}} |
661 \frametitle{\begin{tabular}{c}General Abstractions\end{tabular}} |
647 \mbox{}\\[-7mm] |
662 \mbox{}\\[-7mm] |
648 |
663 |
649 \begin{itemize} |
664 \begin{itemize} |
650 \item we take $(as, x) \approx\!\makebox[0mm][l]{${}_{\star}$}^{=,\text{supp}} (bs, y)$\medskip |
665 \item we take $(as, x) \approx\!\makebox[0mm][l]{${}_{{}*{}}$}^{=,\text{supp}} (bs, y)$\medskip |
651 \item they are equivalence relations\medskip |
666 \item they are equivalence relations\medskip |
652 \item we can therefore use the quotient package to introduce the |
667 \item we can therefore use the quotient package to introduce the |
653 types $\beta\;\text{abs}_\star$\bigskip |
668 types $\beta\;\text{abs}_*$\bigskip |
654 \begin{center} |
669 \begin{center} |
655 \only<1>{$[as].\,x$} |
670 \only<1>{$[as].\,x$} |
656 \only<2>{$\text{supp}([as].x) = \text{supp}(x) - as$} |
671 \only<2>{$\text{supp}([as].x) = \text{supp}(x) - as$} |
657 \only<3>{% |
672 \only<3>{% |
658 \begin{tabular}{r@ {\hspace{1mm}}l} |
673 \begin{tabular}{r@ {\hspace{1mm}}l} |
659 \multicolumn{2}{@ {\hspace{-7mm}}l}{$[as]. x \alert{=} [bs].y\;\;\;\text{if\!f}$}\\[2mm] |
674 \multicolumn{2}{@ {\hspace{-7mm}}l}{$[as]. x \alert{=} [bs].y\;\;\;\text{if\!f}$}\\[2mm] |
660 $\exists \pi.$ & $\text{supp}(x) - as = \text{supp}(y) - bs$\\ |
675 $\exists \pi.$ & $\text{supp}(x) - as = \text{supp}(y) - bs$\\ |
661 $\wedge$ & $\text{supp}(x) - as \fresh^* \pi$\\ |
676 $\wedge$ & $\text{supp}(x) - as \fresh^* \pi$\\ |
662 $\wedge$ & $\pi \act x = y $\\ |
677 $\wedge$ & $\pi \act x = y $\\ |
663 $(\wedge$ & $\pi \act as = bs)\;^\star$\\ |
678 $(\wedge$ & $\pi \act as = bs)\;^*$\\ |
664 \end{tabular}} |
679 \end{tabular}} |
665 \end{center} |
680 \end{center} |
666 \end{itemize} |
681 \end{itemize} |
667 |
682 |
|
683 \only<1->{ |
|
684 \begin{textblock}{8}(12,3.8) |
|
685 \footnotesize $^*$ set, res, list |
|
686 \end{textblock}} |
668 |
687 |
669 \end{frame}} |
688 \end{frame}} |
670 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
689 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
671 *} |
690 *} |
672 |
691 |
673 text_raw {* |
692 text_raw {* |
674 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
693 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
675 \mode<presentation>{ |
694 \mode<presentation>{ |
676 \begin{frame}<1> |
695 \begin{frame}<1> |
677 \frametitle{\begin{tabular}{c}One Problem\end{tabular}} |
696 \frametitle{\begin{tabular}{c}A Problem\end{tabular}} |
678 \mbox{}\\[-3mm] |
697 \mbox{}\\[-3mm] |
679 |
698 |
680 \begin{center} |
699 \begin{center} |
681 $\text{let}\;x_1=t_1 \ldots x_n=t_n\;\text{in}\;s$ |
700 $\text{let}\;x_1=t_1 \ldots x_n=t_n\;\text{in}\;s$ |
682 \end{center} |
701 \end{center} |
822 \[ |
841 \[ |
823 \infer[\text{Let-}\!\approx_\alpha] |
842 \infer[\text{Let-}\!\approx_\alpha] |
824 {\text{Let}\;as\;t \approx_\alpha \text{Let}\;as'\;t'} |
843 {\text{Let}\;as\;t \approx_\alpha \text{Let}\;as'\;t'} |
825 {(\text{bn}(as), t) \approx\!\makebox[0mm][l]{${}_{\text{list}}$} |
844 {(\text{bn}(as), t) \approx\!\makebox[0mm][l]{${}_{\text{list}}$} |
826 ^{\approx_\alpha,\text{fv}} (\text{bn}(as'), t') & |
845 ^{\approx_\alpha,\text{fv}} (\text{bn}(as'), t') & |
827 \onslide<2>{as \approx_\alpha^{\text{bn}} as'}} |
846 \onslide<2->{as \approx_\alpha^{\text{bn}} as'}} |
828 \] |
847 \]\bigskip |
829 |
848 |
830 |
849 |
831 \end{frame}} |
850 \onslide<1->{\small{}bn-function $\Rightarrow$ \alert{deep binders}} |
832 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
851 \end{frame}} |
833 *} |
852 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
853 *} |
|
854 |
834 |
855 |
835 text_raw {* |
856 text_raw {* |
836 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
857 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
837 \mode<presentation>{ |
858 \mode<presentation>{ |
838 \begin{frame}<1-> |
859 \begin{frame}<1-> |
857 |
878 |
858 \end{frame}} |
879 \end{frame}} |
859 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
880 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
860 *} |
881 *} |
861 |
882 |
|
883 |
|
884 text_raw {* |
|
885 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
886 \mode<presentation>{ |
|
887 \begin{frame}<1> |
|
888 \frametitle{\begin{tabular}{c}\LARGE``Raw'' Alpha-Equivalence\end{tabular}} |
|
889 \mbox{}\\[6mm] |
|
890 |
|
891 \begin{center} |
|
892 LetRec as::assn t::trm \hspace{10mm}\isacommand{bind} bn(as) \isacommand{in} t \alert{as}\\ |
|
893 \end{center} |
|
894 |
|
895 |
|
896 \[\mbox{}\hspace{-4mm} |
|
897 \infer[\text{LetRec-}\!\approx_\alpha] |
|
898 {\text{LetRec}\;as\;t \approx_\alpha \text{LetRec}\;as'\;t'} |
|
899 {(\text{bn}(as), (t, as)) \approx\!\makebox[0mm][l]{${}_{\text{list}}$} |
|
900 ^{R,fv} (\text{bn}(as'), (t', as'))} |
|
901 \]\bigskip |
|
902 |
|
903 \onslide<1->{\alert{deep recursive binders}} |
|
904 \end{frame}} |
|
905 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
906 *} |
|
907 |
|
908 text_raw {* |
|
909 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
910 \mode<presentation>{ |
|
911 \begin{frame}<1-> |
|
912 \frametitle{\begin{tabular}{c}Restrictions\end{tabular}} |
|
913 \mbox{}\\[-6mm] |
|
914 |
|
915 Our restrictions on binding specifications: |
|
916 |
|
917 \begin{itemize} |
|
918 \item a body can only occur once in a list of binding clauses\medskip |
|
919 \item you can only have one binding function for a deep binder\medskip |
|
920 \item binding functions can return: the empty set, singletons, unions (similarly for lists) |
|
921 \end{itemize} |
|
922 |
|
923 |
|
924 \end{frame}} |
|
925 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
926 *} |
|
927 |
862 text_raw {* |
928 text_raw {* |
863 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
929 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
864 \mode<presentation>{ |
930 \mode<presentation>{ |
865 \begin{frame}<1-> |
931 \begin{frame}<1-> |
866 \frametitle{\begin{tabular}{c}Automatic Proofs\end{tabular}} |
932 \frametitle{\begin{tabular}{c}Automatic Proofs\end{tabular}} |
867 \mbox{}\\[-6mm] |
933 \mbox{}\\[-6mm] |
868 |
934 |
869 \begin{itemize} |
935 \begin{itemize} |
870 \item we can show that $\alpha$'s are equivalence relations\medskip |
936 \item we can show that $\alpha$'s are equivalence relations\medskip |
871 \item as a result we can use the quotient package to introduce the type(s) |
937 \item as a result we can use our quotient package to introduce the type(s) |
872 of $\alpha$-equated terms |
938 of $\alpha$-equated terms |
873 |
939 |
874 \[ |
940 \[ |
875 \infer |
941 \infer |
876 {\text{Lam}\;x\;t \alert{=} \text{Lam}\;x'\;t'} |
942 {\text{Lam}\;x\;t \alert{=} \text{Lam}\;x'\;t'} |
926 \draw[->,white!50,line width=1mm] (E) -- (F); |
991 \draw[->,white!50,line width=1mm] (E) -- (F); |
927 \end{tikzpicture} |
992 \end{tikzpicture} |
928 \end{center} |
993 \end{center} |
929 |
994 |
930 \begin{itemize} |
995 \begin{itemize} |
931 \item Core Haskell: 11 types, 49 term-constructors, |
996 \item Core Haskell: 11 types, 49 term-constructors, 7 binding functions |
|
997 \begin{center} |
|
998 $\sim$ 1 min |
|
999 \end{center} |
932 \end{itemize} |
1000 \end{itemize} |
933 |
1001 |
934 \end{frame}} |
1002 \end{frame}} |
935 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
1003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
936 *} |
1004 *} |