The “parking” domain involves cars and curbs. Each car can be parked at a curb, or it can line up behind another car (i.e. double park behind a car X which is parked at curb N).
• Clear Car: Means that there is no car behind this particular car, and the car itself is free to move.  The car can not move if another car is double parked behind it.
• Clear curb: Means that the curb is empty (no car is currently occupying it), so a car could move into that curb.

Actions:

1) move-curb-to-curb
   Example: (move-curb-to-curb carX curbFrom curbDest)
   • Purpose: "carX" which was the first car on "curbFrom" moves to an empty "curbDest" costing 1 unit.
   • Preconditions:
     1) The carX itself has no car behind it (carX is clear).
     2) The destination curb, curbDest, is empty (clear).
     3) carX is specifically parked on curbFrom.
   • Effects:
     1) carX vacates curbFrom, making curbFrom empty (clear).
     2) carX occupies curbDest, which is no longer clear.
     3) carX remains clear.


2) move-curb-to-car
   Example: (move-curb-to-car carX curbFrom carAhead)
   • Purpose: "carX" which was the only car on "curbFrom" moves to double park behind "carAhead" costing 1 unit.
   • Preconditions:
     1) The carX itself is clear, and has no other car behind it.
     2) The destination car, carAhead, is clear (i.e, carAhead is the only car in its curb and has no car behind it).
     3) carX is currently parked on curbFrom.
   • Effects:
     1) carX leaves curbFrom, making curbFrom empty (clear).
     2) carX is now behind carAhead, so carAhead is no longer clear (carX is below carAhead, carX is green and clear, carAhead is red and not clear and above carX).
     3) carX remains clear.


3) move-car-to-curb
   Example: (move-car-to-curb carX carAhead curbDest)
   • Purpose: "carX" which was behind "carAhead" moves from behind carAhead to occupy an empty curb, curbDest, costing 1 unit.
   • Preconditions:
     1) carX has no cars behind it (clear).
     2) curbDest is clear (no car is occupying curbDest).
     3) carX is currently behind carAhead (i.e, carX is below carAhead, carX is green and clear, carAhead is red and not clear and above carX).
   • Effects:
     1) carX leaves from behind carAhead, making carAhead clear and green.
     2) carX occupies curbDest, which is no longer empty.
     3) carX remains clear.


4) move-car-to-car
   Example: (move-car-to-car carX carFrom carDest)
   • Purpose: "carX," which is currently behind "carFrom" moves to double park behind "carDest" costing 1 unit.
   • Preconditions:
     1) carX has no cars behind it (it is clear) (carX is below carFrom, carX is green and clear, carFrom is red and not clear and above carX).
     2) carDest is clear and green (no car is behind it) and is the only car parked at a curb.
     3) carX is currently behind carFrom.
   • Effects:
     1) carX is no longer behind carFrom ; carFrom becomes clear and green and the only car at the curb.
     2) carX is now behind carDest, so carDest is no longer clear (carX is below carDest, carX is green and clear, carDest is red and not clear and above carX).
     3) carX remains clear.
