Zaslat SMS: Verifying Higher-Order Functional Programs with Pattern-Matching Algebraic Data Types