Files
IPS_W-assignments/W4/main.tex
NikolajDanger ff2b2aeed5
2022-05-27 16:43:23 +02:00

566 lines
17 KiB
TeX

\documentclass[a4paper]{article}
\usepackage{listings}
\usepackage{fontspec}
\usepackage[margin=1in]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage{changepage}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,automata}
\renewcommand{\thesection}{Task \arabic{section}}
\renewcommand{\thesubsection}{\arabic{subsection})}
\renewcommand{\thesubsubsection}{\alph{subsubsection})}
\setmonofont[Scale=0.9]{Antikor Mono Medium}
\input{fasto.sty}
\setlength{\parskip}{5pt}
\setlength{\parindent}{0pt}
\title{W4 - IPS}
\author{Nikolaj Gade (qhp695)}
\date{May 2022}
\makeatletter
\renewenvironment{table}%
{\renewcommand{\familydefault}{\ttdefault}\selectfont
\@float{table}}
{\end@float}
\makeatother
\begin{document}
\maketitle
\section{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|r||r|r|r|l|} \hline
SubExp & I/O? & Elim? & UsedVars & OptSubExp \\ \hline \hline
1 & no & - & u & u \\ \hline
2 & no & - & x & x+x \\ \hline
3 & yes & - & x & foo(x) \\ \hline
4 & no & - & & 7 \\ \hline
5 & yes & no & x & let x=foo(x) in 7 \\ \hline
6 & no & - & x,u & x+u \\ \hline
7 & no & - & y,x & y*x \\ \hline
8 & no & yes & y,x & y*x \\ \hline
9 & yes & no & x & let y=(let x=foo(x) in 7) in y*x \\ \hline
10 & yes & yes & x & let y=(let x=foo(x) in 7) in y*x \\ \hline
11 & yes & no & u & let x=u in let y=(let x=foo(x) in 7) in y*x \\ \hline
\end{tabular}
\end{center}
\end{table}
\section{}
\subsubsection{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|r||r|r|r|} \hline
i & succ[i] & gen[i] & kill[i] \\ \hline \hline
1 & 2 & & \\ \hline
2 & 3,7 & a,b & \\ \hline
3 & 4 & & \\ \hline
4 & 5 & a & t \\ \hline
5 & 6 & b & a \\ \hline
6 & 7 & t & b \\ \hline
7 & 8 & & \\ \hline
8 & 9 & & z \\ \hline
9 & 10 & a,b & b \\ \hline
10 & 1,11 & b,z & \\ \hline
11 & 12 & & \\ \hline
12 & & a & \\ \hline
\end{tabular}
\end{center}
\end{table}
\newpage
\subsubsection{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|r||c|c||c|c||c|c||c|c|} \hline
& \multicolumn{2}{c||}{Initial} & \multicolumn{2}{c||}{Iteration 1} & \multicolumn{2}{c||}{Iteration 2} & \multicolumn{2}{c|}{Iteration 3} \\
i & out[i] & in[i] & out[i] & in[i] & out[i] & in[i] & out[i] & in[i] \\ \hline \hline
1 & & & a,b & a,b & a,b & a,b & a,b & a,b \\ \hline
2 & & & a,b & a,b & a,b & a,b & a,b & a,b \\ \hline
3 & & & a,b & a,b & a,b & a,b & a,b & a,b \\ \hline
4 & & & b,t & a,b & b,t & a,b & b,t & a,b \\ \hline
5 & & & a,t & b,t & a,t & b,t & a,t & b,t \\ \hline
6 & & & a,b & a,t & a,b & a,t & a,b & a,t \\ \hline
7 & & & a,b & a,b & a,b & a,b & a,b & a,b \\ \hline
8 & & & a,b,z & a,b & a,b,z & a,b & a,b,z & a,b \\ \hline
9 & & & a,b,z & a,b,z & a,b,z & a,b,z & a,b,z & a,b,z \\ \hline
10 & & & a & a,b,z & a,b & a,b,z & a,b & a,b,z \\ \hline
11 & & & a & a & a & a & a & a \\ \hline
\end{tabular}
\end{center}
\end{table}
\subsubsection{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|r||c|c||c|} \hline
i & kill[i] & out[i] & Interferes with \\ \hline \hline
4 & t & b,t & b \\ \hline
5 & a & a,t & t \\ \hline
6 & b & a,b & a \\ \hline
8 & z & a,b,z & a,b \\ \hline
9 & b & a,b,z & a,z \\ \hline
\end{tabular}
\end{center}
\end{table}
\subsubsection{}
\resizebox{100pt}{!}{%
\begin{tikzpicture}
\node[font=\bfseries] (a) {a};
\node[font=\bfseries] (b) [right of=a] {b};
\node[font=\bfseries] (t) [below of=a] {t};
\node[font=\bfseries] (z) [below of=b] {z};
\draw (t) to (b);
\draw (a) to (t);
\draw (z) to (a);
\draw (z) to (b);
\draw (b) to (a);
\end{tikzpicture}
}
\newpage
\subsubsection{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|c|c||c|} \hline
Node & Neighbors & Color \\ \hline \hline
z & & \color{blue} 1 \\ \hline
b & z & \color{red} 2 \\ \hline
a & b,z & \color{green} 3 \\ \hline
t & a,b & \color{blue} 1 \\ \hline
\end{tabular}
\end{center}
\end{table}
\resizebox{100pt}{!}{%
\begin{tikzpicture}
\node[font=\bfseries] (a) [color=red] {a};
\node[font=\bfseries] (b) [right of=a, color=green] {b};
\node[font=\bfseries] (t) [below of=a, color=blue] {t};
\node[font=\bfseries] (z) [below of=b, color=blue] {z};
\draw (t) to (b);
\draw (a) to (t);
\draw (z) to (a);
\draw (z) to (b);
\draw (b) to (a);
\end{tikzpicture}
}
\subsubsection{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|c|c||c|} \hline
Node & Neighbors & Color \\ \hline \hline
z & & \color{blue} 1 \\ \hline
b & z & \color{red} 2 \\ \hline
t & b & \color{blue} 1 \\ \hline
a & b,t,z & spill \\ \hline
\end{tabular}
\end{center}
\end{table}
\resizebox{100pt}{!}{%
\begin{tikzpicture}
\node[font=\bfseries] (a) [color=gray] {a};
\node[font=\bfseries] (b) [right of=a, color=red] {b};
\node[font=\bfseries] (t) [below of=a, color=blue] {t};
\node[font=\bfseries] (z) [below of=b, color=blue] {z};
\draw (t) to (b);
\draw [color=gray] (a) to (t);
\draw [color=gray] (z) to (a);
\draw (z) to (b);
\draw [color=gray] (b) to (a);
\end{tikzpicture}
}
\begin{lstlisting}
gcd(a,b) {
M[addra] := a
1: LABEL start
a2 := M[addra]
2: IF a2 < b THEN next ELSE swap
3: LABEL swap
a4 := M[addra]
4: t := a4
5: a5 := b
M[addra] := a5
6: b := t
7: LABEL next
8: z := 0
a9 := M[addra]
9: b := b mod a9
10: IF b = z THEN end ELSE start
11: LABEL end
a := M[addra]
12: RETURN a
}
\end{lstlisting}
\section{}
Edges without a label should be assumed to be labeled with \epsilon.
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[draw, rectangle, rounded corners=2mm] (a) at (3,0) {\color{ForestGreen}\textbf{(a*b|a)*(b|}$\boldsymbol\epsilon$\textbf{)}};
\node[draw, state, double] (b) at (6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (b);
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[draw, rectangle, rounded corners=2mm] (a) at (2,0) {\color{ForestGreen}\textbf{(a*b|a)*}};
\node[draw, rectangle, rounded corners=2mm] (c) at (4,0) {\color{red}\textbf{b|}$\boldsymbol\epsilon$};
\node[draw, state, double] (b) at (6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (c);
\draw (c) -- (b);
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[state] (a) at (2,0) {};
\node[draw, rectangle, rounded corners=2mm] (d) at (2,2) {\color{ForestGreen}\textbf{a*b|a}};
\node[draw, rectangle, rounded corners=2mm] (c) at (4,0) {\color{red}\textbf{b|}$\boldsymbol\epsilon$};
\node[draw, state, double] (b) at (6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (c);
\draw (c) -- (b);
\draw (a) to [out = 135, in=225] (d);
\draw (d) to [out = 315, in=45] (a);
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[state] (a) at (2,0) {};
\node[state] (d) at (0.5,2.5) {};
\node[draw, rectangle, rounded corners=2mm] (e) at (2,3.5) {\color{ForestGreen}\textbf{a*b}};
\node[draw, state] (f) at (2,1.5) {};
\node[draw, state] (g) at (3.5,2.5) {};
\node[draw, rectangle, rounded corners=2mm] (c) at (4,0) {\color{red}\textbf{b|}$\boldsymbol\epsilon$};
\node[draw, state, double] (b) at (6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (c);
\draw (c) -- (b);
\draw (a) to [out = 135, in=180] (d);
\draw (g) to [out = 0, in=45] (a);
\draw (d) -- (e);
\draw (d) -- (f);
\draw (e) -- (g);
\draw (f) -- (g) node[midway, above] {a};
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[state] (a) at (2,0) {};
\node[state] (d) at (0,2.5) {};
\node[draw, rectangle, rounded corners=2mm] (e) at (1.3,3.5) {\color{ForestGreen}\textbf{a*}};
\node[state] (h) at (2.7,3.5) {};
\node[draw, state] (f) at (2,1.5) {};
\node[draw, state] (g) at (4,2.5) {};
\node[draw, rectangle, rounded corners=2mm] (c) at (4,0) {\color{red}\textbf{b|}$\boldsymbol\epsilon$};
\node[draw, state, double] (b) at (6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (c);
\draw (c) -- (b);
\draw (a) to [out = 135, in=180] (d);
\draw (g) to [out = 0, in=45] (a);
\draw (d) -- (e);
\draw (d) -- (f);
\draw (e) -- (h);
\draw (h) -- (g) node[midway, above] {b};
\draw (f) -- (g) node[midway, above] {a};
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[state] (a) at (2,0) {};
\node[state] (d) at (0,2.5) {};
\node[state] (e) at (1.3,3.5) {};
\node[state] (i) at (0.3,4.5) {};
\node[state] (h) at (2.7,3.5) {};
\node[draw, state] (f) at (2,1.5) {};
\node[draw, state] (g) at (4,2.5) {};
\node[draw, rectangle, rounded corners=2mm] (c) at (4,0) {\color{red}\textbf{b|}$\boldsymbol\epsilon$};
\node[draw, state, double] (b) at (6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (c);
\draw (c) -- (b);
\draw (a) to [out = 135, in=180] (d);
\draw (g) to [out = 0, in=45] (a);
\draw (d) -- (e);
\draw (d) -- (f);
\draw (e) to [out = 180, in=270] (i) node at (1.3,4.5) {a};
\draw (i) to [out = 0, in=90] (e);
\draw (e) -- (h);
\draw (h) -- (g) node[midway, above right] {b};
\draw (f) -- (g) node[midway, above left] {a};
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\begin{scope}
\node[] (0) at (0,0) {start};
\node[state] (a) at (2,0) {};
\node[state] (d) at (0,2.5) {};
\node[state] (e) at (1.3,3.5) {};
\node[state] (i) at (0.3,4.5) {};
\node[state] (h) at (2.7,3.5) {};
\node[state] (f) at (2,1.5) {};
\node[state] (g) at (4,2.5) {};
\node[state] (c) at (5,0) {};
\node[state] (j) at (6.8,1) {};
\node[state] (k) at (6.8,-1) {};
\node[state, double] (b) at (8.6,0) {};
\end{scope}
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (a);
\draw (a) -- (c);
\draw (a) to [out = 135, in=180] (d);
\draw (g) to [out = 0, in=45] (a);
\draw (d) -- (e);
\draw (d) -- (f);
\draw (e) to [out = 180, in=270] (i) node at (1.3,4.5) {a};
\draw (i) to [out = 0, in=90] (e);
\draw (e) -- (h);
\draw (h) -- (g) node[midway, above right] {b};
\draw (f) -- (g) node[midway, above left] {a};
\draw (c) -- (j);
\draw (c) -- (k);
\draw (j) -- (b) node[midway, above right] {b};
\draw (k) -- (b);
\end{scope}
\end{tikzpicture}
\section{}
\begin{table}[h]
\begin{center}
\begin{tabular}{|l||r|c|} \hline
state & epsilon-closure & complete \\ \hline \hline
0 & \{1,2,4\} & \\ \hline
\end{tabular}
\end{center}
\end{table}
\begin{equation}
\begin{split}
move(s'_0, \mathtt{a}) & = \epsilon\text{-closure}(\{t | s \in \{1,2,4\}\text{ and } s^{\mathtt{a}}t \in T\}) \\
& = \epsilon\text{-closure}(\{3,4\}) \\
& = \{3,4,6\} \\
& = s'_1
\end{split}
\end{equation}
\begin{equation}
\begin{split}
move(s'_0, \mathtt{b}) & = \epsilon\text{-closure}(\{t | s \in \{1,2,4\}\text{ and } s^{\mathtt{b}}t \in T\}) \\
& = \epsilon\text{-closure}(\{5\}) \\
& = \{4,5,6\} \\
& = s'_2
\end{split}
\end{equation}
\begin{table}[h]
\begin{center}
\begin{tabular}{|l||r|c|} \hline
state & epsilon-closure & complete \\ \hline \hline
0 & \{1,2,4\} & \checkmark \\ \hline
1 & \{3,4,6\} & \\ \hline
2 & \{4,5,6\} & \\ \hline
\end{tabular}
\end{center}
\end{table}
\begin{equation}
\begin{split}
move(s'_1, \mathtt{a}) & = \epsilon\text{-closure}(\{t | s \in \{3,4,6\}\text{ and } s^{\mathtt{a}}t \in T\}) \\
& = \epsilon\text{-closure}(\{4\}) \\
& = \{4\} \\
& = s'_3
\end{split}
\end{equation}
\begin{equation}
\begin{split}
move(s'_1, \mathtt{b}) & = \epsilon\text{-closure}(\{t | s \in \{3,4,6\}\text{ and } s^{\mathtt{b}}t \in T\}) \\
& = \epsilon\text{-closure}(\{3,5\}) \\
& = \{3,4,5,6\} \\
& = s'_4
\end{split}
\end{equation}
\newpage
\begin{table}[h]
\begin{center}
\begin{tabular}{|l||r|c|} \hline
state & epsilon-closure & complete \\ \hline \hline
0 & \{1,2,4\} & \checkmark \\ \hline
1 & \{3,4,6\} & \checkmark \\ \hline
2 & \{4,5,6\} & \\ \hline
3 & \{4\} & \\ \hline
4 & \{3,4,5,6\} & \\ \hline
\end{tabular}
\end{center}
\end{table}
\begin{equation}
\begin{split}
move(s'_2, \mathtt{a}) & = \epsilon\text{-closure}(\{t | s \in \{4,5,6\}\text{ and } s^{\mathtt{a}}t \in T\}) \\
& = \epsilon\text{-closure}(\{4\}) \\
& = \{4\} \\
& = s'_3
\end{split}
\end{equation}
\begin{equation}
\begin{split}
move(s'_2, \mathtt{b}) & = \epsilon\text{-closure}(\{t | s \in \{4,5,6\}\text{ and } s^{\mathtt{b}}t \in T\}) \\
& = \epsilon\text{-closure}(\{5\}) \\
& = \{4,5,6\} \\
& = s'_2
\end{split}
\end{equation}
\begin{table}[h]
\begin{center}
\begin{tabular}{|l||r|c|} \hline
state & epsilon-closure & complete \\ \hline \hline
0 & \{1,2,4\} & \checkmark \\ \hline
1 & \{3,4,6\} & \checkmark \\ \hline
2 & \{4,5,6\} & \checkmark \\ \hline
3 & \{4\} & \\ \hline
4 & \{3,4,5,6\} & \\ \hline
\end{tabular}
\end{center}
\end{table}
\begin{equation}
\begin{split}
move(s'_3, \mathtt{a}) & = \epsilon\text{-closure}(\{t | s \in \{4\}\text{ and } s^{\mathtt{a}}t \in T\}) \\
& = \epsilon\text{-closure}(\{4\}) \\
& = \{4\} \\
& = s'_3
\end{split}
\end{equation}
\begin{equation}
\begin{split}
move(s'_3, \mathtt{b}) & = \epsilon\text{-closure}(\{t | s \in \{4\}\text{ and } s^{\mathtt{b}}t \in T\}) \\
& = \epsilon\text{-closure}(\{5\}) \\
& = \{4,5,6\} \\
& = s'_2
\end{split}
\end{equation}
\begin{table}[h]
\begin{center}
\begin{tabular}{|l||r|c|} \hline
state & epsilon-closure & complete \\ \hline \hline
0 & \{1,2,4\} & \checkmark \\ \hline
1 & \{3,4,6\} & \checkmark \\ \hline
2 & \{4,5,6\} & \checkmark \\ \hline
3 & \{4\} & \checkmark \\ \hline
4 & \{3,4,5,6\} & \\ \hline
\end{tabular}
\end{center}
\end{table}
\begin{equation}
\begin{split}
move(s'_4, \mathtt{a}) & = \epsilon\text{-closure}(\{t | s \in \{3,4,5,6\}\text{ and } s^{\mathtt{a}}t \in T\}) \\
& = \epsilon\text{-closure}(\{4\}) \\
& = \{4\} \\
& = s'_3
\end{split}
\end{equation}
\begin{equation}
\begin{split}
move(s'_4, \mathtt{b}) & = \epsilon\text{-closure}(\{t | s \in \{3,4,5,6\}\text{ and } s^{\mathtt{b}}t \in T\}) \\
& = \epsilon\text{-closure}(\{3,5\}) \\
& = \{3,4,5,6\} \\
& = s'_4
\end{split}
\end{equation}
\newpage
\begin{table}[h]
\begin{center}
\begin{tabular}{|l||r|c|} \hline
state & epsilon-closure & complete \\ \hline \hline
0 & \{1,2,4\} & \checkmark \\ \hline
1 & \{3,4,6\} & \checkmark \\ \hline
2 & \{4,5,6\} & \checkmark \\ \hline
3 & \{4\} & \checkmark \\ \hline
4 & \{3,4,5,6\} & \checkmark \\ \hline
\end{tabular}
\end{center}
\end{table}
\begin{tikzpicture}
\node[state] (0) at (0,0) {$S_0$};
\node[state, double] (1) at (3,0) {$S_1$};
\node[state, double] (2) at (0,-3) {$S_2$};
\node[state] (3) at (3,-3) {$S_3$};
\node[state, double] (4) at (6,0) {$S_4$};
\begin{scope}[rounded corners=2mm, -Triangle]
\draw (0) -- (1) node [midway, above] {\texttt{a}};
\draw (0) -- (2) node [midway, left] {\texttt{b}};
\draw (1) -- (3) node [midway, left] {\texttt{a}};
\draw (1) -- (4) node [midway, above] {\texttt{b}};
\draw (2) to [out=315, in=225] (3) node at (1.5,-2) {\texttt{a}};
\draw (2) to [out=270, in=180, loop] (2) node at (-1.2,-4.1) {\texttt{b}};
\draw (3) to [out=0, in=270, loop] (3) node at (4.2,-4.1) {\texttt{a}};
\draw (3) to [out=135, in=45] (2) node at (1.5,-4) {\texttt{a}};
\draw (4) -- (3) node [midway, above] {\texttt{a}};
\draw (4) to [out=0, in=270, loop] (4) node at (7.2,-1.1) {\texttt{b}};
\end{scope}
\end{tikzpicture}
\end{document}