Our planning problems are specified in an extension of the PDDL
language [McDermott1998]; we support PDDL typing, equality,
quantified goals and effects, disjunctive preconditions, and
conditional effects. In addition, we handle metric values with two new
built-in types: *float* and *fluent*. A float's value may not
change over the course of a plan, whereas a fluent's value may change
from time step to time step. Moreover, we support fluent- and
float-valued functions, such as `?distance[Nagoya,Stockholm]`

.

Floats and fluents are manipulated with three special built-in
predicates: `test`, `set`, and `influence`. `Test`
statements are used as predicates in action preconditions; `set`
and `influence` are used in effects. As its argument, `test`
takes a constraint (an equality or inequality between two expressions
composed of floats, fluents, and basic arithmetic operations); it
evaluates to true if and only if the constraint holds. `Set` and `influence` each take
two arguments: the object (a float or fluent) and an expression. If an
action causes a `set` to be asserted, the object's value after the
action is defined to be the expression's value before the
action. An asserted `
influence` changes an object's value by the value of the expression,
as in the equation
;
multiple simultaneous `influences` are cumulative
in their effect [Falkenhainer and
Forbus1988].