Blocks rr0112




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

supported(B) requires block(B).
always: executable move(B,L) if B<>L. nonexecutable move(B,L) if occupied(B). nonexecutable move(B,L) if occupied(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.

initially: forbidden on(B,L), on(B,L1), L<>L1.

forbidden on(B1,B), on(B2,B), block(B), B1<>B2.

caused supported(B) if on(B,table).

caused supported(B) if on(B,B1), supported(B1).

forbidden not supported(B).

% use no conc. primitive instead of single rules:

noConcurrency.