Initial state: BananasAt(B), At(A), Level(low), BoxAt(C)
Goal state:    Have(Bananas)

Actions:
               // move from X to Y
               Move(X, Y)
               Preconditions:  At(X), Level(low)
               Postconditions: !At(X), At(Y)
               
               // climb up on the box
               ClimbUp(Location)
               Preconditions:  At(Location), BoxAt(Location), Level(low)
               Postconditions: Level(high), !Level(low)
               
               // climb down from the box
               ClimbDown(Location)
               Preconditions:  At(Location), BoxAt(Location), Level(high)
               Postconditions: Level(low), !Level(high)
               
               // move monkey and box from X to Y
               MoveBox(X, Y)
               Preconditions:  At(X), BoxAt(X), Level(low)
               Postconditions: BoxAt(Y), !BoxAt(X), At(Y), !At(X)
               
               // take the bananas
               TakeBananas(Location)
               Preconditions:  BananasAt(Location), At(Location), Level(high)
               Postconditions: Have(Bananas)