Verifying a hash table and its iterators in higher-order separation logic

We describe the specification and proof of an (imperative, sequential) hash table implementation. The usual dictionary operations (insertion, lookup, and so on) are supported, as well as iteration via folds and iterators. The code is written in OCaml and verified using higher-order separation logic, embedded in Coq, via the CFML tool and library. This case study is part of a larger project that aims to build a verified OCaml library of basic data structures.

[1]  Peter Lammich,et al.  Refinement based verification of imperative data structures , 2016, CPP.

[2]  Gavin M. Bierman,et al.  Separation logic and abstraction , 2005, POPL '05.

[3]  Xavier Leroy,et al.  A Formally-Verified C Static Analyzer , 2015, POPL.

[4]  Jean-Christophe Filliâtre,et al.  Backtracking iterators , 2006, ML '06.

[5]  Ramana Kumar,et al.  A new verified compiler backend for CakeML , 2016, ICFP.

[6]  Deepak Goyal,et al.  Deriving specialized program analyses for certifying component-client conformance , 2002, PLDI '02.

[7]  Alfredo Pironti,et al.  Implementing TLS with Verified Cryptographic Security , 2013, 2013 IEEE Symposium on Security and Privacy.

[8]  Peter Lammich,et al.  Automatic Data Refinement , 2013, ITP.

[9]  Tobias Nipkow,et al.  A Fully Verified Executable LTL Model Checker , 2013, CAV.

[10]  Jean-Christophe Filliâtre,et al.  Functors for Proofs and Programs , 2004, ESOP.

[11]  Barbara Liskov,et al.  Program Development in Java - Abstraction, Specification, and Object-Oriented Design , 1986 .

[12]  Christian Haack,et al.  Resource Usage Protocols for Iterators , 2009, J. Object Technol..

[13]  Lars Birkedal,et al.  Abstract Predicates and Mutable ADTs in Hoare Type Theory , 2007, ESOP.

[14]  Jean-Christophe Filliâtre,et al.  A Modular Way to Reason About Iteration , 2016, NFM.

[15]  Jean-Christophe Filliâtre,et al.  How to Avoid Proving the Absence of Integer Overflows , 2015, VSTTE.

[16]  Yann Régis-Gianas,et al.  A Hoare Logic for Call-by-Value Functional Programs , 2008, MPC.

[17]  Peter Lammich,et al.  The Isabelle Collections Framework , 2010, ITP.

[18]  Rene Meis,et al.  A Separation Logic Framework for Imperative HOL , 2012, Arch. Formal Proofs.

[19]  Graham Hutton,et al.  A tutorial on the universality and expressiveness of fold , 1999, Journal of Functional Programming.

[20]  Lars Birkedal,et al.  Ynot: dependent types for imperative programs , 2008, ICFP 2008.

[21]  Nadia Polikarpova,et al.  Formal Aspects of Computing Formal Aspects of Computing A fully verified container library , 2017 .

[22]  Michael Norrish,et al.  seL4: formal verification of an operating-system kernel , 2010, Commun. ACM.

[23]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

[24]  Andreas Lochbihler,et al.  Light-Weight Containers for Isabelle: Efficient, Extensible, Nestable , 2013, ITP.

[25]  Arthur Charguéraud,et al.  Characteristic formulae for the verification of imperative programs , 2011, ICFP.

[26]  Lars Birkedal,et al.  Design patterns in separation logic , 2009, TLDI '09.

[27]  Peter Lammich,et al.  Refinement to Imperative HOL , 2015, Journal of Automated Reasoning.

[28]  Simon L. Peyton Jones,et al.  A history of Haskell: being lazy with class , 2007, HOPL.

[29]  Xavier Leroy,et al.  Formal certification of a compiler back-end or: programming a compiler with a proof assistant , 2006, POPL '06.

[30]  C. A. R. Hoare,et al.  An axiomatic basis for computer programming , 1969, CACM.