Computational lambda-calculus and monads
Proceedings of the Fourth Annual Symposium on Logic in computer science
Predicate calculus and program semantics
Predicate calculus and program semantics
Attribute grammar paradigms—a high-level methodology in language implementation
ACM Computing Surveys (CSUR)
Monad transformers and modular interpreters
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Semantic Lego
Composing monads using coproducts
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Trustworthy Tools for Trustworthy Programs: A Verified Verification Condition Generator
Proceedings of the 7th International Workshop on Higher Order Logic Theorem Proving and Its Applications
Proceedings of the 1992 Glasgow Workshop on Functional Programming
Monad-independent Dynamic Logic in HasCasl
Journal of Logic and Computation
Hi-index | 0.00 |
Current mechanizations of programming logics are often in the form of verification condition generators. These front ends to a prover translate a program and assertions into conditions that state that the program fulfills its assertions. Traditional verification condition generators are monolithic encapsulations of a programming language's semantics. This makes it hard to build such verification generators when designing a new language, or when extending a language. We propose a more compositional method of building verification condition generators, using ideas from monadic denotational semantics and from generic programming. Our technique allows us to extend an existing verification condition generator to handle new language constructs, but also to add extensions at another level, such as the ability to generate validation traces. We explain the technique through an example, extending a simple while language with a construct for exception handling. This construct not only needs an extension to the logic, but also a change of its structure.