/*
This rule looks for a non-reverting execution path to each method, including those overridden in the harness.
A method has such an execution path if it violates this rule.
How it works:
    - If there is a non-reverting execution path, we reach the false assertion, and the sanity fails.
    - If all execution paths are reverting, we never call the assertion, and the method will pass this rule vacuously.
*/


rule sanity(method f) {
    env e;
    calldataarg arg;
    f(e, arg);
    assert false;
}