next up previous
Next: Durative Actions Up: BNF Specification of PDDL2.1 Previous: Domains


The BNF for an action definition is given below. Again, this has been simplified by removing generally unused constructs (mainly hierarchical expansions). It should be emphasised that this removal is not intended to be a permanent exclusion -- hierarchical expansion syntax has proved a difficult element of the language both to agree on and to exploit. As the other levels of the language stabilise we hope to return to this layer and redevelop it.

 <action-def>  ::= (:action <action-symbol>

:parameters ( <typed list (variable)> )
<action-def body>)
<action-symbol> ::= <name>
<action-def body> ::= [:precondition <GD>]
[:effect <effect>]

Goal descriptions have been extended to include fluent expressions.

 <GD>   ::= () 

<GD> ::= <atomic formula(term)>
<GD> ::=$^{\tt :negative-preconditions}$ <literal(term)>
<GD> ::= (and <GD>$^*$)
<GD> ::=$^{\tt :disjunctive-preconditions}$ (or <GD>$^*$)
<GD> ::=$^{\tt :disjunctive-preconditions}$ (not <GD>)
<GD> ::=$^{\tt :disjunctive-preconditions}$ (imply <GD> <GD>)

<GD> ::=$^{\tt :existential-preconditions}$
(exists (<typed list(variable)>$^*$) <GD> )

<GD> ::=$^{\tt :universal-preconditions}$
(forall (<typed list(variable)>$^*$) <GD> )
<GD> ::=$^{\tt :fluents}$ <f-comp>
<f-comp> ::= (<binary-comp> <f-exp> <f-exp>)
<literal($t$)> ::= <atomic formula($t$)>
<literal($t$)> ::= (not <atomic formula($t$)>)
<atomic formula($t$)> ::= (<predicate> $t$$^*$)
<term> ::= <name>
<term> ::= <variable>
<f-exp> ::= <number>
<f-exp> ::= (<binary-op> <f-exp> <f-exp>)
<f-exp> ::= (- <f-exp>)
<f-exp> ::= <f-head>
<f-head> ::= (<function-symbol> <term>$^*$)
<f-head> ::= <function-symbol>
<binary-op> ::= $+$
<binary-op> ::= $-$
<binary-op> ::= $*$
<binary-op> ::= $/$
<binary-comp> ::= $>$
<binary-comp> ::= $<$
<binary-comp> ::= $=$
<binary-comp> ::= $>=$
<binary-comp> ::= $<=$
<number> ::= Any numeric literal
$\quad$ (integers and floats of form $n.n$).

Effects have been extended to include functional expression updates. The syntax proposed here is a little different from the syntax proposed in the earlier version of PDDL. The syntax of conditional effects proposed by Fahiem Bacchus for AIPS 2000 has been adopted, in which the nesting of conditional effects is not supported. The assignment operators are prefix forms. Simple assignment is called assign (previously this was change) and operators corresponding to C update assignments, $+=$, $-=$, $*=$ and $/=$ are given the names increase, decrease, scale-up and scale-down respectively. The prefix form has been adopted in preference to an infix form in order to preserve consistency with the Lisp-like syntax and the non-C names to help the C and C++ programmers to remember that the operators are to be used in prefix form). We prefer assign to the original change because the introduction of increase and so on makes the nature of a change more ambiguous.

 <effect>  ::= () 

<effect> ::= (and <c-effect>$^*$)
<effect> ::= <c-effect>
<c-effect> ::=$^{\tt :conditional-effects}$ (forall (<variable>$^*$) <effect>)
<c-effect> ::=$^{\tt :conditional-effects}$ (when <GD> <cond-effect>)
<c-effect> ::= <p-effect>
<p-effect> ::= (<assign-op> <f-head> <f-exp>)
<p-effect> ::= (not <atomic formula(term)>)
<p-effect> ::= <atomic formula(term)>
<p-effect> ::=$^{\tt :fluents}$(<assign-op> <f-head> <f-exp>)
<cond-effect> ::= (and <p-effect>$^*$)
<cond-effect> ::= <p-effect>
<assign-op> ::= assign
<assign-op> ::= scale-up
<assign-op> ::= scale-down
<assign-op> ::= increase
<assign-op> ::= decrease

next up previous
Next: Durative Actions Up: BNF Specification of PDDL2.1 Previous: Domains
Derek Long 2003-11-06