Solution (source code)

= Solution

Use direct-transfer <STRIPS> actions: one action includes picking up a block and putting it down again. There is no separate holding state. Ground $b,y$ as distinct blocks and $x$ as a support, either a block or the table, with $x\ne b$ and $x\ne y$.

For $\operatorname{Move}(b,x,y)$, take
$$
\begin{aligned}
\operatorname{Pre}&=\{\operatorname{Block}(b),\operatorname{Block}(y),\operatorname{On}(b,x),\operatorname{Clear}(b),\operatorname{Clear}(y)\},\\
\operatorname{Add}&=\{\operatorname{On}(b,y)\}\cup\bigl(\{\operatorname{Clear}(x)\}\text{ if }x\ne\tau\bigr),\\
\operatorname{Del}&=\{\operatorname{On}(b,x),\operatorname{Clear}(y)\}.
\end{aligned}
$$
The <preconditions> ensure that $b$ can be picked up and that the destination has room. Moving it frees a block source and occupies the destination, while $\operatorname{Clear}(b)$ persists. When $x=\tau$, table availability remains true; its redundant addition is simply omitted. Since $x$ is fixed in each <ground action>, this case distinction constructs ordinary add lists rather than introducing conditional action effects. The <search transition model> is \b[$(S\setminus\operatorname{Del})\cup\operatorname{Add}$].