Syntax of Operator Files for IPP 3.0 to 3.3


The operator file, as it's name suggests, contains the set of operators that may be applied in the planning domain. It must be a text file of the form (name).ops and IPP will try to apply all the ops which are contained in it, i.e., you need to put different operator sets into different files.

Basic Name Conventions:


OP_FILE      ::=  /* empty */ |  OP OP_FILE

OP           ::=  constantname ":v"  PARDEC  ":p"  FACTLIST ":e"  EFFECTS
 
PARDEC       ::= /* empty */ | VARLIST constantname  PARDEC

VARLIST      ::= /* empty */ | variablename Varlist
 
FACTLIST     ::= /* empty */ 
                 | predicatename '(' CONSTANTLIST ')'   FACTLIST 
                 | NOT PREDNAME  '(' CONSTANTLIST ')'   FACTLIST 

NOT          ::= "not" |"!" 

CONSTANTLIST ::= constantname | constantname SPC CONSTANT_LIST

SPC          ::= " "  {  " "  |  newline | tabulator }
  
EFFECTS      ::= 'ALL' PARDEC PREDLIST IMPL ADDLIST DELLIST CONTINUE
                 | FACTLIST IMPL ADDLIST DELLIST CONTINUE
                    
ADDLIST      ::= /* empty */ | ADD
                 PREDLIST
             
DELLIST      ::= /* empty */ | DEL PREDLIST-NO-NOT
                  
PREDLIST     ::= /* empty */ 
                 | predicatename '(' ARGS ')'  PREDLIST
                 | NOT PREDNAME  '(' ARGS ')'  PREDLIST
    
PREDLIST-NO-NOT ::= /* empty */ 
                 | predicatename '(' ARGS ')'  PREDLIST-NO-NOT 
        
ARGS         ::= /* empty */ | variablename SPC ARGS 
                 | constantname SPC ARGS 

CONTINUE     ::= '.' | ';' EFFECTS

IMPL         ::=  /* empty */ | IMPL 
                



EFFECTS are list of conditional effects with the ADD effects preceeding the DEL effects which are separated by ";" . The last effect must be followed by "." NEVER use DEL effects and atomic negation at the same time!
  
Several equivalent representations of the move operator 
from the Briefcase Domain:

move
:v ?m ?l location 
:p is-at(?m)
:e ADD is-at(?l) DEL is-at(?m);
   ALL ?o object in(?o)  => ADD at(?o ?l) DEL at(?o ?m).


move
:v ?m ?l location 
:p is-at(?m)
:e ADD is-at(?l) !is-at(?m);
   ALL ?o object in(?o) => ADD at(?o ?l) !at(?o ?m).


move
:v ?l location
:p
:e ADD is-at(?l);
   ALL ?m location !eq(?m ?l) => DEL is-at(?m);
   ALL ?o object ?m location in(?o) at(?o ?m) !eq(?m ?l) 
                              => ADD at(?o ?l) DEL at(?o ?m).

move
:v ?l location 
:p 
:e ADD is-at(?l);
   ALL ?m location !eq(?m ?l) => ADD !is-at(?m);
   ALL ?o object ?m location in(?o) at(?o ?m) !eq(?m ?l) 
                              => ADD at(?o ?l) !at(?o ?m).  


NOTE: