4,000 research outputs found
On correctness of buffer implementations in a concurrent lambda calculus with futures
Motivated by the question of correctness of a specific implementation of concurrent buffers in the lambda calculus with futures underlying Alice ML, we prove that concurrent buffers and handled futures can correctly encode each other. Correctness means that our encodings preserve and reflect the observations of may- and must-convergence. This also shows correctness wrt. program semantics, since the encodings are adequate translations wrt. contextual semantics. While these translations encode blocking into queuing and waiting, we also provide an adequate encoding of buffers in a calculus without handles, which is more low-level and uses busy-waiting instead of blocking. Furthermore we demonstrate that our correctness concept applies to the whole compilation process from high-level to low-level concurrent languages, by translating the calculus with buffers, handled futures and data constructors into a small core language without those constructs
Formal verification in Coq of program properties involving the global state effect
The syntax of an imperative language does not mention explicitly the state,
while its denotational semantics has to mention it. In this paper we present a
framework for the verification in Coq of properties of programs manipulating
the global state effect. These properties are expressed in a proof system which
is close to the syntax, as in effect systems, in the sense that the state does
not appear explicitly in the type of expressions which manipulate it. Rather,
the state appears via decorations added to terms and to equations. In this
system, proofs of programs thus present two aspects: properties can be verified
{\em up to effects} or the effects can be taken into account. The design of our
Coq library consequently reflects these two aspects: our framework is centered
around the construction of two inductive and dependent types, one for terms up
to effects and one for the manipulation of decorations
Implementing and reasoning about hash-consed data structures in Coq
We report on four different approaches to implementing hash-consing in Coq
programs. The use cases include execution inside Coq, or execution of the
extracted OCaml code. We explore the different trade-offs between faithful use
of pristine extracted code, and code that is fine-tuned to make use of OCaml
programming constructs not available in Coq. We discuss the possible
consequences in terms of performances and guarantees. We use the running
example of binary decision diagrams and then demonstrate the generality of our
solutions by applying them to other examples of hash-consed data structures
On proving the equivalence of concurrency primitives
Various concurrency primitives have been added to sequential programming languages, in order to turn them concurrent. Prominent examples are concurrent buffers for Haskell, channels in Concurrent ML, joins in JoCaml, and handled futures in Alice ML. Even though one might conjecture that all these primitives provide the same expressiveness, proving this equivalence is an open challenge in the area of program semantics. In this paper, we establish a first instance of this conjecture. We show that concurrent buffers can be encoded in the lambda calculus with futures underlying Alice ML. Our correctness proof results from a systematic method, based on observational semantics with respect to may and must convergence
Structure and Properties of Traces for Functional Programs
The tracer Hat records in a detailed trace the computation of a program written in the lazy functional language Haskell. The trace can then be viewed in various ways to support program comprehension and debugging. The trace was named the augmented redex trail. Its structure was inspired by standard graph rewriting implementations of functional languages. Here we describe a model of the trace that captures its essential properties and allows formal reasoning. The trace is a graph constructed by graph rewriting but goes beyond simple term graphs. Although the trace is a graph whose structure is independent of any rewriting strategy, we define the trace inductively, thus giving us a powerful method for proving its properties
Structural Induction Principles for Functional Programmers
User defined recursive types are a fundamental feature of modern functional
programming languages like Haskell, Clean, and the ML family of languages.
Properties of programs defined by recursion on the structure of recursive types
are generally proved by structural induction on the type. It is well known in
the theorem proving community how to generate structural induction principles
from data type declarations. These methods deserve to be better know in the
functional programming community. Existing functional programming textbooks
gloss over this material. And yet, if functional programmers do not know how to
write down the structural induction principle for a new type - how are they
supposed to reason about it? In this paper we describe an algorithm to generate
structural induction principles from data type declarations. We also discuss
how these methods are taught in the functional programming course at the
University of Wyoming. A Haskell implementation of the algorithm is included in
an appendix.Comment: In Proceedings TFPIE 2013, arXiv:1312.221
Open Transactions on Shared Memory
Transactional memory has arisen as a good way for solving many of the issues
of lock-based programming. However, most implementations admit isolated
transactions only, which are not adequate when we have to coordinate
communicating processes. To this end, in this paper we present OCTM, an
Haskell-like language with open transactions over shared transactional memory:
processes can join transactions at runtime just by accessing to shared
variables. Thus a transaction can co-operate with the environment through
shared variables, but if it is rolled-back, also all its effects on the
environment are retracted. For proving the expressive power of TCCS we give an
implementation of TCCS, a CCS-like calculus with open transactions
- …