Try decomposing each possibly interdependent utility into simpler sub-functions until you are able to layer them such that no lower-level sub-function could ever need a higher-level sub-function. Then recombine them into objects each containing closely-related member functions that no other object would need except perhaps for the top-level entry point function. This reduces the possibility of circularity as the software and the use of it evolve over time.
This arrangement may change as the software develops. Rather than trying to prove independence, let the software evolve as it grows and is tested and used over time. You might otherwise be trying in some cases to prove the unprovable.