TL;DR: This thesis proposes a definition and a measure for program structure and evaluates the usefulness of the measure as a tool for determining and controlling structure in a program.
Abstract: : Program structure has been discussed as being an important influence on the ease with which programs can be constructed, verified, understood, and changed. Yet the notion of program structure has remained a vague and imprecisely defined concept. This thesis proposes a definition and a measure for program structure and evaluates the usefulness of the measure as a tool for determining and controlling structure in a program.
TL;DR: This work reports on an interactive program verification system, based on the inductive assertion method, which system is implemented using an existing symbolic mathematical language and supporting system, Reduce, which has been augmented with a number of capabilities which are important to program verification, particularly transformations on relational and Boolean expressions.
Abstract: Program verification is a relatively new application area for symbolic mathematical systems. We report on an interactive program verification system, based on the inductive assertion method, which system is implemented using an existing symbolic mathematical language and supporting system, Reduce. Reduce has been augmented with a number of capabilities which are important to program verification, particularly transformations on relational and Boolean expressions. We believe these capabilities would be valuable in other contexts and should be incorporated more widely into symbolic mathematical systems for general use. The program verification application can serve as a guide to an appropriate definition of such capabilities, particularly with regard to the need to distinguish between undefined program variables and polynomial indeterminates. Additional capabilities which would benefit the program verification application include representation of user-defined functions by internal forms which directly incorporate properties such as commutativity and associativity (as is commonly done with plus and times), and a comprehensive facility for defining conditionally applicable transformations
TL;DR: Methods are prescribed for treating optimization problems connected with the copying, representation, type-checking and indexing of composite data objects and subobjects in SETL by adapting known techniques of global program analysis and optimization.
Abstract: The compilation of SETL, a programming language of high level based upon the dictions and semantic concepts of the mathematical theory of sets, raises optimization problems connected with the copying, representation, type-checking and indexing of composite data objects and subobjects. Methods are prescribed for treating some of these problems by adapting known techniques of global program analysis and optimization. A programmer-assisted approach to related, less tractable optimization problems is suggested.
TL;DR: Analysing programs by sets of computations permits one to deal not only with input-output properties like correctness or termination, but also with properties of runs independently are they finite or not.
Abstract: By a computation of a program we mean any finite or infinite sequence of consecutive data-vector states generated by the program during a run. The set of all such computations can be considered as the program meaning. Analysing programs by sets of computations permits one to deal not only with input-output properties like correctness or termination, but also with properties of runs independently are they finite or not. In particular one can analyse system-like programs, where no output at all is expected. Given a program to be analysed we split it into a finite number of modules each of them simple enough for the set of all its computations to be obvioust. Sets of computations associated to modules are combined then into a global set in a way that is described by operational semantics. This semantics — being of litle use for program analysis — is supplemented then by a fixed point semantics that is proved equivalent to the former. Two examples of program analysis are considered: the McCarthy's 91-procedure and a consumer-producer system-like program.
TL;DR: Certain principles for proving the correctness of programs and microprograms under these conditions are state here, and examples are illustrated by examples, extensions to the standard inductive assertion method.
Abstract: A machine-language program, or a microprogram implemented in writable control store, may modify itself. In order to prove the correctness of such a program, we must take this into account. Even if the program does not modify itself, we must prove this. Sometimes this may be done by looking at the individual instructions of the program; sometimes it must be tied in with the proof of correctness of the program. We state here, and illustrate by examples, certain principles for proving the correctness of programs and microprograms under these conditions. The principles are extensions to the standard inductive assertion method.
TL;DR: These comments are not an argument against proving programs at the Fortran level, but rather an indication of the eventual need for a completely proved computing system.
Abstract: "A proof of correctness guarantees that a program will run correctly every time it is executed." That statement is not necessarily true. Suppose, for sake of concreteness, that a valid proof of a Fortran program has been constructed. When this program was proved, it most likely was proved in isolation from the other software components which ultimately will be involved in actually making the program run. So, even though we have proved the Fortran program, one of these other components, or the system hardware, may malfunction causing the actual machine language program that is executed to produce an error. These comments are not an argument against proving programs at the Fortran level, but rather an indication of the eventual need for a completely proved computing system.
TL;DR: A general syntax-directed strategy is described for translating computer programs written in a machine-level source language into equivalent programs in a higher-level target language, referred to as decompilation or inverse compilation.
Abstract: A general syntax-directed strategy is described for translating computer programs written in a machine-level source language into equivalent programs in a higher-level target language. This translation process is referred to as decompilation or inverse compilation. Work on decompilation is potentially applicable in such areas as software portability, source-level debugging and diagnostic systems, and program analysis and validation.
TL;DR: An automatic program synthesis system must combine reasoning and programming ability with a good deal of knowledge about the subject matter of the program to be effective.
Abstract: Program synthesis is the construction of a computer program from given specifications. An automatic program synthesis system must combine reasoning and programming ability with a good deal of knowledge about the subject matter of the program. This ability and knowledge must be represented both procedurally (by programs) and structurally (by choice of representation).