Encoding the goal state is very trivial. Just make sure all $target$ tiles are
$targetbox$ tiles.
-\subsection{Lurd extraction}
-%TODO
+\subsection{Algorithm}
+We use the standard optimized reachability algorithm to solve a screen but
+added a goal condition that breaks the loop. When the loop breaks prematurely
+it means a solution is found. If the full loop continues until the entire state
+space is search and the break condition is not met it means there is no
+solution.
+
+\begin{algorithm}[H]
+ \KwIn{I, Initial state BDD}
+ \KwIn{$R_i$, List of transition BDDs}
+ \KwIn{G, Goal BDD}
+ $V_{old}\leftarrow BDDempty$\;
+ $V_{new}\leftarrow I$\;
+ \While{$V_{new}\neq V_{old}$}{
+ $V_{old}\leftarrow V_{new}$\;
+ \ForEach{$R_i$}{
+ $V_{new}\leftarrow BDDapply(\vee, V_{new}, BDDrelprod(V_{new}, R_i)$\;
+ }
+ \lIf{$BDDsatcount(BDDand(G, new))>0$}{$break$}
+ }
+\end{algorithm}
\subsection{Example}
For example, take the toy screen shown as the first representation in
\end{tabular}
\subsection{How-to}
-The program can be built by running \texttt{make}. \texttt{make} expects the
-sylvan headers to be located in \texttt{./sylvan/src} and the library archive
-in \texttt{./sylvan/src/libsylvan.a}. If this is not the case one can adapt the
+The latest version of the modelchecker can be obtained by cloning the
+repository, building sylvan and building the modelchecker with the following
+commands:
+
+\begin{lstlisting}
+$ git clone --recursive https://github.com/dopefishh/mc1516pa.git
+$ cd mc1516pa/modelchecker/sylvan
+$ cmake .
+$ make
+$ cd ..
+$ make
+\end{lstlisting}
+
+The makefile of the modelchecker expects the sylvan headers to be located in
+\texttt{./sylvan/src} and the library archive in
+\texttt{./sylvan/src/libsylvan.a}. If this is not the case one can adapt the
makefile or set the appropriate \texttt{CFLAGS} and \texttt{LDFLAGS}.
When the main program is executed with the \texttt{-h} flag the help is shown.