25 research outputs found
Parikh's Theorem: A simple and direct automaton construction
Parikh's theorem states that the Parikh image of a context-free language is
semilinear or, equivalently, that every context-free language has the same
Parikh image as some regular language. We present a very simple construction
that, given a context-free grammar, produces a finite automaton recognizing
such a regular language.Comment: 12 pages, 3 figure
Approximating Petri Net Reachability Along Context-free Traces
We investigate the problem asking whether the intersection of a context-free
language (CFL) and a Petri net language (PNL) is empty. Our contribution to
solve this long-standing problem which relates, for instance, to the
reachability analysis of recursive programs over unbounded data domain, is to
identify a class of CFLs called the finite-index CFLs for which the problem is
decidable. The k-index approximation of a CFL can be obtained by discarding all
the words that cannot be derived within a budget k on the number of occurrences
of non-terminals. A finite-index CFL is thus a CFL which coincides with its
k-index approximation for some k. We decide whether the intersection of a
finite-index CFL and a PNL is empty by reducing it to the reachability problem
of Petri nets with weak inhibitor arcs, a class of systems with infinitely many
states for which reachability is known to be decidable. Conversely, we show
that the reachability problem for a Petri net with weak inhibitor arcs reduces
to the emptiness problem of a finite-index CFL intersected with a PNL.Comment: 16 page
Underapproximation of Procedure Summaries for Integer Programs
We show how to underapproximate the procedure summaries of recursive programs
over the integers using off-the-shelf analyzers for non-recursive programs. The
novelty of our approach is that the non-recursive program we compute may
capture unboundedly many behaviors of the original recursive program for which
stack usage cannot be bounded. Moreover, we identify a class of recursive
programs on which our method terminates and returns the precise summary
relations without underapproximation. Doing so, we generalize a similar result
for non-recursive programs to the recursive case. Finally, we present
experimental results of an implementation of our method applied on a number of
examples.Comment: 35 pages, 3 figures (this report supersedes the STTT version which in
turn supersedes the TACAS'13 version
Algorithmic Verification of Asynchronous Programs
Asynchronous programming is a ubiquitous systems programming idiom to manage
concurrent interactions with the environment. In this style, instead of waiting
for time-consuming operations to complete, the programmer makes a non-blocking
call to the operation and posts a callback task to a task buffer that is
executed later when the time-consuming operation completes. A co-operative
scheduler mediates the interaction by picking and executing callback tasks from
the task buffer to completion (and these callbacks can post further callbacks
to be executed later). Writing correct asynchronous programs is hard because
the use of callbacks, while efficient, obscures program control flow.
We provide a formal model underlying asynchronous programs and study
verification problems for this model. We show that the safety verification
problem for finite-data asynchronous programs is expspace-complete. We show
that liveness verification for finite-data asynchronous programs is decidable
and polynomial-time equivalent to Petri Net reachability. Decidability is not
obvious, since even if the data is finite-state, asynchronous programs
constitute infinite-state transition systems: both the program stack and the
task buffer of pending asynchronous calls can be potentially unbounded.
Our main technical construction is a polynomial-time semantics-preserving
reduction from asynchronous programs to Petri Nets and conversely. The
reduction allows the use of algorithmic techniques on Petri Nets to the
verification of asynchronous programs.
We also study several extensions to the basic models of asynchronous programs
that are inspired by additional capabilities provided by implementations of
asynchronous libraries, and classify the decidability and undecidability of
verification questions on these extensions.Comment: 46 pages, 9 figure
A Type Checking Algorithm for Concurrent Object Protocols
Concurrent objects can be accessed and possibly modified concurrently by several running processes. It is notoriously difficult to make sure that such objects are consistent with â and are used according to â their intended protocol. In this paper we detail a type checking algorithm for concurrent objects protocols that provides automated support for this verification task. We model concurrent objects in the Objective Join Calculus and specify protocols using terms of a Commutative Kleene Algebra. The presented results are an essential first step towards the application of this static analysis technique to real-world programs
Polynomial Time Convergence of the Iterative Evaluation of Datalogo Programs
Datalogo is an extension of Datalog that allows for aggregation and recursion
over an arbitrary commutative semiring. Like Datalog, Datalogo programs can be
evaluated via the natural iterative algorithm until a fixed point is reached.
However unlike Datalog, the natural iterative evaluation of some Datalogo
programs over some semirings may not converge. It is known that the commutative
semirings for which the iterative evaluation of Datalogo programs is guaranteed
to converge are exactly those semirings that are stable [7]. Previously, the
best known upper bound on the number of iterations until convergence over
-stable semirings is steps, where
is (essentially) the output size. We establish that, in fact, the natural
iterative evaluation of a Datalogoprogram over a -stable semiring converges
within a polynomial number of iterations. In particular our upper bound is where is the number of
elements in the semiring present in either the input databases or the Datalogo
program, and is the maximum number of terms in any product in the
Datalogo program
On the Convergence Rate of Linear Datalogo over Stable Semirings
Datalogo is an extension of Datalog, where instead of a program being a
collection of union of conjunctive queries over the standard Boolean semiring,
a program may now be a collection of sum-sum-product queries over an arbitrary
commutative partially ordered pre-semiring. Datalogo is more powerful than
Datalog in that its additional algebraic structure alows for supporting
recursion with aggregation. At the same time, Datalogo retains the syntactic
and semantic simplicity of Datalog: Datalogo has declarative least fixpoint
semantics. The least fixpoint can be found via the na\"ive evaluation algorithm
that repeatedly applies the immediate sequence opeator until no further change
is possible.
It was shown that, when the underlying semiring is -stable, then the naive
evaluation of any Datalogo program over the semiring converges in a finite
number of steps. However, the upper bounds on the rate of convergence were
exponential in the number of ground IDB atoms.
This paper establishes polynomial upper bounds on the convergence rate of the
na\"ive algorithm on {\bf linear} Datalogo programs, which is quite common in
practice. In particular, the main result of this paper is that the convergence
rate of linear Datalogo programs under any -stable semiring is .
Furthermore, we show a matching lower bound by constructing a -stable
semiring and a linear Datalogo program that requires iterations
for the na\"ive iteration algorithm to converge. Next, we study the convergence
rate in terms of the number of elements in the semiring for linear Datalogo
programs. When is the number of elements, the convergence rate is bounded
by . This significantly improves the convergence rate for small
. We show a nearly matching lower bound as well