Results 1 - 10
of
14
Efficient optimistic parallel simulations using reverse computation
- ACM Transactions on Modeling and Computer Simulation
, 1999
"... ..."
The Universal Resolving Algorithm: Inverse Computation in a Functional Language
- in Mathematics of Program Construction. Proceedings
, 2000
"... We present an algorithm for inverse computation in a first-order functional language based on the notion of a perfect process tree. The Universal Resolving Algorithm (URA) introduced in this paper is sound and complete, and computes each solution, if it exists, in finite time. The algorithm has been ..."
Abstract
-
Cited by 18 (3 self)
- Add to MetaCart
We present an algorithm for inverse computation in a first-order functional language based on the notion of a perfect process tree. The Universal Resolving Algorithm (URA) introduced in this paper is sound and complete, and computes each solution, if it exists, in finite time. The algorithm has been implemented for TSG, a typed dialect of S-Graph, and shows some remarkable results for the inverse computation of functional programs such as pattern matching and the inverse interpretation of While-programs.
NREVERSAL of Fortune -- The Thermodynamics of Garbage Collection
- In ACM Sigplan Notices
, 1977
"... The need to reverse a computation arises in many contexts---debugging, editor undoing, optimistic concurrency undoing, speculative computation undoing, trace scheduling, exception handling undoing, database recovery, optimistic discrete event simulations, subjunctive computing, etc. The need to anal ..."
Abstract
-
Cited by 13 (0 self)
- Add to MetaCart
The need to reverse a computation arises in many contexts---debugging, editor undoing, optimistic concurrency undoing, speculative computation undoing, trace scheduling, exception handling undoing, database recovery, optimistic discrete event simulations, subjunctive computing, etc. The need to analyze a reversed computation arises in the context of static analysis---liveness analysis, strictness analysis, type inference, etc. Traditional means for restoring a computation to a previous state involve checkpoints; checkpoints require time to copy, as well as space to store, the copied material. Traditional reverse abstract interpretation produces relatively poor information due to its inability to guess the previous values of assigned-to variables. We propose an abstract computer model and a programming language---Y-Lisp---whose primitive operations are injective and hence reversible, thus allowing arbitrary undoing without the overheads of checkpointing. Such a computer can be built from reversible conservative logic circuits, with the serendipitous advantage of dissipating far less heat than traditional Boolean AND/OR/NOT circuits. Unlike functional languages, which have one "state " for all times, Y-Lisp has at all times one "state", with unique predecessor and successor states. Compiling into a reversible pseudocode can have benefits even when targeting a traditional computer. Certain optimizations, e.g., update-in-place, and compile-time garbage collection may be more easily performed, because the
Principles of Inverse Computation and the Universal Resolving Algorithm
- IN THE ESSENCE OF COMPUTATION: COMPLEXITY, ANALYSIS, TRANSFORMATION
, 2002
"... We survey fundamental concept in inverse programming and present the Universal Resolving Algorithm (URA), an algorithm for inverse computation in a first-order, functional programming language. We discusst he principles behind the algorithm, including a three-step approach based on the notion of a p ..."
Abstract
-
Cited by 12 (2 self)
- Add to MetaCart
We survey fundamental concept in inverse programming and present the Universal Resolving Algorithm (URA), an algorithm for inverse computation in a first-order, functional programming language. We discusst he principles behind the algorithm, including a three-step approach based on the notion of a perfect process tree, and demonstrate our implementation with several examples. We explaint he idea of a semantics modifier for inverse computation which allows us to perform inverse computation in other programming languages via interpreters.
From Kleene Algebra to Refinement Algebra
, 2002
"... KAT (Kleene Algebra with Tests) have proved to be useful for reasoning about programs in a partial correctness framework. We describe DRA (demonic Refinement Algebra), a variation of KAT for total correctness and illustrate its modeling and reasoning power with a number of applications and examples. ..."
Abstract
-
Cited by 11 (0 self)
- Add to MetaCart
KAT (Kleene Algebra with Tests) have proved to be useful for reasoning about programs in a partial correctness framework. We describe DRA (demonic Refinement Algebra), a variation of KAT for total correctness and illustrate its modeling and reasoning power with a number of applications and examples.
Compositional Analysis of Dynamical Systems using Predicate Transformers (Summary).
, 1993
"... Introduction We propose a complementary approach to discrete dynamical systems, using predicate transformers. We present general concepts like invariance and attraction, and we propose properties to characterize the structure of invariants. Then we present the concept of composition of dynamical sy ..."
Abstract
-
Cited by 10 (7 self)
- Add to MetaCart
Introduction We propose a complementary approach to discrete dynamical systems, using predicate transformers. We present general concepts like invariance and attraction, and we propose properties to characterize the structure of invariants. Then we present the concept of composition of dynamical systems. We define algebraic operators on systems and we try to discover how dynamical properties of small systems are preserved or transformed when these are composed into more complex systems. Finally, we illustrate this approach on an example. We work with a space E (e.g. N, or R), and extend functions from E to E into functions PE ! PE, which are invertible. Any subset of E can be described by a predicate. For example, an interval [a; b] ` R is defined by the predicate P (x) =
Running Programs Backwards: the Logical Inversion of Imperative
, 2003
"... Imperative programs can be inverted directly from their forward-directed program code with the use of logical inference. The relational semantics of imperative computations treats programs as logical relations over the observable state of the environment, which is taken to be the state of the variab ..."
Abstract
-
Cited by 9 (0 self)
- Add to MetaCart
Imperative programs can be inverted directly from their forward-directed program code with the use of logical inference. The relational semantics of imperative computations treats programs as logical relations over the observable state of the environment, which is taken to be the state of the variables in memory. Program relations denote both forward and backward computations, and the direction of the computation depends upon the instantiation pattern of arguments in the relation. This view of inversion has practical applications when the relational semantics is treated as a logic program. Depending on the logic programming inference scheme used, execution of this relational program can compute the inverse of the imperative program. A number of nontrivial imperative computations can be inverted with minimal logic programming tools.
Statement inversion and strongest postcondition
- Science of Computer Programming
, 1993
"... A notion of inverse commands is de ned for a language with a weakest precondition semantics, permitting both demonic and angelic nondeterminism as well as miracles and nontermination. Every conjunctive and terminating command is invertible, the inverse being non-miraculous and disjunctive. A simulat ..."
Abstract
-
Cited by 8 (2 self)
- Add to MetaCart
A notion of inverse commands is de ned for a language with a weakest precondition semantics, permitting both demonic and angelic nondeterminism as well as miracles and nontermination. Every conjunctive and terminating command is invertible, the inverse being non-miraculous and disjunctive. A simulation relation between commands is described using inverse commands. A generalized form of inverse is de ned for arbitrary conjunctive commands. The generalized inverses are shown to be closely related to strongest postconditions. 1
Inverting Functions as Folds
- Mathematics of Program Construction. Proceedings, LNCS 2386
, 2002
"... This paper describes a technique for constructing the inverse of a partial function as a relational hylomorphism. When the function is total, the inverse is expressed as a relational fold. If the inverse is required to satisfy additional properties, the non-determinism in the relational fold can be ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
This paper describes a technique for constructing the inverse of a partial function as a relational hylomorphism. When the function is total, the inverse is expressed as a relational fold. If the inverse is required to satisfy additional properties, the non-determinism in the relational fold can be eliminated by appeal to fusion. The technique is illustrated with three examples, all dealing with constructing trees satisfying certain constraints.
There and back again: arrows for invertible programming
- In Proceedings of the 2005 ACM SIGPLAN workshop on Haskell
, 2006
"... Invertible programming occurs in the area of data conversion where it is required that the conversion in one direction is the inverse of the other. For that purpose, we introduce bidirectional arrows (biarrows). The bi-arrow class is an extension of Haskell’s arrow class with an extra combinator tha ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
Invertible programming occurs in the area of data conversion where it is required that the conversion in one direction is the inverse of the other. For that purpose, we introduce bidirectional arrows (biarrows). The bi-arrow class is an extension of Haskell’s arrow class with an extra combinator that changes the direction of computation. The advantage of the use of bi-arrows for invertible programming is the preservation of invertibility properties using the biarrow combinators. Programming with bi-arrows in a polytypic or generic way exploits this the most. Besides bidirectional polytypic examples, including invertible serialization, we give the definition of a monadic bi-arrow transformer, which we use to construct a bidirectional parser/pretty printer.

