459 research outputs found
Finite transducers for divisibility monoids
Divisibility monoids are a natural lattice-theoretical generalization of
Mazurkiewicz trace monoids, namely monoids in which the distributivity of the
involved divisibility lattices is kept as an hypothesis, but the relations
between the generators are not supposed to necessarily be commutations. Here,
we show that every divisibility monoid admits an explicit finite transducer
which allows to compute normal forms in quadratic time. In addition, we prove
that every divisibility monoid is biautomatic.Comment: 20 page
Computation in Finitary Stochastic and Quantum Processes
We introduce stochastic and quantum finite-state transducers as
computation-theoretic models of classical stochastic and quantum finitary
processes. Formal process languages, representing the distribution over a
process's behaviors, are recognized and generated by suitable specializations.
We characterize and compare deterministic and nondeterministic versions,
summarizing their relative computational power in a hierarchy of finitary
process languages. Quantum finite-state transducers and generators are a first
step toward a computation-theoretic analysis of individual, repeatedly measured
quantum dynamical systems. They are explored via several physical systems,
including an iterated beam splitter, an atom in a magnetic field, and atoms in
an ion trap--a special case of which implements the Deutsch quantum algorithm.
We show that these systems' behaviors, and so their information processing
capacity, depends sensitively on the measurement protocol.Comment: 25 pages, 16 figures, 1 table; http://cse.ucdavis.edu/~cmg; numerous
corrections and update
Monoid automata for displacement context-free languages
In 2007 Kambites presented an algebraic interpretation of
Chomsky-Schutzenberger theorem for context-free languages. We give an
interpretation of the corresponding theorem for the class of displacement
context-free languages which are equivalent to well-nested multiple
context-free languages. We also obtain a characterization of k-displacement
context-free languages in terms of monoid automata and show how such automata
can be simulated on two stacks. We introduce the simultaneous two-stack
automata and compare different variants of its definition. All the definitions
considered are shown to be equivalent basing on the geometric interpretation of
memory operations of these automata.Comment: Revised version for ESSLLI Student Session 2013 selected paper
Refunctionalization at Work
We present the left inverse of Reynolds's defunctionalization and we show its relevance to programming and to programming languages. We present two methods to put a program that is almost in defunctionalized form into one that is actually in defunctionalized form, and we illustrate them with a recognizer for Dyck words and with Dijkstra's shunting-yard algorithm
A Simple Application of Lightweight Fusion to Proving the Equivalence of Abstract Machines
We show how Ohori and Sasano's recent lightweight fusion by fixed-point promotion provides a simple way to prove the equivalence of the two standard styles of specification of abstract machines: (1) as a transition function together with a `driver loop' implementing the iteration of this transition function; and (2) as a function directly iterating upon a configuration until reaching a final state, if ever. The equivalence hinges on the fact that the latter style of specification is a fused version of the former one. The need for such a simple proof is motivated by our recent work on syntactic correspondences between reduction semantics and abstract machines, using refocusing
Mapping programs to equations
Extracting the function of a program from a static analysis of its source code is a valuable capability in software engineering; at a time when there is increasing talk of using AI (Artificial Intelligence) to generate software from natural language specifications, it becomes increasingly important to determine the exact function of software as written, to figure out what AI has understood the natural language specification to mean. For all its criticality, the ability to derive the domain-to-range function of a program has proved to be an elusive goal, due primarily to the difficulty of deriving the function of iterative statements. Several automated tools obviate this difficulty by unrolling the loops; but this is clearly an imperfect solution, especially in light of the fact that loops capture most of the computing power of a program, are the locus of most of its complexity, and the source of most of its faults. This dissertation investigates a three-step process to map a program written in a C-like language into a function from inputs to outputs, or from initial states to final states. The semantics of iterative statements are captured (while loops, repeat loops, for loops), including nested iterative statements, by means of the concept of invariant relation; an invariant relation is a reflexive transitive relation that links program states separated by an arbitrary number of iterations.
But the function derived for large and complex programs may be too unwieldy to be useful, not unlike drinking from a fire hose. In order to enable the user to query the program at scale, four functions are proposed. We propose four functions: Assume(), which enables the user to make assumptions about program states or program parts; Capture(), which enables the user to capture the state of the program at some label of the function of some program part; Verify(), which enables the user to verify a unary assertion about the state of the program at some label, or a binary assertion about a program part; and Establish(), which is envisioned to use program repair techniques to modify the program so as to make a Verify() query return true
- …