Go backward to Negated conditions.
Go up to The condition side.
Go forward to Grammar for Condition Side.

Negated conjunctions of conditions
..................................

Conditions can be grouped into conjunctive sets by surrounding the set of
conditions with { and }.  The production compiler groups the test in these
conditions together.  This grouping allows for negated tests of more than one
working memory element at a time.  In the example below, the state is tested
to ensure that it does not have an object on the table.  This is equivalent
to testing: (<s> -^ontop.bottom-object.type table). If only the last
condition, (<bo> ^$type table) were negated, the production would match
against any object that was not of type table, instead of matching only when
the state has no ontop relation with a table on the bottom.

(sp blocks*negated-conjunction-example
  (goal <g> ^problem-space.name blocks-world ^state <s>)
-{(<s> ^ontop <on>)
  (<on> ^bottom-object <bo>)
  (<bo> ^type table)}
  -->
  ...
)