Abstraction As The Key To Programming, With Issues For Software Verification In Functional Languages