Specifying, Programming and Verifying with Equational Logic