and Back Again -- Types and Recursion Schemes for Higher-Order Program Verification --