Verifying Object-Oriented Programs With Higher-Order Separation Logic in Coq
The authors present a shallow Coq embedding of a higher-order separation logic with nested triples for an object-oriented programming language. Moreover, they develop novel specification and proof patterns for reasoning in higher-order separation logic with nested triples about programs that use interfaces and interface inheritance. In particular, they show how to use the higher-order features of the Coq formalisation to specify and reason modularly about programs that depend on some unknown code satisfying a specification or that return objects conforming to a certain specification. All of their results have been formally verified in the interactive theorem prover Coq.