might be a precondition of an action. In order to handle such conditions, we need **to check**
whether they are satisfied given not only the current logical state, but also the **current** values of the domain numeric expressions. The inclusion of a numeric component in the state makes it necessary to ensure the correct substitution of the numeric values for the expressions used in the action precondition. This is achieved using the **normalisation process**
from Definition 4 in Definition 9. In contrast, the postcondition of an action cannot contain interlocked numeric and logical effects, so it is **possible to separate the effects into the** distinct numeric and logical components.

Definition 7 Valid Ground Action Let a be a ground action. a is valid **if no primitive**
numeric expression appears as an lvalue in more than one simple assignment effect, or in more than one different type of assignment effect.

Definition 7 ensures that an action does not attempt inconsistent updates on a numeric value. Unlike logical effects of an action which cannot conflict, it is possible **to write**
a syntactic definition of an action in which the effects are inconsistent, for example by assigning two different values to the same primitive numeric expression.

Definition 8 Updating Function Let a be a valid ground action. The **updating function**
for a **is the composition of the set of functions:**

$$\{\mathrm{NPF}_{p}\ :\ \mathbb{R}_{\perp}^{d i m}\rightarrow\ \mathbb{R}_{\perp}^{d i m}\,|\,p\in N P_{a}\}$$

such that NPFp(x) = x
′ **where for each primitive numeric expression** x
′i that does not appear as an lvalue in N (p), x
′i = xi and N (p)[X′:= x
′, X := x] **is satisfied.**
The notation N (p)[X′:= x
′, X := x] should be read as the result of normalising p and then substituting the vector of actual values x
′for the parameters X′ **and actual values** x for formal parameters X.

Definition 8 defines the function describing the update effects of an action. The **function**
ensures that all of the reals in the vector describing the numeric state remain unchanged if they are not affected by the action (this is the numeric-state equivalent of the **persistence**
achieved for propositions by the strips **assumption). For other values in the vector, the**
normalisation process is used to substitute the correctly indexed vector elements for the primitive numeric expressions appearing as lvalues (which are the primed vector elements corresponding to values in the post-action state) and rvalues (the unprimed values appearing in the pre-action state). The tests that must be satisfied in order to ensure correct behaviour of the functions in the composition simply confirm that the arithmetic on the rvalues is correctly applied to arrive at the lvalues. The requirement that the action **be valid ensures**
that the composition of the functions in Definition 8 is well-defined, since all **of the functions** in the set commute, so the composition can be carried out in any order.

The various sets of primitive numeric expressions defined in the Definition 6 allow us to conveniently express the conditions under which two concurrent actions might interfere with one another. In particular, we are concerned not to allow concurrent assignment to the same primitive numeric expression, or concurrent assignment and inspection. We do **allow** concurrent increase or decrease of a primitive numeric expression. **To allow this we will**