We present an environment for proving correctness of mutually recursive functional programs. As usual, correctness is transformed into a set of first-order predicate logic formulae-verification conditions. As a distinctive feature of our method, these formulae are not only sufficient, but also necessary for the correctness.