One of the goals of this paper is to demonstrate that denotational semantics is useful
for operational issues like implementation of functional languages by abstract machines.
This is exemplified in a tutorial way by studying the case of extensional untyped call-by-name
λ-calculus with Felleisen's control operator [Cscr ].
We derive the transition rules for an
abstract machine from a continuation semantics which appears as a generalization of the
¬¬-translation known from logic. The resulting abstract machine
appears as an extension of Krivine's machine implementing head reduction. Though
the result, namely Krivine's machine,
is well known our method of deriving it from continuation semantics is new and applicable to
other languages (as e.g. call-by-value variants). Further new results
are that Scott's D∞-models
are all instances of continuation models. Moreover, we extend our continuation semantics to
Parigot's λμ-calculus from which we derive an extension of Krivine's
machine for λμ-calculus. The relation between continuation semantics
and the abstract machines is made precise by
proving computational adequacy results employing an elegant method introduced by Pitts.
Over the last decade, there has been extensive research on modelling challenging features in programming languages and program logics, such as higher-order store and storable resource invariants. A recent line of work has identified a common solution to some of these challenges: Kripke models over worlds that are recursively defined in a category of metric spaces. In this paper, we broaden the scope of this technique from the original domain-theoretic setting to an elementary, operational one based on step indexing. The resulting method is widely applicable and leads to simple, succinct models of complicated language features, as we demonstrate in our semantics of Charguéraud and Pottier's type-and-capability system for an ML-like higher-order language. Moreover, the method provides a high-level understanding of the essence of recent approaches based on step indexing.
Abstract. Separation logic is a Hoare-style logic for reasoning about programs with heap-allocated mutable data structures. As a step toward extending separation logic to high-level languages with ML-style general (higher-order) storage, we investigate the compatibility of nested Hoare triples with several variations of higher-order frame rules.The interaction of nested triples and frame rules can be subtle, and the inclusion of certain frame rules is in fact unsound. A particular combination of rules can be shown consistent by means of a Kripke model where worlds live in a recursively defined ultrametric space. The resulting logic allows us to elegantly prove programs involving stored code. In particular, using recursively defined assertions, it leads to natural specifications and proofs of invariants required for dealing with recursion through the store.
We present the first complete soundness proof of the antiframe rule, a recently proposed proof rule for capturing information hiding in the presence of higher-order store. Our proof involves solving a non-trivial recursive domain equation, and it helps identify some of the key ingredients for soundness.
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.