7,134 research outputs found
On Verifying Causal Consistency
Causal consistency is one of the most adopted consistency criteria for
distributed implementations of data structures. It ensures that operations are
executed at all sites according to their causal precedence. We address the
issue of verifying automatically whether the executions of an implementation of
a data structure are causally consistent. We consider two problems: (1)
checking whether one single execution is causally consistent, which is relevant
for developing testing and bug finding algorithms, and (2) verifying whether
all the executions of an implementation are causally consistent.
We show that the first problem is NP-complete. This holds even for the
read-write memory abstraction, which is a building block of many modern
distributed systems. Indeed, such systems often store data in key-value stores,
which are instances of the read-write memory abstraction. Moreover, we prove
that, surprisingly, the second problem is undecidable, and again this holds
even for the read-write memory abstraction. However, we show that for the
read-write memory abstraction, these negative results can be circumvented if
the implementations are data independent, i.e., their behaviors do not depend
on the data values that are written or read at each moment, which is a
realistic assumption.Comment: extended version of POPL 201
Total Haskell is Reasonable Coq
We would like to use the Coq proof assistant to mechanically verify
properties of Haskell programs. To that end, we present a tool, named
hs-to-coq, that translates total Haskell programs into Coq programs via a
shallow embedding. We apply our tool in three case studies -- a lawful Monad
instance, "Hutton's razor", and an existing data structure library -- and prove
their correctness. These examples show that this approach is viable: both that
hs-to-coq applies to existing Haskell code, and that the output it produces is
amenable to verification.Comment: 13 pages plus references. Published at CPP'18, In Proceedings of 7th
ACM SIGPLAN International Conference on Certified Programs and Proofs
(CPP'18). ACM, New York, NY, USA, 201
Contradiction-tolerant process algebra with propositional signals
In a previous paper, an ACP-style process algebra was proposed in which
propositions are used as the visible part of the state of processes and as
state conditions under which processes may proceed. This process algebra,
called ACPps, is built on classical propositional logic. In this paper, we
present a version of ACPps built on a paraconsistent propositional logic which
is essentially the same as CLuNs. There are many systems that would have to
deal with self-contradictory states if no special measures were taken. For a
number of these systems, it is conceivable that accepting self-contradictory
states and dealing with them in a way based on a paraconsistent logic is an
alternative to taking special measures. The presented version of ACPps can be
suited for the description and analysis of systems that deal with
self-contradictory states in a way based on the above-mentioned paraconsistent
logic.Comment: 25 pages; 26 pages, occurrences of wrong symbol for bisimulation
equivalence replaced; 26 pages, Proposition 1 added; 27 pages, explanation of
the phrase 'in contradiction' added to section 2 and presentation of the
completeness result in section 2 improved; 27 pages, uniqueness result in
section 2 revised; 27 pages, last paragraph of section 8 revise
- …