Three kinds of problem can arise - all of which must be handled.
First, we have to filter out ``illegal'' states. For example,
[[1m,2c,1b],[2m,1c,0b]] would lead to the missionary on the left bank
being eaten! Next, some operators are not applicable: for example,
given the state [[1m,2c,1b],[2m,1c,0b]], the operator
2m0c would be illegal. Hence the operators have some
conditions that have to be met in order that they can be applied.
Finally, there are some situations that are really not wanted at all.
For example, starting with [[1m,1c,1b],[2m,2c,0b]], an application of
1m1c
followed by an application of
1m1c would be a waste of time since we have returned
to a previous states. We want to filter out such ``looping''
behaviour.