From 409251d3b24b19ee39c84816bb8b3c562c2bdebe Mon Sep 17 00:00:00 2001
From: Carlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>
Date: Tue, 13 Nov 2012 16:16:03 +1100
Subject: Some more contribution fixing stuff.

---
 tex/thesis/contribution/contribution.tex | 205 ++++++++++++++++++++++---------
 1 file changed, 145 insertions(+), 60 deletions(-)

(limited to 'tex/thesis/contribution/contribution.tex')

diff --git a/tex/thesis/contribution/contribution.tex b/tex/thesis/contribution/contribution.tex
index b5d47db..44e5e7d 100644
--- a/tex/thesis/contribution/contribution.tex
+++ b/tex/thesis/contribution/contribution.tex
@@ -10,12 +10,15 @@
 \newcommand\system{\mathcal{E}} %\mathsf{system}}
 \newcommand\parent{\mathsf{parent}}
 \newcommand\parents{\mathsf{parents}}
+\newcommand\val{\mathsf{val}}
 \newcommand\old{\mathsf{old}}
+\newcommand\best{\mathsf{best}}
+\newcommand\all{\mathsf{all}}
 
 \newcommand\Operators{\mathcal{O}}
 \newcommand\Systems{\varepsilon}
 
-
+\newcommand\improve{\mathsf{\textsc{improve}}}
 \newcommand\init{\mathsf{\textsc{init}}}
 \newcommand\eval{\mathsf{\textsc{eval}}}
 \newcommand\stabilise{\mathsf{\textsc{stabilise}}}
@@ -24,8 +27,9 @@
 \newcommand\fixpoint{\mathsf{\textsc{fixpoint}}}
 \newcommand\strategy{\mathsf{\textsc{strategy}}}
 
