English

HMC: Verifying Functional Programs Using Abstract Interpreters

Programming Languages 2011-01-04 v2 Logic in Computer Science

Abstract

We present Hindley-Milner-Cousots (HMC), an algorithm that allows any interprocedural analysis for first-order imperative programs to be used to verify safety properties of typed higher-order functional programs. HMC works as follows. First, it uses the type structure of the functional program to generate a set of logical refinement constraints whose satisfaction implies the safety of the source program. Next, it transforms the logical refinement constraints into a simple first-order imperative program that is safe iff the constraints are satisfiable. Thus, in one swoop, HMC makes tools for invariant generation, e.g., based on abstract domains, predicate abstraction, counterexample-guided refinement, and Craig interpolation be directly applicable to verify safety properties of modern functional languages in a fully automatic manner. We have implemented HMC and describe preliminary experimental results using two imperative checkers -- ARMC and InterProc -- to verify OCaml programs. Thus, by composing type-based reasoning grounded in program syntax and state-based reasoning grounded in abstract interpretation, HMC opens the door to automatic verification of programs written in modern programming languages.

Keywords

Cite

@article{arxiv.1004.2884,
  title  = {HMC: Verifying Functional Programs Using Abstract Interpreters},
  author = {Ranjit Jhala and Rupak Majumdar and Andrey Rybalchenko},
  journal= {arXiv preprint arXiv:1004.2884},
  year   = {2011}
}

Comments

12 pages

R2 v1 2026-06-21T15:11:17.910Z