3 research outputs found
Reaching for the Star: Tale of a Monad in Coq
Monadic programming is an essential component in the toolbox of functional programmers. For the pure and total programmers, who sometimes navigate the waters of certified programming in type theory, it is the only means to concisely implement the imperative traits of certain algorithms. Monads open up a portal to the imperative world, all that from the comfort of the functional world. The trend towards certified programming within type theory begs the question of reasoning about such programs. Effectful programs being encoded as pure programs in the host type theory, we can readily manipulate these objects through their encoding. In this article, we pursue the idea, popularized by Maillard [Kenji Maillard, 2019], that every monad deserves a dedicated program logic and that, consequently, a proof over a monadic program ought to take place within a Floyd-Hoare logic built for the occasion. We illustrate this vision through a case study on the SimplExpr module of CompCert [Xavier Leroy, 2009], using a separation logic tailored to reason about the freshness of a monadic gensym
Refactoring proofs
Refactoring is an important Software Engineering technique for improving the structure
of a program after it has been written. Refactorings improve the maintainability,
readability, and design of a program without affecting its external behaviour. In analogy,
this thesis introduces proof refactoring to make structured, semantics preserving
changes to the proof documents constructed by interactive theorem provers as part
of a formal proof development.
In order to formally study proof refactoring, the first part of this thesis constructs
a proof language framework, Hiscript. The Hiscript framework consists of a procedural
tactic language, a declarative proof language, and a modular theory language. Each
level of this framework is equipped with a formal semantics based on a hierarchical
notion of proof trees. Furthermore, this framework is generic as it does not prescribe
an underlying logical kernel. This part contributes an investigation of semantics for
formal proof documents, which is proved to construct valid proofs. Moreover, in analogy
with type-checking, static well-formedness checks of proof documents are separated
from evaluation of the proof. Furthermore, a subset of the SSReflect language
for Coq, called eSSence, is also encoded using hierarchical proofs. Both Hiscript and
eSSence are shown to have language elements with a natural hierarchical representation.
In the second part, proof refactoring is put on a formal footing with a definition
using the Hiscript framework. Over thirty refactorings are formally specified and
proved to preserve the semantics in a precise way for the Hiscript language, including
traditional structural refactorings, such as rename item, and proof specific refactorings
such as backwards proof to forwards proof and declarative to procedural. Finally, a concrete,
generic refactoring framework, called Polar, is introduced. Polar is based on graph
rewriting and has been implemented with over ten refactorings and for two proof
languages, including Hiscript.
Finally, the third part concludes with some wishes for the future