slides/slides09.tex
changeset 701 681c36b2af27
parent 612 7a12053567d4
child 702 39e21a33ffb0
equal deleted inserted replaced
700:52263ffd17b9 701:681c36b2af27
       
     1 % !TEX program = xelatex
     1 \documentclass[dvipsnames,14pt,t]{beamer}
     2 \documentclass[dvipsnames,14pt,t]{beamer}
     2 \usepackage{../slides}
     3 \usepackage{../slides}
     3 \usepackage{../langs}
     4 \usepackage{../langs}
     4 \usepackage{../data}
     5 \usepackage{../data}
     5 \usepackage{../graphics}
     6 \usepackage{../graphics}
     6 \usepackage{../grammar}
     7 \usepackage{../grammar}
     7 \usepackage{soul}
     8 \usepackage{soul}
     8 \usepackage{mathpartir}
     9 \usepackage{mathpartir}
       
    10 \usetikzlibrary{shapes,arrows,shadows}
     9 
    11 
    10 % beamer stuff
    12 % beamer stuff
    11 \renewcommand{\slidecaption}{CFL 09, King's College London}
    13 \renewcommand{\slidecaption}{CFL 09, King's College London}
    12 \newcommand{\bl}[1]{\textcolor{blue}{#1}}       
    14 \newcommand{\bl}[1]{\textcolor{blue}{#1}}       
    13 
    15 
    24   \end{tabular}}
    26   \end{tabular}}
    25 
    27 
    26   \normalsize
    28   \normalsize
    27   \begin{center}
    29   \begin{center}
    28   \begin{tabular}{ll}
    30   \begin{tabular}{ll}
    29   Email:  & christian.urban at kcl.ac.uk\\
    31     Email:  & christian.urban at kcl.ac.uk\\
    30   Office: & N\liningnums{7.07} (North Wing, Bush House)\\
    32     Office Hours: & Thursdays 12 -- 14\\
    31   Slides: & KEATS (also homework is there)\\
    33     Location: & N7.07 (North Wing, Bush House)\\
       
    34     Slides \& Progs: & KEATS (also homework is there)\\  
    32   \end{tabular}
    35   \end{tabular}
    33   \end{center}
    36   \end{center}
    34 
    37 
    35 \end{frame}
    38 \end{frame}
    36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    37 
    40 
    38  
    41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    39  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    42 \begin{frame}[c,fragile]
    40 \begin{frame}[t]
    43 \frametitle{Functional Programming}
    41 \frametitle{While Language}
    44 
    42   
    45 \footnotesize
       
    46 \begin{textblock}{13}(0.9,3)
       
    47 \begin{lstlisting}[]numbers=none]
       
    48 def fib(n) = if n == 0 then 0 
       
    49              else if n == 1 then 1 
       
    50              else fib(n - 1) + fib(n - 2);
       
    51 
       
    52 def fact(n) = if n == 0 then 1 else n * fact(n - 1);
       
    53 
       
    54 def ack(m, n) = if m == 0 then n + 1
       
    55                 else if n == 0 then ack(m - 1, 1)
       
    56                 else ack(m - 1, ack(m, n - 1));
       
    57                 
       
    58 def gcd(a, b) = if b == 0 then a else gcd(b, a % b);                
       
    59 \end{lstlisting}
       
    60 \end{textblock}
       
    61 
       
    62 \end{frame}
       
    63 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
    64 
       
    65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    66 \begin{frame}[c,fragile]
       
    67 \frametitle{Factorial on the JVM}
       
    68 
       
    69 \begin{textblock}{7}(1,1.8)\footnotesize
       
    70 \begin{minipage}{6cm}
       
    71 \begin{lstlisting}[language=JVMIS,basicstyle=\ttfamily, numbers=none]
       
    72 .method public static facT(II)I 
       
    73 .limit locals 2
       
    74 .limit stack 6
       
    75   iload 0
       
    76   ldc 0
       
    77   if_icmpne If_else_2
       
    78   iload 1
       
    79   goto If_end_3
       
    80 If_else_2:
       
    81   iload 0
       
    82   ldc 1
       
    83   isub
       
    84   iload 0
       
    85   iload 1
       
    86   imul
       
    87   invokestatic fact/fact/facT(II)I
       
    88 If_end_3:
       
    89   ireturn
       
    90 .end method 
       
    91 \end{lstlisting}
       
    92 \end{minipage}
       
    93 \end{textblock}
       
    94 
       
    95 \begin{textblock}{7}(6,7)
       
    96 \begin{bubble}[7cm]\small
       
    97 \begin{lstlisting}[language=Lisp,
       
    98                    basicstyle=\ttfamily, 
       
    99                    numbers=none,
       
   100                    xleftmargin=1mm,linebackgroundcolor=\color{cream}]
       
   101 def facT(n, acc) = 
       
   102   if n == 0 then acc 
       
   103   else facT(n - 1, n * acc);
       
   104 \end{lstlisting}
       
   105 \end{bubble}
       
   106 \end{textblock}
       
   107 
       
   108 \end{frame}
       
   109 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   110 
       
   111 
       
   112 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   113 \begin{frame}[fragile,c]
       
   114 \frametitle{LLVM}
       
   115 
       
   116 \begin{itemize}
       
   117   \item Chris Lattner, Vikram Adve (started in 2000)
       
   118   \item Apple hired Lattner in 2006
       
   119   \item modular architecture, LLVM-IR
       
   120   \item \texttt{lli} and \texttt{llc} 
       
   121 \end{itemize}
       
   122 
       
   123 \end{frame}
       
   124 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   125 
       
   126 
       
   127 
       
   128 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   129 \tikzstyle{sensor}=[draw, fill=blue!20, text width=3.8em, line width=1mm,
       
   130     text centered, minimum height=2em,drop shadow]
       
   131 \tikzstyle{ann} = [above, text width=4em, text centered]
       
   132 \tikzstyle{sc} = [sensor, text width=7em, fill=red!20, 
       
   133     minimum height=6em, rounded corners, drop shadow,line width=1mm]
       
   134 
       
   135 \begin{frame}[fragile,c]
       
   136 \frametitle{LLVM: Overview}
       
   137 
       
   138 \begin{tikzpicture}
       
   139     % Validation Layer is the same except that there are a set of nodes and links which are added
       
   140    
       
   141     \path (0,0) node (IR) [sc] {\textbf{LLVM-IR}\\ Optimisations};
       
   142     \path (IR.west)+(-2.2,1.7) node (sou1) [sensor] {C++};
       
   143     \path (IR.west)+(-2.2,0.5) node (sou2)[sensor] {C};
       
   144     \path (IR.west)+(-2.2,-1.0) node (dots)[ann] {$\vdots$}; 
       
   145     \path (IR.west)+(-2.2,-1.8) node (sou3)[sensor] {Haskell};    
       
   146 
       
   147     \path [draw,->,line width=1mm] (sou1.east) -- node [above] {} (IR.160);
       
   148     \path [draw,->,line width=1mm] (sou2.east) -- node [above] {} (IR.180);
       
   149     \path [draw,->,line width=1mm] (sou3.east) -- node [above] {} (IR.200);
       
   150 
       
   151     \path (IR.east)+(2.2,2.0)  node (tar1)[sensor] {x86};
       
   152     \path (IR.east)+(2.2,0.8)  node (tar2)[sensor] {ARM};
       
   153     \path (IR.east)+(2.2,-0.4) node (tar3)[sensor] {MIPS}; 
       
   154     \path (IR.east)+(2.2,-1.6) node (tar4)[sensor] {RISC}; 
       
   155     \path (IR.east)+(2.2,-2.8) node (tar5)[sensor] {Power PC};
       
   156     \path (IR.east)+(2.2,-4.2) node (dots2)[ann] {$\vdots$};
       
   157 
       
   158     \path [draw,<-,line width=1mm] (tar1.west) -- node [above] {} (IR.10);
       
   159     \path [draw,<-,line width=1mm] (tar2.west) -- node [above] {} (IR.5);
       
   160     \path [draw,<-,line width=1mm] (tar3.west) -- node [above] {} (IR.0);
       
   161     \path [draw,<-,line width=1mm] (tar4.west) -- node [above] {} (IR.-5);
       
   162     \path [draw,<-,line width=1mm] (tar5.west) -- node [above] {} (IR.-10);
       
   163     
       
   164 \end{tikzpicture}
       
   165 \end{frame}
       
   166 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   167 
       
   168 
       
   169 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   170 \begin{frame}[fragile,t]
       
   171 \frametitle{LLVM-IR}
       
   172 \small
       
   173 
       
   174 \begin{textblock}{7.7}(8,11.4)
       
   175 \begin{bubble}[5cm]\small
       
   176 \begin{lstlisting}[language=Lisp,
       
   177                    numbers=none,
       
   178                    xleftmargin=1mm,linebackgroundcolor=\color{cream}]
       
   179 def fact(n) =
       
   180   if n == 0 then 1 
       
   181   else n * fact(n - 1)
       
   182 \end{lstlisting}
       
   183 \end{bubble}
       
   184 \end{textblock}
       
   185 
       
   186 \begin{lstlisting}[language=LLVM,xleftmargin=-7mm]
       
   187 define i32 @fact (i32 %n) {
       
   188    %tmp_19 = icmp eq i32  %n, 0
       
   189    br i1 %tmp_19, label %if_br_23, label %else_br_24
       
   190 
       
   191 if_br_23:
       
   192    ret i32 1
       
   193 
       
   194 else_br_24:
       
   195    %tmp_21 = sub i32  %n, 1
       
   196    %tmp_22 = call i32 @fact (i32 %tmp_21)
       
   197    %tmp_20 = mul i32  %n, %tmp_22
       
   198    ret i32 %tmp_20
       
   199 }
       
   200 \end{lstlisting}
       
   201 
       
   202 \end{frame}
       
   203 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   204 
       
   205 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   206 \begin{frame}[fragile,c]
       
   207 \frametitle{LLVM Types}
       
   208 
       
   209 \tt
    43 \begin{center}
   210 \begin{center}
    44 \bl{\begin{tabular}{@{}lcl@{}}
   211 \begin{tabular}{ll}
    45 \\[-12mm]        
   212 boolean & i1 \\
    46 \meta{Stmt} & $::=$ &  $\texttt{skip}$\\
   213 byte    & i8 \\
    47               & $|$ & \textit{Id}\;\texttt{:=}\;\meta{AExp}\\
   214 short   & i16\\
    48               & $|$ & \texttt{if}\; \meta{BExp} \;\texttt{then}\; \meta{Block} \;\texttt{else}\; \meta{Block}\\
   215 char    & i16\\
    49               & $|$ & \texttt{while}\; \meta{BExp} \;\texttt{do}\; \meta{Block}\\
   216 integer & i32\\
    50               & $|$ & \texttt{read}\;\textit{Id}\\
   217 long    & i64\\
    51               & $|$ & \texttt{write}\;\textit{Id}\\
   218 float   & float\\
    52               & $|$ & \texttt{write}\;\textit{String}\medskip\\
   219 double  & double\\
    53 \meta{Stmts} & $::=$ &  \meta{Stmt} \;\texttt{;}\; \meta{Stmts} $|$  \meta{Stmt}\medskip\\
   220 *\_      & pointer to \\
    54 \meta{Block} & $::=$ &  \texttt{\{}\,\meta{Stmts}\,\texttt{\}} $|$ \meta{Stmt}\medskip\\
   221 **\_     & pointer to a pointer to\\
    55 \meta{AExp} & $::=$ & \ldots\\
   222 \mbox{}[\_]    & arrays of\\
    56 \meta{BExp} & $::=$ & \ldots\\
   223 \end{tabular}
    57 \end{tabular}}
       
    58 \end{center}
   224 \end{center}
    59 \end{frame}
   225 
    60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   226 \end{frame}
       
   227 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   228 
       
   229 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   230 \begin{frame}[fragile,c]
       
   231 \frametitle{LLVM Instructions}
       
   232 \small
       
   233 
       
   234 \begin{lstlisting}[language=LLVM]
       
   235 br i1 %var, label %if_br, label %else_br
       
   236 
       
   237 icmp eq i32  %x, %y     ; for equal
       
   238 icmp sle i32 %x, %y     ;   signed less or equal
       
   239 icmp slt i32 %x, %y     ;   signed less than
       
   240 icmp ult i32 %x, %y     ;   unsigned less than 
       
   241 
       
   242 %var = call i32 @foo(...args...)
       
   243 \end{lstlisting}
       
   244 
       
   245 \end{frame}
       
   246 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   247 
       
   248 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   249 \begin{frame}[fragile,c]
       
   250 \frametitle{SSA Format}
       
   251 
       
   252 \bl{$(1 + a) + (3 + (b * 5))$}\bigskip\bigskip
       
   253 
       
   254 \begin{lstlisting}[language=LLVM]
       
   255 let tmp0 = add 1 a in   
       
   256 let tmp1 = mul b 5 in 
       
   257 let tmp2 = add 3 tmp1 in 
       
   258 let tmp3 = add tmp0 tmp2 in
       
   259   tmp3 
       
   260 \end{lstlisting}
       
   261 
       
   262 \end{frame}
       
   263 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   264 
       
   265 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   266 \begin{frame}[fragile,c]
       
   267 \frametitle{Abstract Syntax Trees}
       
   268 \footnotesize
       
   269 
       
   270 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-3mm]
       
   271 // Fun language (expressions)
       
   272 abstract class Exp 
       
   273 abstract class BExp 
       
   274 
       
   275 case class Call(name: String, args: List[Exp]) extends Exp
       
   276 case class If(a: BExp, e1: Exp, e2: Exp) extends Exp
       
   277 case class Write(e: Exp) extends Exp
       
   278 case class Var(s: String) extends Exp
       
   279 case class Num(i: Int) extends Exp
       
   280 case class Aop(o: String, a1: Exp, a2: Exp) extends Exp
       
   281 case class Sequence(e1: Exp, e2: Exp) extends Exp
       
   282 case class Bop(o: String, a1: Exp, a2: Exp) extends BExp  
       
   283 \end{lstlisting}
       
   284 
       
   285 \end{frame}
       
   286 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   287 
       
   288 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   289 \begin{frame}[fragile,c]
       
   290 \frametitle{K-(Intermediate)Language}
       
   291 \footnotesize
       
   292 
       
   293 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-3mm]
       
   294 abstract class KExp
       
   295 abstract class KVal
       
   296 
       
   297 case class KVar(s: String) extends KVal
       
   298 case class KNum(i: Int) extends KVal
       
   299 case class Kop(o: String, v1: KVal, v2: KVal) extends KVal
       
   300 case class KCall(o: String, vrs: List[KVal]) extends KVal
       
   301 case class KWrite(v: KVal) extends KVal
       
   302 
       
   303 case class KIf(x1: String, e1: KExp, e2: KExp) extends KExp
       
   304 case class KLet(x: String, v: KVal, e: KExp) extends KExp
       
   305 case class KReturn(v: KVal) extends KExp
       
   306 \end{lstlisting}
       
   307 
       
   308 \end{frame}
       
   309 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   310 
       
   311 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   312 \begin{frame}[fragile,c]
       
   313 \frametitle{CPS-Translation}
       
   314 \small
       
   315 
       
   316 \begin{lstlisting}[language=Scala,numbers=none]
       
   317 def CPS(e: Exp)(k: KVal => KExp) : KExp = 
       
   318   e match { ... }
       
   319 \end{lstlisting}
       
   320 \bigskip\bigskip
       
   321 
       
   322 \small
       
   323 \begin{lstlisting}[language=LLVMIR,numbers=none,xleftmargin=30mm,escapeinside={(*@}{@*)}]
       
   324 let tmp0 = add 1 a in   
       
   325 let tmp1 = mul (*@$\Box$@*) 5 in 
       
   326 let tmp2 = add 3 tmp1 in 
       
   327 let tmp3 = add tmp0 tmp2 in
       
   328   KReturn tmp3 
       
   329 \end{lstlisting}
       
   330 
       
   331 \end{frame}
       
   332 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   333 
       
   334 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   335 \begin{frame}[fragile,c]
       
   336 \frametitle{CPS-Translation}
       
   337 \small
       
   338 
       
   339 \begin{lstlisting}[language=Scala,numbers=none]
       
   340 def CPS(e: Exp)(k: KVal => KExp) : KExp = 
       
   341   e match { 
       
   342      case Var(s) => k(KVar(s)) 
       
   343      case Num(i) => k(KNum(i))
       
   344      ...
       
   345   }
       
   346 \end{lstlisting}
       
   347 \bigskip\bigskip
       
   348 
       
   349 \small
       
   350 \begin{lstlisting}[language=LLVMIR,numbers=none,xleftmargin=30mm,escapeinside={(*@}{@*)}]
       
   351 let tmp0 = add 1 a in   
       
   352 let tmp1 = mul (*@$\Box$@*) 5 in 
       
   353 let tmp2 = add 3 tmp1 in 
       
   354 let tmp3 = add tmp0 tmp2 in
       
   355   KReturn tmp3 
       
   356 \end{lstlisting}
       
   357 
       
   358 \end{frame}
       
   359 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   360 
       
   361 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   362 \begin{frame}[fragile,c]
       
   363 \frametitle{CPS-Translation}
       
   364 \small
       
   365 
       
   366 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-5mm]
       
   367 def CPS(e: Exp)(k: KVal => KExp) : KExp = e match { 
       
   368   case Aop(o, e1, e2) => {
       
   369     val z = Fresh("tmp")
       
   370     CPS(e1)(y1 => 
       
   371       CPS(e2)(y2 => 
       
   372                KLet(z, Kop(o, y1, y2), k(KVar(z)))))
       
   373   } ...
       
   374 }
       
   375 \end{lstlisting}
       
   376 
       
   377 \small
       
   378 \begin{lstlisting}[language=LLVMIR,numbers=none,xleftmargin=30mm,escapeinside={(*@}{@*)}]
       
   379 ...
       
   380 let z = op (*@$\Box_{y_1}$@*) (*@$\Box_{y_2}$@*)
       
   381 let tmp0 = add 1 a in   
       
   382 let tmp1 = mul (*@$\Box\!\!\!\!\raisebox{0.6mm}{\texttt{z}}$@*) 5 in 
       
   383 let tmp2 = add 3 tmp1 in 
       
   384 let tmp3 = add tmp0 tmp2 in
       
   385   KReturn tmp3 
       
   386 \end{lstlisting}
       
   387 
       
   388 \end{frame}
       
   389 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   390 
       
   391 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   392 \begin{frame}[fragile,c]
       
   393 \frametitle{CPS-Translation}
       
   394 \small
       
   395 
       
   396 \begin{lstlisting}[language=Scala,numbers=none]
       
   397 def CPS(e: Exp)(k: KVal => KExp) : KExp = 
       
   398   e match { 
       
   399     case Sequence(e1, e2) => 
       
   400       CPS(e1)(_ => CPS(e2)(y2 => k(y2)))
       
   401      ...
       
   402   }
       
   403 \end{lstlisting}
       
   404 \bigskip\bigskip
       
   405 
       
   406 \small
       
   407 \begin{lstlisting}[language=LLVMIR,numbers=none,xleftmargin=30mm,escapeinside={(*@}{@*)}]
       
   408 let tmp0 = add 1 a in   
       
   409 let tmp1 = mul (*@$\Box$@*) 5 in 
       
   410 let tmp2 = add 3 tmp1 in 
       
   411 let tmp3 = add tmp0 tmp2 in
       
   412   KReturn tmp3 
       
   413 \end{lstlisting}
       
   414 
       
   415 \end{frame}
       
   416 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   417 
       
   418 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   419 \begin{frame}[fragile,c]
       
   420 \frametitle{CPS-Translation}
       
   421 \small
       
   422 
       
   423 \begin{lstlisting}[language=Scala,numbers=none]
       
   424 def CPS(e: Exp)(k: KVal => KExp) : KExp = 
       
   425   e match { 
       
   426     ...
       
   427     case Sequence(e1, e2) => 
       
   428       CPS(e1)(_ => CPS(e2)(y2 => k(y2)))
       
   429      ...
       
   430   }
       
   431 \end{lstlisting}
       
   432 \bigskip\bigskip
       
   433 
       
   434 \small
       
   435 \begin{lstlisting}[language=LLVMIR,numbers=none,xleftmargin=30mm,escapeinside={(*@}{@*)}]
       
   436 let tmp0 = add 1 a in   
       
   437 let tmp1 = mul (*@$\Box$@*) 5 in 
       
   438 let tmp2 = add 3 tmp1 in 
       
   439 let tmp3 = add tmp0 tmp2 in
       
   440   KReturn tmp3 
       
   441 \end{lstlisting}
       
   442 
       
   443 \end{frame}
       
   444 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   445 
       
   446 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   447 \begin{frame}[fragile,c]
       
   448 \frametitle{CPS-Translation}
       
   449 \small
       
   450 
       
   451 \begin{lstlisting}[language=Scala,numbers=none,xleftmargin=-3mm]
       
   452 def CPS(e: Exp)(k: KVal => KExp) : KExp = 
       
   453   e match { 
       
   454     ...
       
   455     case If(Bop(o, b1, b2), e1, e2) => {
       
   456       val z = Fresh("tmp")
       
   457       CPS(b1)(y1 => 
       
   458         CPS(b2)(y2 => 
       
   459           KLet(z, Kop(o, y1, y2), 
       
   460                 KIf(z, CPS(e1)(k), CPS(e2)(k)))))
       
   461      }
       
   462     ...
       
   463   }
       
   464 \end{lstlisting}
       
   465 
       
   466 \end{frame}
       
   467 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   468 
       
   469 
       
   470 
    61 
   471 
    62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   472 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    63 \begin{frame}[c]
   473 \begin{frame}[c]
    64 \frametitle{\begin{tabular}{c}Fibonacci Numbers\end{tabular}}
       
    65 
       
    66 \mbox{}\\[-18mm]\mbox{}
       
    67 
       
    68 {\lstset{language=While}\fontsize{10}{12}\selectfont
       
    69 \texttt{\lstinputlisting{../progs/fib.while}}}
       
    70 
       
    71 \end{frame}
       
    72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
    73 
       
    74 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    75 \begin{frame}[c,fragile]
       
    76 \frametitle{BF***}
       
    77 
       
    78 some big array, say \texttt{a}; 7 (8) instructions:
       
    79 
       
    80 \begin{itemize}
       
    81 \item \texttt{>} move \texttt{ptr++}
       
    82 \item \texttt{<} move \texttt{ptr-{}-}
       
    83 \item \texttt{+} add \texttt{a[ptr]++}
       
    84 \item \texttt{-} subtract \texttt{a[ptr]-{}-}
       
    85 \item \texttt{.} print out \texttt{a[ptr]} as ASCII
       
    86 \item \texttt{[} if \texttt{a[ptr] == 0} jump just after the corresponding \texttt{]}; otherwise \texttt{ptr++}
       
    87 \item \texttt{]} if \texttt{a[ptr] != 0} jump just after the corresponding \texttt{[}; otherwise \texttt{ptr++}
       
    88 
       
    89 \end{itemize}  
       
    90 
       
    91 \end{frame}
       
    92 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
    93 
       
    94 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    95 \begin{frame}[c,fragile]
       
    96 \frametitle{Arrays in While}
       
    97 
       
    98 \begin{itemize}
       
    99 \item \texttt{new arr[15000]}\medskip 
       
   100 \item \texttt{x := 3 + arr[3 + y]}\medskip 
       
   101 \item \texttt{arr[42 * n] := ...}
       
   102 \end{itemize}  
       
   103 
       
   104 \end{frame}
       
   105 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
   106 
       
   107 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   108 \begin{frame}[c,fragile]
       
   109 \frametitle{New Arrays}
       
   110 
       
   111 \begin{lstlisting}[mathescape,numbers=none,language=While]
       
   112   new arr[number]
       
   113 \end{lstlisting}\bigskip\bigskip
       
   114 
       
   115 \begin{lstlisting}[mathescape,numbers=none,language=While]
       
   116   ldc number
       
   117   newarray int
       
   118   astore loc_var
       
   119 \end{lstlisting}
       
   120 
       
   121 
       
   122 \end{frame}
       
   123 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
   124 
       
   125 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   126 \begin{frame}[c,fragile]
       
   127 \frametitle{Array Update}
       
   128 
       
   129 \begin{lstlisting}[mathescape,numbers=none,language=While]
       
   130   arr[...] := 
       
   131 \end{lstlisting}\bigskip\bigskip
       
   132 
       
   133 \begin{lstlisting}[mathescape,numbers=none,language=While]
       
   134   aload loc_var
       
   135   index_aexp
       
   136   value_aexp
       
   137   iastore
       
   138 \end{lstlisting}
       
   139 
       
   140 
       
   141 \end{frame}
       
   142 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
   143 
       
   144 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   145 \begin{frame}[c,fragile]
       
   146 \frametitle{Array Lookup in AExp}
       
   147 
       
   148 \begin{lstlisting}[mathescape,numbers=none,language=While]
       
   149   ...arr[...]... 
       
   150 \end{lstlisting}\bigskip\bigskip
       
   151 
       
   152 \begin{lstlisting}[mathescape,numbers=none,language=While]
       
   153   aload loc_var
       
   154   index_aexp
       
   155   iaload
       
   156 \end{lstlisting}
       
   157 
       
   158 
       
   159 \end{frame}
       
   160 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
   161 
       
   162 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   163 \mode<presentation>{
       
   164 \begin{frame}[c]
       
   165 
   474 
   166 \large\bf
   475 \large\bf
   167 Using a compiler, \\how can you mount the\\ perfect attack against a system?
   476 Using a compiler, \\
   168 
   477 how can you mount the\\ 
   169 \end{frame}}
   478 perfect attack against a system?
       
   479 
       
   480 \end{frame}
   170 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   481 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   171 
   482 
   172 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   483 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   173 \mode<presentation>{
   484 \mode<presentation>{
   174 \begin{frame}[c]
   485 \begin{frame}[c]
   321   \end{textblock}}
   632   \end{textblock}}
   322 
   633 
   323   \end{frame}}
   634   \end{frame}}
   324   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   635   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   325 
   636 
   326 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   327   \begin{frame}[c]
       
   328 
       
   329   \begin{center}
       
   330   \includegraphics[scale=0.6]{../pics/bridge-limits.png}
       
   331   \end{center}
       
   332 
       
   333   \end{frame}
       
   334 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   335 
       
   336 
       
   337 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   338 \begin{frame}[c]
       
   339 \frametitle{Compilers \& Boeings 777}
       
   340 
       
   341 First flight in 1994. They want to achieve triple redundancy in hardware
       
   342 faults.\bigskip
       
   343 
       
   344 They compile 1 Ada program to\medskip
       
   345 
       
   346 \begin{itemize}
       
   347 \item Intel 80486
       
   348 \item Motorola 68040 (old Macintosh's)
       
   349 \item AMD 29050 (RISC chips used often in laser printers)
       
   350 \end{itemize}\medskip
       
   351 
       
   352 using 3 independent compilers.\bigskip\pause
       
   353 
       
   354 \small Airbus uses C and static analysers. Recently started using CompCert.
       
   355 
       
   356 \end{frame}
       
   357 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   358 
       
   359 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   360 \begin{frame}[c]
       
   361 \frametitle{Goal}
       
   362 
       
   363 Remember the Bridges example?
       
   364 
       
   365 \begin{itemize}
       
   366 \item Can we look at our programs and somehow ensure
       
   367 they are bug free/correct?\pause\bigskip
       
   368 
       
   369 \item Very hard: Anything interesting about programs is equivalent
       
   370 to the Halting Problem, which is undecidable.\pause\bigskip
       
   371 
       
   372 \item \alert{Solution:} We avoid this ``minor'' obstacle by
       
   373       being as close as possible of deciding the halting
       
   374       problem, without actually deciding the halting problem.
       
   375       \small$\quad\Rightarrow$ yes, no, don't know (static analysis)
       
   376 \end{itemize}
       
   377 
       
   378 \end{frame}
       
   379 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
   380 
       
   381 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   382   \begin{frame}[c]
       
   383   \frametitle{What is Static Analysis?}
       
   384 
       
   385   \begin{center}
       
   386   \includegraphics[scale=0.4]{../pics/state.png}
       
   387   \end{center}
       
   388   
       
   389   \begin{itemize}
       
   390   \item depending on some initial input, a program 
       
   391   (behaviour) will ``develop'' over time.
       
   392   \end{itemize}
       
   393 
       
   394   \end{frame}
       
   395 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   396 
       
   397 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   398   \begin{frame}[c]
       
   399   \frametitle{What is Static Analysis?}
       
   400 
       
   401   \begin{center}
       
   402   \includegraphics[scale=0.4]{../pics/state2.png}
       
   403   \end{center}
       
   404 
       
   405   \end{frame}
       
   406 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   407 
       
   408 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   409   \begin{frame}[c]
       
   410   \frametitle{What is Static Analysis?}
       
   411 
       
   412   \begin{center}
       
   413   \includegraphics[scale=0.4]{../pics/state3.jpg}
       
   414   \end{center}
       
   415 
       
   416   \end{frame}
       
   417 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   418 
       
   419 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   420   \begin{frame}[c]
       
   421   \frametitle{What is Static Analysis?}
       
   422 
       
   423   \begin{center}
       
   424   \includegraphics[scale=0.4]{../pics/state4.jpg}
       
   425   \end{center}
       
   426 
       
   427   \begin{itemize}
       
   428   \item to be avoided
       
   429   \end{itemize}
       
   430 
       
   431   \end{frame}
       
   432 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   433 
       
   434 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   435   \begin{frame}[c]
       
   436   \frametitle{What is Static Analysis?}
       
   437 
       
   438   \begin{center}
       
   439   \includegraphics[scale=0.4]{../pics/state5.png}
       
   440   \end{center}
       
   441   
       
   442   \begin{itemize}
       
   443   \item this needs more work
       
   444   \end{itemize}
       
   445 
       
   446   \end{frame}
       
   447 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   448 
       
   449 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   450   \begin{frame}[c]
       
   451   \frametitle{What is Static Analysis?}
       
   452 
       
   453   \begin{center}
       
   454   \includegraphics[scale=0.4]{../pics/state6.png}
       
   455   \end{center}
       
   456   
       
   457   \end{frame}
       
   458 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   459 
       
   460 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   461   \begin{frame}[c,fragile]
       
   462     \frametitle{\Large\begin{tabular}{c}Concrete Example:\\[-1mm]
       
   463                   Are Vars Definitely Initialised?\end{tabular}}
       
   464 
       
   465 Assuming \texttt{x} is initialised, what about \texttt{y}?\bigskip
       
   466 
       
   467 Prog.~1:\\
       
   468 \begin{lstlisting}[numbers=none,
       
   469                    basicstyle=\ttfamily,
       
   470                    language=While,xleftmargin=3mm]
       
   471 if x < 1 then y := x else y := x + 1;
       
   472 y := y + 1
       
   473 \end{lstlisting}\medskip     
       
   474 
       
   475 Prog.~2:\\
       
   476 \begin{lstlisting}[numbers=none,
       
   477                    basicstyle=\ttfamily,
       
   478                    language=While,xleftmargin=3mm]
       
   479 if x < x then y := y + 1 else y := x;
       
   480 y := y + 1
       
   481 \end{lstlisting}            
       
   482 
       
   483   \end{frame}
       
   484 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   485 
       
   486 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   487   \begin{frame}[c,fragile]
       
   488     \frametitle{\Large\begin{tabular}{c}Concrete Example:\\[-1mm]
       
   489                   Are Vars Definitely Initialised?\end{tabular}}
       
   490 
       
   491               What should the rules be for deciding when a
       
   492               variable is initialised?\bigskip\pause
       
   493 
       
   494 \begin{itemize}
       
   495 \item variable \texttt{x} is definitely initialized after
       
   496   \texttt{skip}\\
       
   497   iff \texttt{x} is definitely initialized before \texttt{skip}.
       
   498 \end{itemize}
       
   499   
       
   500 \end{frame}
       
   501 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   502 
       
   503 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   504   \begin{frame}[c,fragile]
       
   505 %    \frametitle{\Large\begin{tabular}{c}Concrete Example:\\[-1mm]
       
   506 %                  Are Vars Definitely Initialised?\end{tabular}}
       
   507 
       
   508 $\bl{A}$ is the set of definitely defined variables:
       
   509               
       
   510 \begin{center}
       
   511 \begin{tabular}{c}
       
   512   \bl{\infer{\mbox{}}{A\triangleright\texttt{skip}\triangleright{}A}}\qquad
       
   513   \bl{\infer{vars(a) \subseteq A}{A\triangleright
       
   514   (\texttt{x\,:=\,a})\triangleright\{x\}\cup A}}
       
   515   \medskip\\\pause
       
   516 
       
   517   \bl{\infer{A_1\triangleright{}s_1\triangleright{}A_2
       
   518   \quad A_2\triangleright{}s_2\triangleright{}A_3}
       
   519   {A_1\triangleright{}(s_1 ; s_2)\triangleright{}A_3}}
       
   520   \medskip\\\pause
       
   521   
       
   522   \bl{\infer{vars(b)\subseteq A\quad A\triangleright{}s_1\triangleright{}A_1
       
   523   \quad A\triangleright{}s_2\triangleright{}A_2}
       
   524   {A\triangleright(\texttt{if}\;b\;\texttt{then}\;s_1\;\texttt{else}\;s_2)\triangleright{}A_1\cap A_2}}
       
   525   \medskip\\\pause
       
   526 
       
   527   \bl{\infer{vars(b)\subseteq A\quad A\triangleright{}s\triangleright{}A'}
       
   528   {A\triangleright(\texttt{while}\;b\;\texttt{do}\;s)\triangleright{}A}}\pause
       
   529 \end{tabular}  
       
   530 \end{center}
       
   531 
       
   532 \hfill we start with $\bl{A = \{\}}$
       
   533 \end{frame}
       
   534 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   535 
       
   536 
   637 
   537 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   638 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   538   \begin{frame}[c]
   639   \begin{frame}[c]
   539   \frametitle{Dijkstra on Testing}
   640   \frametitle{Dijkstra on Testing}
   540   
   641   
   650 %%% Local Variables:  
   751 %%% Local Variables:  
   651 %%% mode: latex
   752 %%% mode: latex
   652 %%% TeX-master: t
   753 %%% TeX-master: t
   653 %%% End: 
   754 %%% End: 
   654 
   755 
       
   756 
       
   757 
       
   758 
       
   759 
       
   760 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   761   \begin{frame}[c]
       
   762 
       
   763   \begin{center}
       
   764   \includegraphics[scale=0.6]{../pics/bridge-limits.png}
       
   765   \end{center}
       
   766 
       
   767   \end{frame}
       
   768 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   769 
       
   770 
       
   771 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   772 \begin{frame}[c]
       
   773 \frametitle{Compilers \& Boeings 777}
       
   774 
       
   775 First flight in 1994. They want to achieve triple redundancy in hardware
       
   776 faults.\bigskip
       
   777 
       
   778 They compile 1 Ada program to\medskip
       
   779 
       
   780 \begin{itemize}
       
   781 \item Intel 80486
       
   782 \item Motorola 68040 (old Macintosh's)
       
   783 \item AMD 29050 (RISC chips used often in laser printers)
       
   784 \end{itemize}\medskip
       
   785 
       
   786 using 3 independent compilers.\bigskip\pause
       
   787 
       
   788 \small Airbus uses C and static analysers. Recently started using CompCert.
       
   789 
       
   790 \end{frame}
       
   791 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   792 
       
   793 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   794 \begin{frame}[c]
       
   795 \frametitle{Goal}
       
   796 
       
   797 Remember the Bridges example?
       
   798 
       
   799 \begin{itemize}
       
   800 \item Can we look at our programs and somehow ensure
       
   801 they are bug free/correct?\pause\bigskip
       
   802 
       
   803 \item Very hard: Anything interesting about programs is equivalent
       
   804 to the Halting Problem, which is undecidable.\pause\bigskip
       
   805 
       
   806 \item \alert{Solution:} We avoid this ``minor'' obstacle by
       
   807       being as close as possible of deciding the halting
       
   808       problem, without actually deciding the halting problem.
       
   809       \small$\quad\Rightarrow$ yes, no, don't know (static analysis)
       
   810 \end{itemize}
       
   811 
       
   812 \end{frame}
       
   813 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
       
   814 
       
   815 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   816   \begin{frame}[c]
       
   817   \frametitle{What is Static Analysis?}
       
   818 
       
   819   \begin{center}
       
   820   \includegraphics[scale=0.4]{../pics/state.png}
       
   821   \end{center}
       
   822   
       
   823   \begin{itemize}
       
   824   \item depending on some initial input, a program 
       
   825   (behaviour) will ``develop'' over time.
       
   826   \end{itemize}
       
   827 
       
   828   \end{frame}
       
   829 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   830 
       
   831 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   832   \begin{frame}[c]
       
   833   \frametitle{What is Static Analysis?}
       
   834 
       
   835   \begin{center}
       
   836   \includegraphics[scale=0.4]{../pics/state2.png}
       
   837   \end{center}
       
   838 
       
   839   \end{frame}
       
   840 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   841 
       
   842 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   843   \begin{frame}[c]
       
   844   \frametitle{What is Static Analysis?}
       
   845 
       
   846   \begin{center}
       
   847   \includegraphics[scale=0.4]{../pics/state3.jpg}
       
   848   \end{center}
       
   849 
       
   850   \end{frame}
       
   851 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   852 
       
   853 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   854   \begin{frame}[c]
       
   855   \frametitle{What is Static Analysis?}
       
   856 
       
   857   \begin{center}
       
   858   \includegraphics[scale=0.4]{../pics/state4.jpg}
       
   859   \end{center}
       
   860 
       
   861   \begin{itemize}
       
   862   \item to be avoided
       
   863   \end{itemize}
       
   864 
       
   865   \end{frame}
       
   866 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   867 
       
   868 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   869   \begin{frame}[c]
       
   870   \frametitle{What is Static Analysis?}
       
   871 
       
   872   \begin{center}
       
   873   \includegraphics[scale=0.4]{../pics/state5.png}
       
   874   \end{center}
       
   875   
       
   876   \begin{itemize}
       
   877   \item this needs more work
       
   878   \end{itemize}
       
   879 
       
   880   \end{frame}
       
   881 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   882 
       
   883 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   884   \begin{frame}[c]
       
   885   \frametitle{What is Static Analysis?}
       
   886 
       
   887   \begin{center}
       
   888   \includegraphics[scale=0.4]{../pics/state6.png}
       
   889   \end{center}
       
   890   
       
   891   \end{frame}
       
   892 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   893 
       
   894 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   895   \begin{frame}[c,fragile]
       
   896     \frametitle{\Large\begin{tabular}{c}Concrete Example:\\[-1mm]
       
   897                   Are Vars Definitely Initialised?\end{tabular}}
       
   898 
       
   899 Assuming \texttt{x} is initialised, what about \texttt{y}?\bigskip
       
   900 
       
   901 Prog.~1:\\
       
   902 \begin{lstlisting}[numbers=none,
       
   903                    basicstyle=\ttfamily,
       
   904                    language=While,xleftmargin=3mm]
       
   905 if x < 1 then y := x else y := x + 1;
       
   906 y := y + 1
       
   907 \end{lstlisting}\medskip     
       
   908 
       
   909 Prog.~2:\\
       
   910 \begin{lstlisting}[numbers=none,
       
   911                    basicstyle=\ttfamily,
       
   912                    language=While,xleftmargin=3mm]
       
   913 if x < x then y := y + 1 else y := x;
       
   914 y := y + 1
       
   915 \end{lstlisting}            
       
   916 
       
   917   \end{frame}
       
   918 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   919 
       
   920 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   921   \begin{frame}[c,fragile]
       
   922     \frametitle{\Large\begin{tabular}{c}Concrete Example:\\[-1mm]
       
   923                   Are Vars Definitely Initialised?\end{tabular}}
       
   924 
       
   925               What should the rules be for deciding when a
       
   926               variable is initialised?\bigskip\pause
       
   927 
       
   928 \begin{itemize}
       
   929 \item variable \texttt{x} is definitely initialized after
       
   930   \texttt{skip}\\
       
   931   iff \texttt{x} is definitely initialized before \texttt{skip}.
       
   932 \end{itemize}
       
   933   
       
   934 \end{frame}
       
   935 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   936 
       
   937 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   938   \begin{frame}[c,fragile]
       
   939 %    \frametitle{\Large\begin{tabular}{c}Concrete Example:\\[-1mm]
       
   940 %                  Are Vars Definitely Initialised?\end{tabular}}
       
   941 
       
   942 $\bl{A}$ is the set of definitely defined variables:
       
   943               
       
   944 \begin{center}
       
   945 \begin{tabular}{c}
       
   946   \bl{\infer{\mbox{}}{A\triangleright\texttt{skip}\triangleright{}A}}\qquad
       
   947   \bl{\infer{vars(a) \subseteq A}{A\triangleright
       
   948   (\texttt{x\,:=\,a})\triangleright\{x\}\cup A}}
       
   949   \medskip\\\pause
       
   950 
       
   951   \bl{\infer{A_1\triangleright{}s_1\triangleright{}A_2
       
   952   \quad A_2\triangleright{}s_2\triangleright{}A_3}
       
   953   {A_1\triangleright{}(s_1 ; s_2)\triangleright{}A_3}}
       
   954   \medskip\\\pause
       
   955   
       
   956   \bl{\infer{vars(b)\subseteq A\quad A\triangleright{}s_1\triangleright{}A_1
       
   957   \quad A\triangleright{}s_2\triangleright{}A_2}
       
   958   {A\triangleright(\texttt{if}\;b\;\texttt{then}\;s_1\;\texttt{else}\;s_2)\triangleright{}A_1\cap A_2}}
       
   959   \medskip\\\pause
       
   960 
       
   961   \bl{\infer{vars(b)\subseteq A\quad A\triangleright{}s\triangleright{}A'}
       
   962   {A\triangleright(\texttt{while}\;b\;\texttt{do}\;s)\triangleright{}A}}\pause
       
   963 \end{tabular}  
       
   964 \end{center}
       
   965 
       
   966 \hfill we start with $\bl{A = \{\}}$
       
   967 \end{frame}
       
   968 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   969