1,617 research outputs found
Stream Productivity by Outermost Termination
Streams are infinite sequences over a given data type. A stream specification
is a set of equations intended to define a stream. A core property is
productivity: unfolding the equations produces the intended stream in the
limit. In this paper we show that productivity is equivalent to termination
with respect to the balanced outermost strategy of a TRS obtained by adding an
additional rule. For specifications not involving branching symbols
balancedness is obtained for free, by which tools for proving outermost
termination can be used to prove productivity fully automatically
Well-definedness of Streams by Transformation and Termination
Streams are infinite sequences over a given data type. A stream specification
is a set of equations intended to define a stream. We propose a transformation
from such a stream specification to a term rewriting system (TRS) in such a way
that termination of the resulting TRS implies that the stream specification is
well-defined, that is, admits a unique solution. As a consequence, proving
well-definedness of several interesting stream specifications can be done fully
automatically using present powerful tools for proving TRS termination. In
order to increase the power of this approach, we investigate transformations
that preserve semantics and well-definedness. We give examples for which the
above mentioned technique applies for the ransformed specification while it
fails for the original one
Data-Oblivious Stream Productivity
We are concerned with demonstrating productivity of specifications of
infinite streams of data, based on orthogonal rewrite rules. In general, this
property is undecidable, but for restricted formats computable sufficient
conditions can be obtained. The usual analysis disregards the identity of data,
thus leading to approaches that we call data-oblivious. We present a method
that is provably optimal among all such data-oblivious approaches. This means
that in order to improve on the algorithm in this paper one has to proceed in a
data-aware fashion
Cell libraries and verification
Digital electronic devices are often implemented using cell libraries to provide the basic logic elements, such as Boolean functions and on-chip memories. To be usable both during the development of chips, which is usually done in a hardware definition language, and for the final layout, which consists of lithographic masks, cells are described in multiple ways. Among these, there are multiple descriptions of the behavior of cells, for example one at the level of hardware definition languages, and another one in terms of transistors that are ultimately produced. Thus, correct functioning of the device depends also on the correctness of the cell library, requiring all views of a cell to correspond with each other. In this thesis, techniques are presented to verify some of these correspondences in cell libraries. First, a technique is presented to check that the functional description in a hardware definition language and the transistor netlist description implement the same behavior. For this purpose, a semantics is defined for the commonly used subset of the hardware definition language Verilog. This semantics is encoded into Boolean equations, which can also be extracted from a transistor netlist. A model checker is then used to prove equivalence of these two descriptions, or to provide a counterexample showing that they are different. Also in basic elements such as cells, there exists non-determinism reflecting internal behavior that cannot be controlled from the outside. It is however desired that such internal behavior does not lead to different externally observable behavior, i.e., to different computation results. This thesis presents a technique to efficiently check, both for hardware definition language descriptions and transistor netlist descriptions, whether non-determinism does have an effect on the observable computation or not. Power consumption of chips has become a very important topic, especially since devices become mobile and therefore are battery powered. Thus, in order to predict and to maximize battery life, the power consumption of cells should be measured and reduced in an efficient way. To achieve these goals, this thesis also takes the power consumption into account when analyzing non-deterministic behavior. Then, on the one hand, behaviors consuming the same amount of power have to be measured only once. On the other hand, functionally equivalent computations can be forced to consume the least amount of power without affecting the externally observable behavior of the cell, for example by introducing appropriate delays. A way to prevent externally observable non-deterministic behavior in practical hardware designs is by adding timing checks. These checks rule out certain input patterns which must not be generated by the environment of a cell. If an input pattern can be found that is not forbidden by any of the timing checks, yet allows non-deterministic behavior, then the cell’s environment is not sufficiently restricted and hence this usually indicates a forgotten timing check. Therefore, the check for non-determinism is extended to also respect these timing checks and to consider only counterexamples that are not ruled out. If such a counterexample can be found, then it gives an indication what timing checks need to be added. Because current hardware designs run at very high speeds, timing analysis of cells has become a very important issue. For this purpose, cell libraries include a description of the delay arcs present in a cell, giving an amount of time it takes for an input change to have propagated to the outputs of a cell. Also for these descriptions, it is desired that they reflect the actual behavior in the cell. On the one hand, a delay arc that never manifests itself may result in a clock frequency that is lower than necessary. On the other hand, a forgotten delay arc can cause the clock frequency being too high, impairing functioning of the final chip. To relate the functional description of a cell with its timing specification, this thesis presents techniques to check whether delay arcs are consistent with the functionality, and which list all possible delay arcs. Computing new output values of a cell given some new input values requires all connections among the transistors in a cell to obtain stable values. Hitherto it was assumed that such a stable situation will always be reached eventually. To actually check this, a wire is abstracted into a sequence of stable values. Using this abstraction, checking whether stable situations are always reached is reduced to analyzing that an infinite sequence of such stable values exists. This is known in the term rewriting literature as productivity, the infinitary equivalent to termination. The final contribution in this thesis are techniques to automatically prove productivity. For this purpose, existing termination proving tools for term rewriting are re-used to benefit from their tremendous strength and their continuous improvements
Semantic Versioning Checking in a Declarative Package Manager
Semantic versioning is a principle to associate version numbers to
different software releases in a meaningful manner. The correct use
of version numbers is important in software package systems where
packages depend on other packages with specific releases. When
patch or minor version numbers are incremented, the API is unchanged
or extended, respectively, but the semantics of the operations
should not be affected (apart from bug fixes). Although many
software package management systems assumes this principle, they do
not check it or perform only simple syntactic signature checks. In
this paper we show that more substantive and fully automatic checks
are possible for declarative languages. We extend a package manager
for the functional logic language Curry with features to check the
semantic equivalence of two different versions of a software
package. For this purpose, we combine CurryCheck, a tool for
automated property testing, with program analysis techniques in
order to ensure the termination of the checker even in case of
possibly non-terminating operations defined in some package. As a
result, we obtain a software package manager which checks semantic
versioning and, thus, supports a reliable and also
specification-based development of software packages
Applications and extensions of context-sensitive rewriting
[EN] Context-sensitive rewriting is a restriction of term rewriting which is obtained by imposing replacement restrictions on the arguments of function symbols. It has proven useful to analyze computational properties of programs written in sophisticated rewriting-based programming languages such asCafeOBJ, Haskell, Maude, OBJ*, etc. Also, a number of extensions(e.g., to conditional rewritingor constrained equational systems) and generalizations(e.g., controlled rewritingor forbidden patterns) of context-sensitive rewriting have been proposed. In this paper, we provide an overview of these applications and related issues. (C) 2021 Elsevier Inc. All rights reserved.Partially supported by the EU (FEDER), and projects RTI2018-094403-B-C32 and PROMETEO/2019/098.Lucas Alba, S. (2021). Applications and extensions of context-sensitive rewriting. Journal of Logical and Algebraic Methods in Programming. 121:1-33. https://doi.org/10.1016/j.jlamp.2021.10068013312
Productivity of Stream Definitions
We give an algorithm for deciding productivity of a large and natural class of recursive stream definitions. A stream definition
is called ‘productive’ if it can be evaluated continuously in such a way that a uniquely determined stream is obtained as
the limit. Whereas productivity is undecidable for stream definitions in general, we show that it can be decided for ‘pure’
stream definitions. For every pure stream definition the process of its evaluation can be modelled by the dataflow of abstract
stream elements, called ‘pebbles’, in a finite ‘pebbleflow net(work)’. And the production of a pebbleflow net associated with
a pure stream definition, that is, the amount of pebbles the net is able to produce at its output port, can be calculated
by reducing nets to trivial nets
- …