Communications of the ACM
Lucid, a nonprocedural language with iteration
Communications of the ACM
An axiomatic basis for computer programming
Communications of the ACM
The Craft of Programming
Mathematical Theory of Program Correctness
Mathematical Theory of Program Correctness
Software Development: A Rigorous Approach
Software Development: A Rigorous Approach
Introduction to Mathematical Theory of Computation
Introduction to Mathematical Theory of Computation
A Discipline of Programming
Implementation and applications of Scott's logic for computable functions
Proceedings of ACM conference on Proving assertions about programs
Use and extension of an automatic program generator for model building in social and engineering sciences.
Verification and correction of non-procedural specifications in automaticgeneration of programs.
Verification and correction of non-procedural specifications in automaticgeneration of programs.
Program optimization based on a non-procedural specification
Program optimization based on a non-procedural specification
High-level operations in nonprocedural programming languages
High-level operations in nonprocedural programming languages
Hi-index | 0.00 |
The paper concerns the use in software development of a class of very high level languages characterized as definitional, where a specification of a program consists of assertions expressed as conditional equations. As compared to logic programming, where assertion are expressed in the form of Horn clauses, definitional languages are more amenable to efficient compilation. Also, use of equations is a natural way of expressing mathematical models in science, engineering and economics, where computer simulation of such models is often required. Finally, definitional languages are well suited for programming dataflow machines, another important building block in a Fifth Generation Project. Thus, in many applications definitional languages are preferred choice for programming new generation computers. In using definitional languages to develop programs, a user relies heavily on static analysis during the compilation stage of development, as compared to the traditional practice of relying much more extensively on dynamic analysis performed by execution of the program with test data. As this seems to be the common trend in development of all software tools for Fifth Generation Computers, the limits of static checking are investigated for definitional languages in this paper. A comprehensive approach to selecting and implementing automatic checks in the compiler is proposed. The checking methodology consists of representing the specification of a program by a directed graph and propagating various attributes throughout the entire graph. The choice of attributes and checks depends greatly on the types of errors that users are prone to make. This approach is described in the context of the MODEL language and compiler. The paper reports also on an experiment to evaluate the effectiveness of various checking methods incorporated in the compiler and on reliance of static vs dynamic methods of checking. The types of checking constructed were: syntax analysis, ambiguity in naming, completeness of definitions, data type consistency, dimensionality (corresponds to nesting of loops), ranges of dimensions (corresponds to loop terminations) and circular logic.