-\algblockx[Globals]{Globals}{EndGlobals}{\textbf{Globals:\\}}{} 
-\algblockx[Assume]{Assumptions}{EndAssumptions}{\textbf{Assume:\\}}{} 
+\algblockx[Globals]{Globals}{EndGlobals}{\textbf{Globals:\\}}{}
+\algblockx[Assume]{Assumptions}{EndAssumptions}{\textbf{Assume:\\}}{}
+\algblockdefx[ReturnLambdaFn]{ReturnLambdaFn}{EndReturnLambdaFn}[1]{\textbf{return function} (#1)}{\textbf{end function}}
 
 
 \chapter{Contribution} \label{chap:contribution}
@@ -92,21 +96,25 @@ variables. We will also define $\CZ = \Z \cup \{-\infty, \infty\}$.
   : (X \to \CZ) \to \CZ$, a mapping from a variable assignment to the
   expression's value in that assignment.
 
-  Expressions have two possible forms:
+  Expressions have three possible forms:
   \begin{itemize}
-    \item $e = f( e_1, e_2, ..., e_k )$, with $f: \CZ^k \to \CZ$ and
+    \item
+      $e = f( e_1, e_2, ..., e_k )$, \\
+      with $f: \CZ^k \to \CZ$ and
       $e_1, e_2, ... e_k \in E$ and $e(\rho) = f(e_1(\rho),
-      e_2(\rho), ..., e_k(\rho))$.
-    \item $e = x \in X$, with $e(\rho) = \rho(v)$
+      e_2(\rho), ..., e_k(\rho))$
+    \item $e = x \in X$, with $e(\rho) = \rho(x)$
+    \item $e = z \in \CZ$, with $e(\rho) = z$
   \end{itemize}
   
   The subset of expressions of the form $\max\{ e_1, e_2, ... e_k \}$,
   with $e_1, e_2, ..., e_k \in E$ are referred to
   as \emph{$\max$-expressions}, denoted by $E_{\max} \subset E$.
 
-  For an expression $e$, the set of expressions containing it, $\{
-  e_\parent \mid e_\parent = o\{ e_1, e_2, ... e_k \}, o \in \O, e_i
-  \in E \}$, is denoted $\parents(e)$.
+  We define a function $\parents: E \to 2^E$, taking an expression,
+  $e$, to the set of expressions containing $e$, $\{ e_\parent \mid
+  e_\parent = f\{ ..., e, ... \}, f: \CZ^k \to \CZ \}$. $e$ is then
+  said to be a \emph{subexpression} of $e_{\parent}$.
 \end{definition}
 
 \begin{definition}
@@ -135,8 +143,8 @@ variables. We will also define $\CZ = \Z \cup \{-\infty, \infty\}$.
 
   We define an inverse mapping, $\system^{-1} : E \to 2^X$, taking an
   expression, $e$, to the set of variables, $x$ for which it is a
-  ``subexpression'' of $\system[x]$. This is captured in the following
-  definition:
+  transitive subexpression of $\system[x]$. This is captured in the
+  following definition:
   \begin{align*}
     \system^{-1}(e) &= \{ x \mid system(x) = e \} \cup \{
     \system^{-1}(e_\parent) \mid e_\parent \in parents(e) \}
@@ -317,16 +325,46 @@ The W-DFS algorithm provides us with a \emph{local},
 fixpoint problems.
 
 \begin{figure}[H]
-  \begin{align*}
-    x &= \min(0, y) \\
-    y &= x \\
-    a &= \min(0, b) \\
-    b &= c \\
-    c &= d \\
-    d &= e \\
-    e &= a \
-  \end{align*}
-  \caption{Example equation system for a W-DFS solve}
+  \begin{tikzpicture}
+    \node[draw] (full) at (0,-2) {
+      \begin{minipage}{0.3\textwidth}
+        \begin{align*}
+          x &= \min(0, y) \\
+          y &= x \\
+          a &= \min(0, b) \\
+          b &= c \\
+          c &= d \\
+          d &= e \\
+          e &= a
+        \end{align*}
+      \end{minipage}
+    };
+
+    \node[draw] (first) at (10, 1) {
+      \begin{minipage}{0.3\textwidth}
+        \begin{align*}
+          x &= \min(0, y) \\
+          y &= x
+        \end{align*}
+      \end{minipage}
+    };
+    \node[draw] (second) at (10,-4) {
+      \begin{minipage}{0.3\textwidth}
+        \begin{align*}
+          a &= \min(0, b) \\
+          b &= c \\
+          c &= d \\
+          d &= e \\
+          e &= a
+        \end{align*}
+      \end{minipage}
+    };
+
+    \draw[->] (full) -- (first);
+    \draw[->] (full) -- (second);
+  \end{tikzpicture}
+  \caption{Example of an equation system which can be separated into
+    two independent sub-systems}
   \label{fig:wdfs-example}
 \end{figure}
 
@@ -336,14 +374,14 @@ provide a more concrete example, consider the equation system
 presented in Figure \ref{fig:wdfs-example}. This equation system can
 be separated into two independent equation systems, one consisting of
 $\{x, y\}$ and the other of $\{a, b, c, d, e\}$. In order to find the
-value of a variable in either of these sub-systems it is necessary to
-evaluate the entire sub-system, but it is not necessary to evaluate
-the other sub-system. To compute the value of $x$ in the greatest
-fixpoint it is unnecessary to compute the value of the variable $d$,
-but it is necessary to compute the value of $y$. The W-DFS algorithm,
-will only evaluate the necessary subsystem for a requested variable,
-leaving the other system untouched. In order to capture this property
-we will define the notion of a \emph{local} solver.
+value of a variable in either of these subsystems it is necessary to
+evaluate the entire subsystem, but it is not necessary to evaluate the
+other subsystem. To compute the value of $x$ in the greatest fixpoint
+it is unnecessary to compute the value of the variable $d$, but it is
+necessary to compute the value of $y$. The W-DFS algorithm, will only
+evaluate the necessary subsystem for a requested variable, leaving the
+other system untouched. In order to capture this property we will
+define the notion of a \emph{local} solver.
 
 \begin{definition}
   \textbf{Local:} A solver is said be \emph{local} if, for some
@@ -360,9 +398,11 @@ greatest-fixpoint problems.
 
 The problem of $\max$-strategy iteration is trying to find a mapping
 $\sigma: E_{\max} \to E$ from each $\max$-expression to its greatest
-sub-expression. We will use $\sigma: \Systems \to \Systems$ as a
+subexpression. We will use $\sigma: \Systems \to \Systems$ as a
 shorthand to denote the system obtained by replacing each
-$\max$-expression, $x$, in $\system$ with $\sigma(x)$.
+$\max$-expression, $x$, in $\system$ with $\sigma(x)$. Similarly
+$\sigma_{\all}: E \to E$ will denote the expression obtained by
+replacing each $\max$-subexpression in $e$ with $\sigma(e)$.
 
 In the particular case of \emph{monotonic}, \emph{expansive} operators
 it has been shown\cite{Gawlitza:2007:PFC:1762174.1762203} that this
@@ -372,19 +412,45 @@ strategy. This means that each time we improve our strategy we must
 make it greater in at least one $\max$-expression, and no worse in the
 others.
 
-To this end a new function, $P_{\max}: ((E_{\max} \to E) \times (X \to D))
-\to (E_{\max} \to E)$, is used below as a ``strategy improvement
-operator''. $P_{\max}$ takes a $\max$-strategy and a variable
-assignment and returns a new $\max$-strategy which constitutes an
-`improvement' of the strategy in the variable assignment $\rho$. If
-have a $\max$-strategy $\sigma$, a variable assignment $\rho$ and
-$\varsigma = P_{\max}(\sigma, \rho)$. Then:
+To this end a new function, $\improve: ((E_{\max} \to E) \times
+(X \to D)) \to (E_{\max} \to E)$, is used below as a \emph{strategy
+  improvement operator}. $\improve$ takes a $\max$-strategy and
+a variable assignment and returns a new $\max$-strategy which
+constitutes an `improvement' of the strategy in the variable
+assignment $\rho$. If have a $\max$-strategy $\sigma$, a variable
+assignment $\rho$ and $\varsigma = \improve(\sigma,
+\rho)$. Then:
 \begin{align*}
   \sigma(\system)(\rho) \le \varsigma(\system)(\rho)
 \end{align*}
 
-If it is possible for $\sigma$ to be improved then $P_{\max}$ will
-return an improvement, otherwise it will return $\sigma$ unchanged.
+If it is possible for $\sigma$ to be improved then $\improve$ will
+return an improvement, otherwise it will return $\sigma$
+unchanged. One possible implementation of $\improve$ is presented in
+Listing \ref{algo:pmax}. It will try every option of subexpressions
+for this $\max$-expression and will then return the best. The use of
+an anonymous function as the returned strategy is so the evaluation of
+each strategy is only done when requested.
+
+\begin{algorithm}
+  \begin{algorithmic}
+    \Function {improve} {$\sigma: E_{\max} \to E$, $\rho: X \to D$}
+      \ReturnLambdaFn {$e \in E_{\max}$}
+        \State $e_{\best} = \sigma(e)$
+        \State $\val_{\best} = \sigma_{\all}(e_{\old})(\rho)$
+        \For {$e_i \in e$}
+          \If {$\sigma_{\all}(e_i)(\rho) > \val_{\best}$}
+            \State $e_{\best} = e_i$
+            \State $\val_{\best} = \sigma(e_i)(\rho)$
+          \EndIf
+        \EndFor
+        \State \Return $e_{\best}$
+      \EndReturnLambdaFn
+    \EndFunction
+  \end{algorithmic}
+  \caption{The variation of $\improve$ used in our algorithm}
+  \label{algo:pmax}
+\end{algorithm}
 
 \subsection{Naive approach}
 
@@ -405,7 +471,7 @@ the approach presented in Listing \ref{algo:naive-strategy}.
 
         $\rho$ & $: X \to D$, a variable assignment \\
 
-        $P_{\max}$ & $: ((E_{\max} \to E) \times (X \to \CZ)) \to (E_{\max}
+        $\improve$ & $: ((E_{\max} \to E) \times (X \to \CZ)) \to (E_{\max}
         \to E)$, a $\max$-strategy improvement operator \\
       \end{tabularx}
     \EndAssumptions
@@ -415,7 +481,7 @@ the approach presented in Listing \ref{algo:naive-strategy}.
       \State $\sigma_0 = \{ x \mapsto -\infty \mid \forall x \in X \}$
       \State $\rho_0 = \underline{-\infty}$
       \Repeat
-        \State $\sigma_{k+1} = P_{\max}(\sigma_k, \rho_k)$
+        \State $\sigma_{k+1} = \improve(\sigma_k, \rho_k)$
         \State $\rho_{k+1} = \solve \fixpoint(\sigma_{k+1}(\system))$
         \State $k = k + 1$
       \Until {$\sigma_{k-1} = \sigma_k$}
@@ -454,14 +520,14 @@ solve $\max$-strategy iteration problems.
       $\max$-expressions to a subexpression \\
 
       $\inflSI$ & $: (E_{\max} \to 2^{E_{\max}}$, a mapping from a
-      $\max$-expression to the sub-expressions it influences \\
+      $\max$-expression to the subexpressions it influences \\
 
       $\stableSI$ & $\subseteq E_{\max}$, the set of all
       $\max$-expressions whose strategies are stable \\
 
       $\system$ & $\in \Systems$, an equation system \\
       
-      $P_{\max}$ & $: ((E_{\max} \to E) \times (X \to \CZ)) \to (E_{\max}
+      $\improve$ & $: ((E_{\max} \to E) \times (X \to \CZ)) \to (E_{\max}
       \to E)$, a $\max$-strategy improvement operator \\
     \end{tabularx}
     \EndGlobals
@@ -491,7 +557,7 @@ solve $\max$-strategy iteration problems.
     \If {$x \not \in \stableSI$}
       \State $\stableSI = \stableSI \cup \{x\}$
       \State $\rho = \solve \fixpoint(\sigma(\system))$
-      \State $v = P_{\max}(\lambda y . \eval(x, y), \rho)[x]$
+      \State $v = \improve(\lambda y . \eval(x, y), \rho)[x]$
       \If {$v \ne \sigma[x]$}
         \State $\sigma = \{ x \mapsto v\} \oplus \sigma$
         \State $W = \inflSI[x]$
@@ -516,11 +582,11 @@ only attempt to improve the strategy for a given $\max$-expression if
 some of the $\max$-expressions which may influence it are changed.
 
 For this particular algorithm to work, however, we must assume another
-property of $P_{\max}$. In Listing \ref{algo:adapted-wdfs} we take the
-value of $P_{\max}(\lambda y . \eval(x, y), \rho)[x]$; we improve the
+property of $\improve$. In Listing \ref{algo:adapted-wdfs} we take the
+value of $\improve(\lambda y . \eval(x, y), \rho)[x]$; we improve the
 strategy, then use only the strategy for $x$. In order for this
-algorithm to be correct $P_{\max}$ must always improve the strategy at
-$x$ if it is possible to do so. If $P_{\max}$ did not improve the
+algorithm to be correct $\improve$ must always improve the strategy at
+$x$ if it is possible to do so. If $\improve$ did not improve the
 strategy at $x$, while a permissible improvement existed, then we
 would consider $x$ to be ``stable'' and would not attempt to improve
 our strategy at $x$ until the improvement of another portion of our
@@ -528,15 +594,20 @@ strategy invalidated $x$. It is not guaranteed that another strategy
 improvement will invalidate the strategy at $x$, however, so the
 strategy at $x$ may still be able to be improved when the algorithm
 terminates. If the strategy at $x$ can still be improved then we have
-not reached the solution of our $\max$-strategy iteration.
+not reached the solution of our $\max$-strategy iteration. The
+particular $\improve$ that we are using (see Listing \ref{algo:pmax})
+satisfies this assumption, as it attempts to improve the strategy at
+the point of individual $\max$-expressions.
 
-Additionally, in order to remain efficient, $P_{\max}$ should not
+Additionally, in order to remain efficient, $\improve$ should not
 attempt to improve the strategy for any $\max$-expressions until that
-expression is requested. Whether or not $P_{\max}$ is lazy in this way
+expression is requested. Whether or not $\improve$ is lazy in this way
 will not affect the correctness of the algorithm, as it will only
 result in the $\max$-strategy improvement at each step being more
 expensive. The extra work to improve other portions of the strategy
-will be discarded with only $P_{\max}(...)[x]$ being used.
+will be discarded with only $\improve(...)[x]$ being used. The
+particular $\improve$ that we are using (see Listing \ref{algo:pmax})
+satisfies this property by way of its anonymous function.
 
 \section{Local Demand-driven Strategy Improvement (LDSI)}
 
@@ -631,12 +702,12 @@ This algorithm is presented in three parts.
       $\max$-expressions to a subexpression \\
 
       $\inflSI$ & $: E_{\max} \to 2^{E_{\max}}$, a mapping from a
-      $\max$-expression to the sub-expressions it influences \\
+      $\max$-expression to the subexpressions it influences \\
 
       $\stableSI$ & $\subseteq E_{\max}$, the set of all
       $\max$-expressions whose strategies are stable \\
 
-      $P_{\max}$ & $: ((E_{\max} \to E) \times (X \to \CZ)) \to
+      $\improve$ & $: ((E_{\max} \to E) \times (X \to \CZ)) \to
       (E_{\max} \to E)$, a $\max$-strategy improvement operator \\
       
       \\
@@ -892,14 +963,16 @@ themselves destabilised as well.
     \Procedure {solvestrategy} {$x \in E_{\max}$}
     \If {$x \not \in \stableSI$}
       \State $\stableSI = \stableSI_{\max} \cup \{x\}$
-      \State $e = P_{\max}(\lambda y . \eval \strategy(x,y),
-                          \lambda y . \eval \strategy \fixpoint(x, y))[x]$
+      \State $e = \improve(\lambda y . \eval \strategy(x,y),
+                           \lambda z . \eval \strategy \fixpoint(x, z))[x]$
       \If {$e \ne \sigma[x]$}
         \State $\sigma = \{ x \mapsto e \} \oplus \sigma$
-        \State $\invalidate \fixpoint(\system^{-1}(x))$
+        \For {$v \in \system^{-1}(x)$}
+          \State $\invalidate \fixpoint(\system^{-1}(x))$
+        \EndFor
         \State $\stableSI = \stableSI \backslash I[x]$
         \For {$v \in \inflSI[x]$}
-          \State $\solve(v)$
+          \State $\solve \strategy(v)$
         \EndFor
       \EndIf
     \EndIf
@@ -911,8 +984,18 @@ themselves destabilised as well.
 
 
 
+
+
 \subsection{Correctness} \label{sec:ldsi:correctness}
 
+To argue the correctness of our LDSI algorithm we will first establish
+some invariants, after which it should be much easier to see why our
+algorithm is correct.
+
+%\begin{invariant}
+First of all $\fixpoint \solve$. 
+%\end{invariant}
+
 In order to argue that LDSI is correct we must first assume that the
 W-DFS algorithm of Seidl et al.~is correct and will solve the equation
 system for its least/greatest fixpoint.
@@ -938,3 +1021,5 @@ The strategy-iteration step invalidates anything that \emph{might}
 depend on $\system[x]$ while it invalidates $x$, thereby ensuring that
 any further calls to $\solve \strategy$ will result in a correct value
 for the given strategy.
+
+\subsection{Implementation} \label{sec:ldsi:implementation}
-- 
cgit v1.2.3

