It is possible to represent a state space in predicate calculus and use a proof procedure to find solutions to problems.

An example of a classical planning problem is the ``Monkey and Bananas Problem:'' A monkey in a cage wants to get some bananas that hang from the ceiling. The monkey cannot reach the bananas directly. However, there is a box in the cage; by pushing the box underneath the bananas and climbing on the box, the monkey can get the bananas.

Since a state space operator changes the state, we cannot simply
represent facts with predicates such as *At(Monkey, a)*. While the
monkey may be at *a* in some state, the monkey can move. Ordinary
logic is * monotonic*, i.e., the set of true predicates can only
increase; facts cannot be retracted.

One way to represent mutable facts is to add a * situation* or
* state* variable to each predicate: *At(Monkey, a, s _{0})*. This
states that the monkey is at