Formal Methods and Functional Programming