Blocks world


fluents: on(B,L) requires block(B), location(L).
occupied(B) requires location(B).
actions: move(B,L) requires block(B), location(L).

always: executable move(B,L) if not occupied(B), not occupied(L), B <> L.
inertial on(B,L).

caused occupied(B) if on(B1,B), block(B).

caused on(B,L) after move(B,L).

caused -on(B,L1) after move(B,L), on(B,L1), L <> L1.
noConcurrency.