You may recall the puzzle of a ferryman, goat, cabbage, and wolf all on one side of a river. The ferryman can cross the river with at most one passenger in his boat. There is a behavioural conflict between:
1. the goat and the cabbage; and
2. the goat and the wolf;
if they are on the same river bank but the ferryman crosses the river or stays on the other bank.

We wish to know how the ferryman can transport all goods to the other side, without any conflicts occurring.

Build a model in which the states represent which goods are at which side of the river. Your model will need to have variables representing the location of the ferryman, the goat, the cabbage and the wolf and a variable that indicates what is being carried in the ferry.

Define a goal state in which all goods are on the other side of the river. Write a property which checks whether this goal state is reachable without any conflicts occurring.

Use the variable names ferryman, goat, cabbage, wolf and carry.
