% file name: containers-domain

:- include 'additive-cr'.

:- variables
        N,N1 :: nnInteger.

:- constants
        small  :: additiveFluent(l_small..u_small);
        medium :: additiveFluent(l_medium..u_medium);
        large  :: additiveFluent(l_large..u_large);
        force  :: additiveFluent(l_force..u_force);
        addS(nnInteger),
        releaseS(nnInteger),
        releaseL(nnInteger),
        exert(nnInteger) :: exogenousAction.

% direct contributions:

addS(N) increments small by N.
releaseS(N) decrements small by N.
releaseS(N) increments medium by N.
releaseL(N) decrements large by N.
exert(N) increments force by N.

% preconditions:

nonexecutable addS(N) & addS(N1) if N < N1.
nonexecutable releaseS(N) & releaseS(N1) if N < N1.
nonexecutable releaseL(N) & releaseL(N1) if N < N1.
nonexecutable exert(N) & exert(N1) if N < N1.

% contribution rules:

medium <-+- multiply(1,small).
large <-+-  multiply(1,medium).
force <-+-- multiply(2,large).
force <--+- multiply(2,large).

