https://9dok.net/document/qvl8m6ld-verification-of-second-order-functional-programs.html