Results 1 -
5 of
5
Program Derivation With Verified Transformations - A Case Study
, 1995
"... A program development methodology based on verified program transformations is described and illustrated through derivations of a high level bisimulation algorithm and an improved minimum-state DFA algorithm. Certain doubts that were raised about the correctness of an initial paper-and-pencil deriva ..."
Abstract
-
Cited by 12 (3 self)
- Add to MetaCart
A program development methodology based on verified program transformations is described and illustrated through derivations of a high level bisimulation algorithm and an improved minimum-state DFA algorithm. Certain doubts that were raised about the correctness of an initial paper-and-pencil derivation of the DFA minimizationalgorithm were laid to rest by machine-checked formal proofs of the most difficult derivational steps. Although the protracted labor involved in designing and checking these proofs was almost overwhelming, the expense was somewhat offset by a successful reuse of major portions of these proofs. In particular, the DFA minimization algorithm is obtained by specializing and then extending the last step in the derivation of the high level bisimulation algorithm. Our experience suggests that a major focus of future research should be aimed towards improving the technology of machine checkable proofs --- their construction, presentation, and reuse. This paper demonstrat...
Compiler Optimizations for Low-level Redundancy Elimination: An Application of Meta-level Prolog Primitives
- Proc. Third Workshop on Metaprogramming in Logic (META-92
, 1992
"... Much of the work on applications of meta-level primitives in logic programs focusses on high-level aspects such as source-level program transformation, interpretation, and partial evaluation. In this paper, we show how meta-level primitives can be used in a very simple way for low-level code opt ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
Much of the work on applications of meta-level primitives in logic programs focusses on high-level aspects such as source-level program transformation, interpretation, and partial evaluation. In this paper, we show how meta-level primitives can be used in a very simple way for low-level code optimization in compilers. The resulting code optimizer is small, simple, efficient, and easy to modify and retarget. An optimizer based on these ideas is currently being used in a compiler that we have developed for Janus [6]. 1 Introduction Much of the work on applications of meta-level primitives in logic programs focuses on high-level aspects such as source-level program transformation, interpretation, and partial evaluation. In this paper, we consider instead the use of meta-level Prolog primitives in low-level code optimization in compilers. We show how such primitives can be used in a very simple way for a low-level code optimization called common subexpression elimination. The resu...
Binary Decision Diagrams and Applications for Reliability Analysis
, 2000
"... This thesis investigates practical and theoretical concerns for the use of Binary Decision Diagrams (BDDs) for qualitative and quantitative risk assessments of complex systems. Boolean models describing failure relationships between components, and fault trees in particular, are boolean formulas who ..."
Abstract
- Add to MetaCart
This thesis investigates practical and theoretical concerns for the use of Binary Decision Diagrams (BDDs) for qualitative and quantitative risk assessments of complex systems. Boolean models describing failure relationships between components, and fault trees in particular, are boolean formulas whose variables are individual component failures; assessment of these models can be performed by analysis of the boolean function induced by the formula. Resource consumption for BDD computations, which is determined by the form of the boolean formula and the order imposed on its variables, is in many cases exponentially smaller than the truth table for the function. The use of Binary Decision Diagrams has made possible orders-of-magnitude increases in the complexity of systems that can be assessed efficiently. Nonetheless, the practical limits of straightforward use of BDDs for reliability analysis are often surpassed by real-world systems. Understanding why this happens is the first subject...
Compiler Optimizations Should Pay for Themselves - Applying the Spirit of Oberon to Code Optimization by Compiler
"... Optimizing compilers tend to be much larger and much slower than their straightforward counterparts. Their designers usually do not follow Oberon's maxim of making things "as simple as possible", but are inclined to completely disregard cost (in terms of compiler size, compilation speed, and maintai ..."
Abstract
- Add to MetaCart
Optimizing compilers tend to be much larger and much slower than their straightforward counterparts. Their designers usually do not follow Oberon's maxim of making things "as simple as possible", but are inclined to completely disregard cost (in terms of compiler size, compilation speed, and maintainability) in favor of code_quality benefits that often turn out to be relatively marginal. Trying to make an optimizing compiler as simple as possible and yet as powerful as necessary requires, before all else, a measurement standard, by which both simplicity and power can be judged. For a compiler that is written in the language it compiles, two such standards are easily found by considering first the time required for self_compilation, and then the size of the resulting object program. With the help of these benchmarks, one may pit simplicity against power, requiring that every new capability added to the compiler "pays its own way" by creating more benefit than cost on account of at leas...

