+\newpage
\subsection{Part 1: Modelling Sokoban}
\subsubsection{Task 1: Knowledge base}
\begin{itemize}
agent(x, s))\\
crate(x, y, result(A, s)) & \rightarrow\\
& (\exists z,\alpha:
- A = push(z, \alpha),
- (\exists \beta:
- connected(z, \beta, \alpha),
- connected(\beta, y, \alpha),
- crate(x, \beta, s)
+ A = push(z\wedge \alpha)\wedge\\
+ & (\exists \beta:
+ connected(z\wedge \beta\wedge \alpha)\wedge
+ connected(\beta\wedge y\wedge \alpha)\wedge
+ crate(x\wedge \beta\wedge s)
)
) \vee\\
& (\exists z,\alpha:
\end{array}$
\end{itemize}
+\newpage
\subsection{Part 2: Implementation}
\subsubsection{Task 3: Translate Axioms}
The only optimization added to the file is the reverse move optimization,
\end{listing}
\subsubsection{Task 6: Inverse Problem}
+\begin{listing}[H]
+ \caption{Instance description task 6}
+ \prologcode{./src/instancetask6.pl}
+\end{listing}
+\begin{listing}[H]
+ \caption{Domain description task 6}
+ \prologcode{./src/domaintask6.pl}
+\end{listing}
+\newpage
\subsection{Part 3: Extending the domain}
\subsubsection{Task 7: Unlocking the Crates}
\begin{listing}[H]
\prologcode{./src/domaintask7.pl}
\end{listing}
+\newpage
\subsection{Part 4: General questions}
\subsubsection{Task 10: Sitcalc expressivity}
Situation calculus(sitcalc from now on) is very expressive because you can