implementations can run with both concrete and symbolic implementations of cryptographic
algorithms. The concrete implementation is for production and interoperability testing. The
symbolic implementation is for debugging and formal verification. We develop our approach
for protocols written in F#, a dialect of ML, and verify them by compilation to ProVerif, a
resolution-based theorem prover for cryptographic protocols. We establish the correctness of …