TL;DR: The inductive assertion method is generalized to permit formal, machine-verifiable proofs of correctness for multiprocess programs, represented by ordinary flowcharts, and no special synchronization mechanisms are assumed.
Abstract: The inductive assertion method is generalized to permit formal, machine-verifiable proofs of correctness for multiprocess programs. Individual processes are represented by ordinary flowcharts, and no special synchronization mechanisms are assumed, so the method can be applied to a large class of multiprocess programs. A correctness proof can be designed together with the program by a hierarchical process of stepwise refinement, making the method practical for larger programs. The resulting proofs tend to be natural formalizations of the informal proofs that are now used.
TL;DR: The reliability of symbolic testing in finding bugs is related to the classes of errors and the relationship of symbolic evaluation systems like DISSECT to classes of program errors and to other kinds of program testing and program analysis tools is discussed.
Abstract: Symbolic testing and a symbolic evaluation system called DISSECT are described. The principle features of DISSECT are outlined. The results of two classes of experiments in the use of symbolic evaluadon are summarized. Several classes of program errors are defined and the reliability of symbolic testing in finding bugs is related to the classes of errors. The relationship of symbolic evaluation systems like DISSECT to classes of program errors and to other kinds of program testing and program analysis tools is also discussed. Desirable improvements in DISSECT, whose importance was revealed by the experiments, are mentioned.
TL;DR: This paper presents a discussion of mechanical range analysis employing techniques practical for use in a compiler and can also serve as a useful adjunct to the more sophisticated techniques required for program proving.
Abstract: Programs can be analyzed to determine bounds on the ranges of values assumed by variables at various points in the program. This range information can then be used to eliminate redundant tests, verify correct operation, choose data representations, select code to be generated, and provide diagnostic information. Sophisticated analyses involving the proofs of complex assertions are sometimes required to derive accurate range information for the purpose of proving programs correct. The performance of such algorithms may be unacceptable for the routine analysis required during the compilation process. This paper presents a discussion of mechanical range analysis employing techniques practical for use in a compiler. This analysis can also serve as a useful adjunct to the more sophisticated techniques required for program proving.
TL;DR: This paper describes the current status of the PSI program synthesis system, which allows program specification dialogues using natural language, traces and examples from which a high-level program model is acquired.
Abstract: This paper describes the current status of the PSI program synthesis system. It allows program specification dialogues using natural language, traces and examples from which a high-level program model is acquired. This model is then refined into an efficient implementation of the program. PSI consists of several modules including a parser-interpreter, trace and examples inference expert, dialogue moderator, program model builder, coder and efficiency expert.
TL;DR: This paper contributes to the understanding of program structures in terms of its stability and reliability in a quantitative sense by citing relevent references.
Abstract: This paper contributes to the understanding of program structures in terms of its stability and reliability in a quantitative sense. Distinctions are made between the logical structure of a program and the information structure of a program.The general characteristics of a good program will not be discussed in this paper other than citing relevent references. The term stability is defined as the resistance to the amplification of changes that has been made to a given program. The information structure of a program is based on the sharing of information between the components of the program.
TL;DR: The essence of the approach is to find an analogy between the specifications of the given and desired programs, and then to transform the given program accordingly.
Abstract: An attempt is made to formulate techniques of program modification, whereby a given program that achieves one goal can be transformed into a new program that uses the same principles to achieve a different goal. For example, a program that uses the binary search paradigm to calculate the square root of a number may be modified to divide two numbers in a similar manner, or vice versa. The essence of the approach is to find an analogy between the specifications of the given and desired programs, and then to transform the given program accordingly.
TL;DR: As a solution to the problem of program maintenance, it is proposed to maintain a program in several versions to address the need for modularity.
Abstract: As a solution to the problem of program maintenance, it is proposed to maintain a program in several versions. Relevant areas of current research are discussed.
TL;DR: An attempt is made to formulate techniques of program modification, whereby a program that achieves one result can be transformed into a new program that uses the same principles to achieve a different goal.
Abstract: A programmer spends more time modifying already existing programs than constructing original ones. An attempt is made to formulate techniques of program modification, whereby a program that achieves one result can be transformed into a new program that uses the same principles to achieve a different goal. For example, a program that uses the binary search paradigm to divide two numbers may be modified to calculate the square-root of a number in a similar manner.Program debugging is considered as a special case of modification if a program computers wrong results, it must be modified to achieve the intended results The application of abstract program schemata to concrete problems is also viewed from the perspective of modification techniques.We, have embedded this approach in a running implementation; our methods are illustrated with several examples that have been performed by it.
TL;DR: This paper proposes an alternative approach to program verification: correctness proofs are constructively established by proof justifications written in an algorithmic notation, written as part of the program, along with the executable code and correctness specifications.
Abstract: Most current approaches to mechanical program verification transform a program and its specifications into first-order formulas and try to prove these formulas valid. Since the first-order predicate calculus is not decidable, such approaches are inherently limited. This paper proposes an alternative approach to program verification: correctness proofs are constructively established by proof justifications written in an algorithmic notation. These proof justifications are written as part of the program, along with the executable code and correctness specifications. A notation is presented in which code, specifications, and justifications are interwoven. For example, if a program contains a specification 3x P(x), the program also contains a justification that exhibits the particulat value of x that makes P true. Analogously, justifications may be used to state how universally quantified formulas are to be instantiated when they are used as hypotheses. Programs so justifiled may be verified by proving quantifier-free formulas. Additional classes of justifications serve related ends. Formally, justifications reduce correctness to a decidable theory. Informally, justifications establish the connection between the executable code and correctness specifications, documenting the reasoning on which the correctness is based.
TL;DR: A new class is obtained for which assertion synthesis reqmres at least nondetermimstlc polynomial ume ~s strongly conlectured to require determlmstlc exponenual time, and it appears that the general problem of asserUon synthesis Is at least exponentml.
Abstract: As an adlunct to mechamcal program verification, it is desirable to partmlly mechamze mductwe assertion synthesis. It is generally beheved that mechanical synthesis must be confined to simple assertions or simple extensions to programmer supphed assertions since the general problem of synthesis reqmres deep insight into the program's operation This paper confirms and quantifies this behef A class {R} of programs Is described for which the inductive assertions can be produced directly Then, by extending this class, a new class is obtained for which assertion synthesis reqmres at least nondetermlnlSUC polynomial t~me In fact a specific subset is shown to be NP-complete This yields two results, First, since nondetermimstlc polynomial ume ~s strongly conlectured to require determlmstlc exponenual time, it appears that the general problem of asserUon synthesis Is at least exponentml. Second, the extension from the class {R} is thus shown to be a cause of this time complexity The result is a better understanding of the difficulty of assertion synthesis and its cause
TL;DR: This research studies the effects of association changes in database semantics, file composition and decomposition, and the conversion of one DBMS to another to the application programs by proposing a methodology of application program analysis and conversion based on database semantics.
Abstract: This research studies the effects of 1) association changes in database semantics, 2) file composition and decomposition, and 3) the conversion of one DBMS to another to the application programs. A methodology of application program analysis and conversion based on database semantics is proposed. The semantics of both the source and target databases are described in terms of entity types and their associations. The semantics of application programs is represented by an "application structure" of language sequences which correspond to a number of access path graphs representing the general access patterns associated with entity types and their associations. Program conversion is achieved by meaning-preserving transformations of the access path graphs to account for the various types of database changes.
TL;DR: The framework is described in terms of a methodology and a rule base for generating control and data structure specifications for the program to be synthesized, in a format suitable for transformation into program code in a given target language.
Abstract: This paper presents an overview of a framework for the synthesis of high-level program descriptions from traces and example pairs in an automatic programming system. The framework is described in terms of a methodology and a rule base for generating control and data structure specifications for the program to be synthesized, in a format suitable for transformation into program code in a given target language.
TL;DR: A program manipulation system which speeds up Lisp programs by rewriting them, and was applied to a number of programs, which had execution speeds ten to fifty per cent faster than the originals.
Abstract: : This report describes a program manipulation system which speeds up Lisp programs by rewriting them The system can read in programs and input test sets, run the program in a controlled fashion, and propose and carry out changes to the program which may result in faster execution and better algorithms Improvements fall into two categories: those based solely on the program text, and those which use information learned from running the program Changes are tested for correctness (program gives the same answers) and effectiveness (actually speeds the program up) Discussed in the thesis are the programmable language-oriented editor which carries out transformation commands, the library of patterns used to organize program transformations, a data and control flow analysis routine, and tools for investigating the dynamic behavior of programs One section is devoted to a discussion of the controversy surrounding the area of program proving, and gives arguments in support of the programmer-aided program testing techniques used in the transformation system The system was applied to a number of programs, ranging in size from single functions to large programs twenty-five pages in length The improved programs had execution speeds ten to fifty per cent faster than the originals (Author)
TL;DR: A computer code for Preliminary Aircraft Structural Synthesis provides rapid and accurate analysis for aircraft structures that can be adequately modeled by beam finite elements.
Abstract: A computer code for Preliminary Aircraft Structural Synthesis provides rapid and accurate analysis for aircraft structures that can be adequately modeled by beam finite elements. The philosophy used in developing the program was to provide a basic framework that can be used for structural synthesis. It is anticipated that a user will need to add detail to this framework in order to perform his specific task. With this philosophy in mind, the program was written so that it is easily divided into segments, thereby making it readily adaptable. The theoretical portion of this manual describes the basic structure of the program and details the development of the unique beam element that is used. The present capability of the algorithm is stated and suggestions are made regarding enhancements to this capability. User information is also given that provides an overview of the program's construction, identifies the required inputs, describes the program output, provides some comments on the program use, and exhibits results for a simple example.
TL;DR: Techniques were developed by which an Algol-like program, given together with its specifications, may be documented automatically, and expresses invariant relationships that hold between program variables at intermediate points in the program.
Abstract: Techniques were developed by which an Algol-like program, given together with its specifications, may be documented automatically. This documentation expresses invariant relationships that hold between program variables at intermediate points in the program, and explains the actual workings of the program regardless of whether the program is correct. These techniques, formulated as deduction rules for both guaranteed invariants and candidate invariants, represent a unification of existing approaches, and sometimes improve upon them.
TL;DR: This document provides a detailed description of the DSPA Computer Program system and its subprograms and will assist the programmer in revising or updating the several sub programs.
Abstract: : A computer program has been developed for designing and analyzing the performance of solar array/battery power systems for the U.S. Coast Guard Navigational Aids. This program is called the Design Synthesis/Performance Analysis (DSPA) Computer Program. The basic function of the Design Synthesis portion of the DSPA program is to evaluate functional and economic criteria to provide specifications for viable solar array/battery power systems. The basic function of the Performance Analysis portion of the DSPA program is to simulate the operation of solar array/battery power systems under specific loads and environmental conditions. This document provides a detailed description of the DSPA Computer Program system and its subprograms. This manual will assist the programmer in revising or updating the several subprograms.
TL;DR: A generalization of the macro processor is shown to form a sound design basis, a basis which can be adapted to the simulation programming environment by the inclusion of innovative features.
Abstract: A program generator system is a general software tool for producing program generators The program generator automates portions of the program synthesis process for members of a particular class of programs, allowing the source forms of programs to be more compact and to reflect the conceptual basis of the applications area more directly This paper explores the design and workings of program generator systems for simulation programming A generalization of the macro processor is shown to form a sound design basis, a basis which can be adapted to the simulation programming environment by the inclusion of innovative features The status of a pilot implementation of a program generator system for GPSS is reported
TL;DR: The author outlines his work in writing conversational computer programs, and the techniques he has developed to make them successful.
Abstract: As a result of improved facilities, reduced computing costs, and the availability of better programs, conversational computer programs are becoming effective design aids in structural engineering offices. The author outlines his work in writing conversational computer programs, and the techniques he has developed to make them successful.Some of the topics given attention are: the relationship between the engineering and the computer science aspects of the work; a technique for free-format data input; the planning of the dialogue to take place between the program users and the computer; the provision of technical support for the program users; the selection of the correct computer and the correct terminal for conversational programs; procedures for error checking, error correction and input data editing; electronic data transmission from program to program; development of the programs in a time-sharing environment; the use of modular programming; and trade-offs between the costs of the software and the har...
TL;DR: This deductive system for proving program correctness and program performance is extended to include Parallelism and methods for proving the absence of deadlock and for predicting the occurrence ofdeadlock are discussed.
Abstract: In this paper we investigate the strong verification of programs using both inductive assertions which involve probability distributions of program variables [4] and the concept of predicate transformer [2]. This deductive system for proving program correctness and program performance is extended to include Parallelism. Methods for proving the absence of deadlock and for predicting the occurrence of deadlock are also discussed.
TL;DR: A theory for the correctness of asynchronous parallel programs and a technique for showing that a parallel program is correct with respect to this criterion is developed.
Abstract: We develop a theory for the correctness of asynchronous parallel programs. A program is considered correct if its behavior is in some sense similar to that of an abstract version of the program. We discuss various criteria for this similarity. We then concentrate on one of them and develop a technique for showing that a parallel program is correct with respect to this criterion.
TL;DR: A compilation model based on the use of source-to-source program transformations is used to provide a framework for discussing issues of code generation, compilation of high level languages such as APL, and eliminating overhead commonly associated with modular structured programming.
Abstract: The use of source-to-source program transformations has proved valuable in improving program performance. The concept of program manipulation is elucidated by describing its role in both conventional optimization and high level modification of conditional, looping, and procedure structures. An example program fragment written in an Algol-like language is greatly improved by transformations enabled by a user-provided assertion about a data array. A compilation model based on the use of source-to-source program transformations is used to provide a framework for discussing issues of code generation, compilation of high level languages such as APL, and eliminating overhead commonly associated with modular structured programming. Application of the compilation model to several different languages is discussed.
TL;DR: The fine degree of interleaving in this program makes it especially difficult to understand, and complicates the proof greatly as mentioned in this paper, and the difficulty of proving such parallel programs correct is discussed.
Abstract: A parallel program, Dijkstra's on-the-fly garbage collector, is proved correct using a proof method developed by Owicki. The fine degree of interleaving in this program makes it especially difficult to understand, and complicates the proof greatly. Difficulties with proving such parallel programs correct are discussed.
TL;DR: The immediate objectives of this research are to learn how to program keeping fact and control separate, and to identify those aspects of control amenable to automation.
Abstract: : The problem of automating some of the duties of programmers is considered. Our point of departure is the claim that data management has been automated to the point where the programmer concerned only about the correctness (as opposed to the efficiency) of his program need not involve himself in any aspect of the storage allocation problem. The problem of automating aspects of control is considered. To accomplish this a definition of control based on a fact/heuristic dichotomy is proposed. This allows one to operate arbitrarily on the control component of a program without affecting the program's correctness, which is entirely the responsibility of the fact component. The immediate objectives of this research are to learn how to program keeping fact and control separate, and to identify those aspects of control amenable to automation.