slides/slides04.tex
changeset 445 e7d0157f0471
parent 353 b88670c5d04b
child 447 68769db65185
equal deleted inserted replaced
444:3056a4c071b0 445:e7d0157f0471
     8 
     8 
     9 \pgfplotsset{compat=1.11}
     9 \pgfplotsset{compat=1.11}
    10 
    10 
    11 \newcommand{\bl}[1]{\textcolor{blue}{#1}}  
    11 \newcommand{\bl}[1]{\textcolor{blue}{#1}}  
    12 
    12 
    13 \renewcommand{\slidecaption}{AFL 04, King's College London}
    13 \renewcommand{\slidecaption}{CFL 04, King's College London}
    14 
    14 
    15 \begin{document}
    15 \begin{document}
    16 
    16 
    17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    18 \begin{frame}[t]
    18 \begin{frame}[t]
    19 \frametitle{%
    19 \frametitle{%
    20   \begin{tabular}{@ {}c@ {}}
    20   \begin{tabular}{@ {}c@ {}}
    21   \\[-3mm]
    21   \\[-3mm]
    22   \LARGE Automata and \\[-2mm] 
    22   \LARGE Compilers and \\[-2mm] 
    23   \LARGE Formal Languages (4)\\[3mm] 
    23   \LARGE Formal Languages (4)\\[3mm] 
    24   \end{tabular}}
    24   \end{tabular}}
    25 
    25 
    26   \normalsize
    26   \normalsize
    27   \begin{center}
    27   \begin{center}
    59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
    59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
    60 
    60 
    61 
    61 
    62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    63 \begin{frame}[t]
    63 \begin{frame}[t]
    64 \frametitle{\bl{$a^?^{\{n\}} \cdot a^{\{n\}}$}}
    64 \frametitle{\bl{$a^{?\{n\}} \cdot a^{\{n\}}$}}
    65 
    65 
    66 \begin{tikzpicture}
    66 \begin{tikzpicture}
    67 \begin{axis}[xlabel={\pcode{a}s},ylabel={time in secs},
    67 \begin{axis}[xlabel={\pcode{a}s},ylabel={time in secs},
    68     enlargelimits=false,
    68     enlargelimits=false,
    69     xtick={0,5,...,30},
    69     xtick={0,5,...,30},
    75     width=10cm,
    75     width=10cm,
    76     height=7cm, 
    76     height=7cm, 
    77     legend entries={Python,Ruby,my NFA},  
    77     legend entries={Python,Ruby,my NFA},  
    78     legend pos=north west,
    78     legend pos=north west,
    79     legend cell align=left]
    79     legend cell align=left]
    80 \addplot[blue,mark=*, mark options={fill=white}] 
    80 \addplot[blue,mark=*, mark options={fill=white}] table {re-python.data};
    81   table {re-python.data};
    81 \addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data};  
    82 \addplot[brown,mark=pentagon*, mark options={fill=white}] 
    82 \addplot[red,mark=triangle*, mark options={fill=white}] table {nfasearch.data};	  
    83   table {re-ruby.data};  
       
    84 \addplot[red,mark=triangle*, mark options={fill=white}] 
       
    85   table {nfasearch.data};	  
       
    86 \end{axis}
    83 \end{axis}
    87 \end{tikzpicture}
    84 \end{tikzpicture}
    88 
    85 
    89 \end{frame}
    86 \end{frame}
    90 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
    87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   109 \end{tikzpicture}
   106 \end{tikzpicture}
   110 \end{center}\bigskip
   107 \end{center}\bigskip
   111 
   108 
   112 \begin{center}
   109 \begin{center}
   113 \begin{tabular}{r@ {\hspace{2mm}}c@ {\hspace{2mm}}l@{\hspace{7mm}}l}
   110 \begin{tabular}{r@ {\hspace{2mm}}c@ {\hspace{2mm}}l@{\hspace{7mm}}l}
   114 \bl{$q_0$} & \bl{$=$} & \bl{$\epsilon + q_0\,b + q_1\,b +  q_2\,b$} & (start state)\\
   111 \bl{$q_0$} & \bl{$=$} & \bl{$\ONE + q_0\,b + q_1\,b +  q_2\,b$} & (start state)\\
   115 \bl{$q_1$} & \bl{$=$} & \bl{$q_0\,a$}\\
   112 \bl{$q_1$} & \bl{$=$} & \bl{$q_0\,a$}\\
   116 \bl{$q_2$} & \bl{$=$} & \bl{$q_1\,a + q_2\,a$}\\
   113 \bl{$q_2$} & \bl{$=$} & \bl{$q_1\,a + q_2\,a$}\\
   117 
   114 
   118 \end{tabular}
   115 \end{tabular}
   119 \end{center}
   116 \end{center}
   239 automaton that recognises all its strings.
   236 automaton that recognises all its strings.
   240 \end{quote}\bigskip\bigskip
   237 \end{quote}\bigskip\bigskip
   241 
   238 
   242 
   239 
   243 \small
   240 \small
   244 for example $a^nb^n$ is not regular
   241 for example \bl{$a^nb^n$} is not regular
   245 \end{frame}
   242 \end{frame}
   246 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   243 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   247 
   244 
   248 
   245 
   249 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   246 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   540 
   537 
   541 \begin{center}
   538 \begin{center}
   542 \begin{columns}
   539 \begin{columns}
   543 \begin{column}{3cm}
   540 \begin{column}{3cm}
   544 \begin{tabular}{@{}rrl@{}}
   541 \begin{tabular}{@{}rrl@{}}
   545   \bl{$r$} & \bl{$::=$}  & \bl{$\varnothing$}\\
   542   \bl{$r$} & \bl{$::=$}  & \bl{$\ZERO$}\\
   546            & \bl{$\mid$} & \bl{$\epsilon$}   \\
   543            & \bl{$\mid$} & \bl{$\ONE$}   \\
   547            & \bl{$\mid$} & \bl{$c$}          \\
   544            & \bl{$\mid$} & \bl{$c$}          \\
   548            & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}\\
   545            & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}\\
   549            & \bl{$\mid$} & \bl{$r_1 + r_2$}   \\
   546            & \bl{$\mid$} & \bl{$r_1 + r_2$}   \\
   550   \\
   547   \\
   551            & \bl{$\mid$} & \bl{$r^*$}         \\
   548            & \bl{$\mid$} & \bl{$r^*$}         \\
   587 
   584 
   588 Finding a (posix) value for recognising the empty string:
   585 Finding a (posix) value for recognising the empty string:
   589 
   586 
   590 \begin{center}
   587 \begin{center}
   591 \begin{tabular}{lcl}
   588 \begin{tabular}{lcl}
   592   \bl{$mkeps\,\epsilon$}  & \bl{$\dn$}  & \bl{$Empty$}\\
   589   \bl{$mkeps\,\ONE$}  & \bl{$\dn$}  & \bl{$Empty$}\\
   593   \bl{$mkeps\,r_1 + r_2$} & \bl{$\dn$}  & \bl{if $nullable(r_1)$}  \\
   590   \bl{$mkeps\,r_1 + r_2$} & \bl{$\dn$}  & \bl{if $nullable(r_1)$}  \\
   594                           &             & \bl{then $Left(mkeps(r_1))$}\\
   591                           &             & \bl{then $Left(mkeps(r_1))$}\\
   595                           &             & \bl{else $Right(mkeps(r_2))$}\\
   592                           &             & \bl{else $Right(mkeps(r_2))$}\\
   596   \bl{$mkeps\,r_1 \cdot r_2$}  & \bl{$\dn$} & \bl{$Seq(mkeps(r_1),mkeps(r_2))$}\\
   593   \bl{$mkeps\,r_1 \cdot r_2$}  & \bl{$\dn$} & \bl{$Seq(mkeps(r_1),mkeps(r_2))$}\\
   597   \bl{$mkeps\,r^*$}      & \bl{$\dn$} & \bl{$[]$}  \\
   594   \bl{$mkeps\,r^*$}      & \bl{$\dn$} & \bl{$[]$}  \\
   658 \begin{textblock}{6}(1,0.8)
   655 \begin{textblock}{6}(1,0.8)
   659 \begin{bubble}[6cm]
   656 \begin{bubble}[6cm]
   660 \small
   657 \small
   661 \begin{tabular}{ll}
   658 \begin{tabular}{ll}
   662 \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\
   659 \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\
   663 \bl{$r_2$}: & \bl{$\epsilon \cdot (b \cdot c)$}\\
   660 \bl{$r_2$}: & \bl{$\ONE \cdot (b \cdot c)$}\\
   664 \bl{$r_3$}: & \bl{$(\varnothing \cdot (b \cdot c)) + (\epsilon \cdot c)$}\\
   661 \bl{$r_3$}: & \bl{$(\ZERO \cdot (b \cdot c)) + (\ONE \cdot c)$}\\
   665 \bl{$r_4$}: & \bl{$(\varnothing \cdot (b \cdot c)) + ((\varnothing \cdot c) + \epsilon)$}\\
   662 \bl{$r_4$}: & \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$}\\
   666 \end{tabular}
   663 \end{tabular}
   667 \end{bubble}
   664 \end{bubble}
   668 \end{textblock}}
   665 \end{textblock}}
   669 
   666 
   670 \only<2->{
   667 \only<2->{
   733 \begin{textblock}{6}(1,0.8)
   730 \begin{textblock}{6}(1,0.8)
   734 \begin{bubble}[6cm]
   731 \begin{bubble}[6cm]
   735 \small
   732 \small
   736 \begin{tabular}{ll}
   733 \begin{tabular}{ll}
   737 \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\
   734 \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\
   738 \bl{$r_2$}: & \bl{$\epsilon \cdot (b \cdot c)$}\\
   735 \bl{$r_2$}: & \bl{$\ONE \cdot (b \cdot c)$}\\
   739 \bl{$r_3$}: & \bl{$(\varnothing \cdot (b \cdot c)) + (\epsilon \cdot c)$}\\
   736 \bl{$r_3$}: & \bl{$(\ZERO \cdot (b \cdot c)) + (\ONE \cdot c)$}\\
   740 \bl{$r_4$}: & \bl{$(\varnothing \cdot (b \cdot c)) + ((\varnothing \cdot c) + \epsilon)$}\\
   737 \bl{$r_4$}: & \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$}\\
   741 \end{tabular}
   738 \end{tabular}
   742 \end{bubble}
   739 \end{bubble}
   743 \end{textblock}
   740 \end{textblock}
   744 
   741 
   745 \begin{textblock}{6}(1,11.4)
   742 \begin{textblock}{6}(1,11.4)
   829 \small
   826 \small
   830 for extracting subpatterns \bl{$(z: ((x:ab) + (y:ba))$}
   827 for extracting subpatterns \bl{$(z: ((x:ab) + (y:ba))$}
   831 
   828 
   832 \end{frame}
   829 \end{frame}
   833 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   830 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   834 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   831 
   835 \begin{frame}[c]
   832 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   836 \frametitle{Records}
   833 \begin{frame}[c]
   837 
   834 
   838 \begin{itemize}
   835 \begin{itemize}
   839 \item new regex: \bl{$(x:r)$}\hspace{7mm}new value: \bl{$Rec(x,v)$}\medskip\pause
   836 \item A regular expression for email addresses
   840 
       
   841 \item \bl{$nullable(x:r) \dn nullable(r)$}
       
   842 \item \bl{$der\,c\,(x:r) \dn (x:der\,c\,r)$}
       
   843 \item \bl{$mkeps(x:r) \dn Rec(x, mkeps(r))$}
       
   844 \item \bl{$inj\,(x:r)\,c\,v \dn Rec(x, inj\,r\,c\,v)$}
       
   845 \end{itemize}\bigskip\bigskip\pause
       
   846 
       
   847 \small
       
   848 for extracting subpatterns \bl{$(z: ((x:ab) + (y:ba))$}
       
   849 
       
   850 \end{frame}
       
   851 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   852 
       
   853 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   854 \begin{frame}[c]
       
   855 
       
   856 \begin{itemize}
       
   857 \item Regular expression for email addresses
       
   858 
   837 
   859 \begin{center}
   838 \begin{center}
   860 \begin{tabular}{l}
   839 \begin{tabular}{l}
   861 (name: \bl{$[a\mbox{-}z0\mbox{-}9\_\!\_\,.-]^+$})\bl{$\cdot @\cdot$}\\ 
   840 (name: \bl{$[a\mbox{-}z0\mbox{-}9\_\!\_\,.-]^+$})\bl{$\cdot @\cdot$}\\ 
   862 \qquad(domain: \bl{$[a\mbox{-}z0\mbox{-}9\,.-]^+$}) \bl{$\cdot .\cdot$}\\ 
   841 \qquad(domain: \bl{$[a\mbox{-}z0\mbox{-}9\,.-]^+$}) \bl{$\cdot .\cdot$}\\ 
   866 
   845 
   867 \bl{\[
   846 \bl{\[
   868 \texttt{christian.urban@kcl.ac.uk}
   847 \texttt{christian.urban@kcl.ac.uk}
   869 \]}
   848 \]}
   870 
   849 
   871 \item result environment:
   850 \item the result environment:
   872 
   851 
   873 \begin{center}
   852 \begin{center}
   874 \begin{tabular}{l}
   853 \begin{tabular}{l}
   875 \bl{$[(name:\texttt{christian.urban}),$}\\ 
   854 \bl{$[(name:\texttt{christian.urban}),$}\\ 
   876 \bl{$\phantom{[}(domain:\texttt{kcl}),$}\\ 
   855 \bl{$\phantom{[}(domain:\texttt{kcl}),$}\\ 
   939 \draw (r4) node[anchor=north west] {\;\raisebox{-8mm}{\bl{$mkeps$}}};
   918 \draw (r4) node[anchor=north west] {\;\raisebox{-8mm}{\bl{$mkeps$}}};
   940 \end{tikzpicture}
   919 \end{tikzpicture}
   941 \end{center}
   920 \end{center}
   942 
   921 
   943 \small
   922 \small
   944 \hspace{4.5cm}\bl{$(\varnothing \cdot (b \cdot c)) + ((\varnothing \cdot c) + \epsilon)$}
   923 \hspace{4.5cm}\bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$}
   945 $\mapsto$
   924 $\mapsto$
   946 \bl{$\epsilon$}
   925 \bl{$\ONE$}
   947 
   926 
   948 \end{frame}
   927 \end{frame}
   949 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   928 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   950 
   929 
   951 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   930 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   952 \begin{frame}[c]
   931 \begin{frame}[c]
   953 \frametitle{Rectification}
   932 \frametitle{Rectification}
   954 
   933 
   955 \def\arraystretch{1.05}
   934 \def\arraystretch{1.05}
   956 \begin{center}
   935 \begin{center}
   957 \begin{tabular}{l@{\hspace{2mm}}c@{\hspace{2mm}}l@{\hspace{5mm}}l}
   936 \begin{tabular}{l@{\hspace{2mm}}c@{\hspace{2mm}}l@{\hspace{8mm}}l}
   958 & & & \hspace{5mm}rectification \\
   937 & & & \hspace{5mm}rectification \\
   959 & & & \hspace{5mm}functions:\\
   938 & & & \hspace{5mm}functions:\\
   960 \bl{$r \cdot \varnothing$} & $\mapsto$ & \bl{$\varnothing$} & \\ 
   939 \bl{$r \cdot \ZERO$} & $\mapsto$ & \bl{$\ZERO$} & \\ 
   961 \bl{$\varnothing \cdot r$} & $\mapsto$ & \bl{$\varnothing$} & \\ 
   940 \bl{$\ZERO \cdot r$} & $\mapsto$ & \bl{$\ZERO$} & \\ 
   962 \bl{$r \cdot \epsilon$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,v, f_2\,Empty)$}\\ 
   941 \bl{$r \cdot \ONE$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,v, f_2\,Empty)$}\\ 
   963 \bl{$\epsilon \cdot r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,Empty, f_2\,v)$}\\ 
   942 \bl{$\ONE \cdot r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,Empty, f_2\,v)$}\\ 
   964 \bl{$r + \varnothing$} & $\mapsto$ & \bl{$r$}   & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$}\\ 
   943 \bl{$r + \ZERO$} & $\mapsto$ & \bl{$r$}   & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$}\\ 
   965 \bl{$\varnothing + r$} & $\mapsto$ & \bl{$r$}   & \bl{$\lambda f_1\,f_2\,v.\, Right(f_2\,v)$}\\
   944 \bl{$\ZERO + r$} & $\mapsto$ & \bl{$r$}   & \bl{$\lambda f_1\,f_2\,v.\, Right(f_2\,v)$}\\
   966 \bl{$r + r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$}
   945 \bl{$r + r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$}
   967 \end{tabular}
   946 \end{tabular}
   968 \end{center}\medskip\pause
   947 \end{center}\medskip\pause
   969 
   948 
   970 \small
   949 \small
   971 old \bl{$simp$} returns a rexp;\\
   950 old \bl{$simp$} returns a rexp;\\
   972 new \bl{$simp$} returns a rexp and a rectification~fun.
   951 new \bl{$simp$} returns a rexp and a rectification~function.
   973 \end{frame}
   952 \end{frame}
   974 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   953 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   975 
   954 
   976 
   955 
   977 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   956 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   982 \begin{tabular}{l}
   961 \begin{tabular}{l}
   983 \bl{$simp(r)$}:\\
   962 \bl{$simp(r)$}:\\
   984 \quad case \bl{$r = r_1 + r_2$}\\
   963 \quad case \bl{$r = r_1 + r_2$}\\
   985 \qquad let \bl{$(r_{1s}, f_{1s}) = simp(r_1)$}\\
   964 \qquad let \bl{$(r_{1s}, f_{1s}) = simp(r_1)$}\\
   986 \qquad \phantom{let} \bl{$(r_{2s}, f_{2s}) = simp(r_2)$}\smallskip\\
   965 \qquad \phantom{let} \bl{$(r_{2s}, f_{2s}) = simp(r_2)$}\smallskip\\
   987 \qquad case \bl{$r_{1s} = \varnothing$}: 
   966 \qquad case \bl{$r_{1s} = \ZERO$}: 
   988        return \bl{$(r_{2s}, \lambda v. \,Right(f_{2s}(v)))$}\\
   967        return \bl{$(r_{2s}, \lambda v. \,Right(f_{2s}(v)))$}\\
   989 \qquad case \bl{$r_{2s} = \varnothing$}: 
   968 \qquad case \bl{$r_{2s} = \ZERO$}: 
   990        return \bl{$(r_{1s}, \lambda v. \,Left(f_{1s}(v)))$}\\
   969        return \bl{$(r_{1s}, \lambda v. \,Left(f_{1s}(v)))$}\\
   991 \qquad case \bl{$r_{1s} = r_{2s}$}:
   970 \qquad case \bl{$r_{1s} = r_{2s}$}:
   992        return \bl{$(r_{1s}, \lambda v. \,Left(f_{1s}(v)))$}\\
   971        return \bl{$(r_{1s}, \lambda v. \,Left(f_{1s}(v)))$}\\
   993 \qquad otherwise: 
   972 \qquad otherwise: 
   994        return \bl{$(r_{1s} + r_{2s}, f_{alt}(f_{1s}, f_{2s}))$}\\
   973        return \bl{$(r_{1s} + r_{2s}, f_{alt}(f_{1s}, f_{2s}))$}\\
  1008 
   987 
  1009 
   988 
  1010 \end{frame}
   989 \end{frame}
  1011 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   990 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  1012 
   991 
       
   992 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  1013 \begin{frame}[c]
   993 \begin{frame}[c]
  1014 
   994 
  1015 {\footnotesize\lstinputlisting[language=Scala,numbers=none,
   995 {\footnotesize\lstinputlisting[language=Scala,numbers=none,
  1016 xleftmargin=-5mm] {../progs/app05.scala}}
   996 xleftmargin=-5mm] {../progs/app05.scala}}
  1017 
   997 
  1018 \end{frame}
   998 \end{frame}
       
   999 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  1019 
  1000 
  1020 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1001 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1021 \begin{frame}[c]
  1002 \begin{frame}[c]
  1022 \frametitle{Rectification}
  1003 \frametitle{Rectification}
  1023 
  1004 
  1025 \begin{tabular}{@{\hspace{-3mm}}l}
  1006 \begin{tabular}{@{\hspace{-3mm}}l}
  1026 \bl{$simp(r)$}:\ldots\\
  1007 \bl{$simp(r)$}:\ldots\\
  1027 \quad case \bl{$r = r_1 \cdot r_2$}\\
  1008 \quad case \bl{$r = r_1 \cdot r_2$}\\
  1028 \qquad let \bl{$(r_{1s}, f_{1s}) = simp(r_1)$}\\
  1009 \qquad let \bl{$(r_{1s}, f_{1s}) = simp(r_1)$}\\
  1029 \qquad \phantom{let} \bl{$(r_{2s}, f_{2s}) = simp(r_2)$}\smallskip\\
  1010 \qquad \phantom{let} \bl{$(r_{2s}, f_{2s}) = simp(r_2)$}\smallskip\\
  1030 \qquad case \bl{$r_{1s} = \varnothing$}: 
  1011 \qquad case \bl{$r_{1s} = \ZERO$}: 
  1031        return \bl{$(\varnothing, f_{error})$}\\
  1012        return \bl{$(\ZERO, f_{error})$}\\
  1032 \qquad case \bl{$r_{2s} = \varnothing$}: 
  1013 \qquad case \bl{$r_{2s} = \ZERO$}: 
  1033        return \bl{$(\varnothing, f_{error})$}\\
  1014        return \bl{$(\ZERO, f_{error})$}\\
  1034 \qquad case \bl{$r_{1s} = \epsilon$}: 
  1015 \qquad case \bl{$r_{1s} = \ONE$}: 
  1035 return \bl{$(r_{2s}, \lambda v. \,Seq(f_{1s}(Empty), f_{2s}(v)))$}\\
  1016 return \bl{$(r_{2s}, \lambda v. \,Seq(f_{1s}(Empty), f_{2s}(v)))$}\\
  1036 \qquad case \bl{$r_{2s} = \epsilon$}: 
  1017 \qquad case \bl{$r_{2s} = \ONE$}: 
  1037 return \bl{$(r_{1s}, \lambda v. \,Seq(f_{1s}(v), f_{2s}(Empty)))$}\\
  1018 return \bl{$(r_{1s}, \lambda v. \,Seq(f_{1s}(v), f_{2s}(Empty)))$}\\
  1038 \qquad otherwise: 
  1019 \qquad otherwise: 
  1039        return \bl{$(r_{1s} \cdot r_{2s}, f_{seq}(f_{1s}, f_{2s}))$}\\
  1020        return \bl{$(r_{1s} \cdot r_{2s}, f_{seq}(f_{1s}, f_{2s}))$}\\
  1040 \end{tabular}
  1021 \end{tabular}
  1041 \end{center}
  1022 \end{center}
  1105 
  1086 
  1106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1087 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1107 \begin{frame}[c]
  1088 \begin{frame}[c]
  1108 \begin{center}
  1089 \begin{center}
  1109 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
  1090 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
  1110 $zeroable(\varnothing)$      & $\dn$ & $true$\\
  1091 \bl{$zeroable(\varnothing)$}      & \bl{$\dn$} & \bl{$true$}\\
  1111 $zeroable(\epsilon)$           & $\dn$ &  $f\!alse$\\
  1092 \bl{$zeroable(\epsilon)$}         & \bl{$\dn$} & \bl{$\textit{false}$}\\
  1112 $zeroable (c)$                    & $\dn$ &  $f\!alse$\\
  1093 \bl{$zeroable(c)$}                & \bl{$\dn$} & \bl{$\textit{false}$}\\
  1113 $zeroable (r_1 + r_2)$        & $\dn$ &  $zeroable(r_1) \wedge zeroable(r_2)$ \\ 
  1094 \bl{$zeroable(r_1 + r_2)$}        & \bl{$\dn$} & \bl{$zeroable(r_1) \wedge zeroable(r_2)$}\\ 
  1114 $zeroable (r_1 \cdot r_2)$  & $\dn$ &  $zeroable(r_1) \vee zeroable(r_2)$ \\
  1095 \bl{$zeroable(r_1 \cdot r_2)$}    & \bl{$\dn$} & \bl{$zeroable(r_1) \vee zeroable(r_2)$}\\
  1115 $zeroable (r^*)$                  & $\dn$ & $f\!alse$\\
  1096 \bl{$zeroable(r^*)$}              & \bl{$\dn$} & \bl{$\textit{false}$}\\
  1116 \end{tabular}
  1097 \end{tabular}
  1117 \end{center}
  1098 \end{center}
  1118 
  1099 
  1119 \begin{center}
  1100 \begin{center}
  1120 $zeroable(r)$ if and only if $L(r) = \varnothing$
  1101 \bl{$zeroable(r)$} if and only if \bl{$L(r) = \{\}$}
  1121 \end{center}
  1102 \end{center}
  1122 
  1103 
  1123 
  1104 
  1124 \end{frame}
  1105 \end{frame}
  1125 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
  1106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%