Domains

The syntax for domain definitions is the same as for PDDL2.1, except that durative actions are not allowed. Declarations of constants, predicates, and functions are allowed in any order with respect to one another, but they must all come after any type declarations and precede any action declarations.

$ \langle$ domain$ \rangle$  ::=  ( define ( domain $ \langle$ name$ \rangle$ )
      [$ \langle$ require-def$ \rangle$]
      [$ \langle$ types-def$ \rangle$] :typing
      [$ \langle$ constants-def$ \rangle$]
      [$ \langle$ predicates-def$ \rangle$]
      [$ \langle$ functions-def$ \rangle$] :fluents
      $ \langle$ structure-def$ \rangle$* )
$ \langle$ require-def$ \rangle$  ::=  ( :requirements $ \langle$ require-key$ \rangle$* )
$ \langle$ require-key$ \rangle$  ::=  See Section A.4
$ \langle$ types-def$ \rangle$  ::=  ( :types $ \langle$typed list (name)$ \rangle$ )
$ \langle$ constants-def$ \rangle$  ::=  ( :constants $ \langle$ typed list (name)$ \rangle$ )
$ \langle$ predicates-def$ \rangle$  ::=  ( :predicates $ \langle$ atomic formula skeleton$ \rangle$* )
$ \langle$ atomic formula skeleton$ \rangle$  ::=  ( $ \langle$ predicate$ \rangle$ $ \langle$ typed list (variable)$ \rangle$ )
$ \langle$ predicate$ \rangle$  ::=  $ \langle$ name$ \rangle$
$ \langle$ functions-def$ \rangle$  ::=  ( :functions $ \langle$ function typed list (function skeleton)$ \rangle$ )
$ \langle$ function skeleton$ \rangle$  ::=  ( $ \langle$ function symbol$ \rangle$ $ \langle$ typed list (variable)$ \rangle$ )
$ \langle$ function symbol$ \rangle$  ::=  $ \langle$ name$ \rangle$
$ \langle$ structure-def$ \rangle$  ::=  $ \langle$ action-def$ \rangle$
$ \langle$ action-def$ \rangle$  ::=  See Section A.2
$ \langle$ typed list (x)$ \rangle$  ::=  $ \langle$ x$ \rangle$*  | :typing $ \langle$ x$ \rangle$ + - $ \langle$ type$ \rangle$ $ \langle$ typed list (x)$ \rangle$
$ \langle$ type$ \rangle$  ::=  ( either $ \langle$ primitive type$ \rangle$ + )  |  $ \langle$ primitive type$ \rangle$
$ \langle$ primitive type$ \rangle$  ::=  $ \langle$ name$ \rangle$
$ \langle$ function typed list (x)$ \rangle$  ::=  $ \langle$ x$ \rangle$*
   |   :typing $ \langle$ x$ \rangle$ + - $ \langle$ function type$ \rangle$ $ \langle$ function typed list (x)$ \rangle$
$ \langle$ function type$ \rangle$  ::=  number

A $ \langle$ name$ \rangle$ is a string of characters starting with an alphabetic character followed by a possibly empty sequence of alphanumeric characters, hyphens (“-”), and underscore characters (“_”). A $ \langle$ variable$ \rangle$ is a $ \langle$ name$ \rangle$ immediately preceded by a question mark (“?”). For example, in-office and ball_2 are names, and ?gripper is a variable.

Håkan L. S. Younes
2005-12-06