Analysis of dependencies on all non-deterministic operations
------------------------------------------------------------
This analysis is useful if some operation has a non-deterministic
behavior and one wants to find the reason for this behavior.
For this purpose, the analysis computes for each operation the set of
operations with a non-deterministic definition that might be called
by this operation. An operation has a non-deterministic definition
if its definition contains overlapping left-hand sides or free variables.
If the non-determinism of an operation is encapsulated
by a set function or an encapsulated search operation of the module
`AllSolutions`, it is considered as deterministic.
For instance, consider the operations
last xs | _ ++ [x] == xs = x where x free
coin = 0 ? 1
lastCoin = id (last [coin])
Then the operation `lastCoin` depends on the non-deterministic
operations `last` and `coin`. Now consider the operations
f x = x ? lastCoin
g x = f x
Then the operation `g` depends on the non-deterministic operation `f`,
and also on the non-deterministic operations `last` and `coin`.
In the long analysis output (produced by CASS in batch mode),
the non-deterministic operations are shown together with
the sequence of operations (limited to a length of 10)
which calls the non-deterministic operation.