Logicians have known since Kleene's work in the 1940s that various kinds of constructive proofs could be compiled into executable code. The results of this variety are known for many constructive formal systems. ...
详细信息
Logicians have known since Kleene's work in the 1940s that various kinds of constructive proofs could be compiled into executable code. The results of this variety are known for many constructive formal systems. An example can illustrate the basic ideas behind them. A very simple benchmark common in the literature, the Euclidean division algorithm, is selected. Programs are like constructive proofs of their specifications; this analogy is an exact equivalence for certain classes of programs. The relationship between formal logic and programs is a foundation for programming methodology superior to that usually adopted. Furthermore, this equivalence suggests programming languages which are much richer than all others currently in use. These claims are established through the introduction of parts of the PL/CV programming logics as a source of precision and examples.
AbstractThe methodology of top‐down (structured) programming has emerged in the last few years as a practical approach to the problem of developing reliable software systems. The methodology, however, places certain ...
详细信息
AbstractThe methodology of top‐down (structured) programming has emerged in the last few years as a practical approach to the problem of developing reliable software systems. The methodology, however, places certain demands on the language used for actual system implementation. In this paper we discuss the implications of these demands on a specific language, PL/I. From this discussion the basic objectives of a PL/I support system are deduced. These objectives deal primarily with: (1) specifying intermodule relationships; (2) propagating module modifications; and (3) maintaining consistency in the realization of abstractions. Finally, the essential elements of a system that realizes these objectives are describe
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 de...
详细信息
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.
In interactive systems that must display the text of programs, the size of the program is ordinarily much larger than the capacity of the screen. Although the obvious tactic is simply to select k contiguous lines for ...
详细信息
In interactive systems that must display the text of programs, the size of the program is ordinarily much larger than the capacity of the screen. Although the obvious tactic is simply to select k contiguous lines for display in a k-line window, in some cases, it is helpful to be able to represent m lines in a k-line window, where m is greater than k, by condensing portions of the text. Alternative tactics for controlling such condensation are considered. The 3 systems considered - PDE1L, the Cornell Program Synthesizer, and COPE - illustrate a useful idea, as well as 2 substantially different approaches to its implementation. PDE1L and COPE are demonstrable, but user experience is limited. The Synthesizer, however, has been used for more than 2 years at numerous universities. Only extensive user experience can resolve the choice between automatic and user-controlled condensation, and it will probably be concluded that under different circumstances each of these alternatives is advantageous. The issues in general will be simply how much effort is required for user control and how well automatic condensation can deduce the user's needs and intent. Of course, the possibility of compromise also exists.
In order to develop a loop from a given precondition and postcondition following the method developed in Dijkstra (1976) and described in Gries (1981), one attempts to obtain a loop invariant by weakening the postcond...
详细信息
In order to develop a loop from a given precondition and postcondition following the method developed in Dijkstra (1976) and described in Gries (1981), one attempts to obtain a loop invariant by weakening the postcondition in some way. To do so, one standard technique is to replace a constant or expression that occurs in the postcondition by a fresh variable. A situation in which it is useful to introduce fresh variables to replace some of the occurrences of existing variables is discussed. Both a new algorithm for linear search and an algorithm for binary search to illustrate the technique are developed.
A general initialization principle is presented that increases the efficiency of algorithms in terms of computation time. It is applied to the algorithm NS in [1] and results in significant performance improvements. I...
详细信息
A general initialization principle is presented that increases the efficiency of algorithms in terms of computation time. It is applied to the algorithm NS in [1] and results in significant performance improvements. In addition a programming bug is shown in the original version of NS.
Since the middle of the 1960s, computer science has been practised in Denmark under Peter Naur's termdatalogy, the science of data processes. Starting at Regenecentralen and the University of Copenhagen, the Copen...
详细信息
Since the middle of the 1960s, computer science has been practised in Denmark under Peter Naur's termdatalogy, the science of data processes. Starting at Regenecentralen and the University of Copenhagen, the Copenhagen Tradition of Computer Science has developed its own special characteristics by means of a close connection with applications and other fields of knowledge. The tradition is not least visible in the area of education. Comprehensive project activity is an integral part of the curriculum, thus presenting theory as an aspect of realistic solutions known primarily through actual experience. Peter Naur early recognized the particular educational challenges presented by computer science. His innovations have shown their quality and vitality also at other universities. There is a close connection between computer science training as it has been formed at Copenhagen University, and the view of computer science which has characterized Peter Naur's research. We illustrate how the study of programming and system development conceived as a human activity has been an all-pervasive theme in Naur's work. This approach has set the scene for central research issues in software development which today seem more topical than ever.
A method for design of embedded real-time systems is described. We discuss how the method separates concerns and at what points theory is applied. We also report on our experience from teaching the method to engineers...
详细信息
A method for design of embedded real-time systems is described. We discuss how the method separates concerns and at what points theory is applied. We also report on our experience from teaching the method to engineers from several Danish companies and their experience in using the method in real development projects.
We review the introductory programming courses of the widely accepted Curricula '68, '78, '1991 and '2001. We note that a one-language, imperative-paradigm approach still prevails, although multi-langu...
详细信息
ISBN:
(纸本)140207266X
We review the introductory programming courses of the widely accepted Curricula '68, '78, '1991 and '2001. We note that a one-language, imperative-paradigm approach still prevails, although multi-language programming systems are already available. We discuss the Kernel Language Approach, which provides a programmer's theory of programming that permits a widening of introductory courses to multi-language, multi-thread programming without loss of depth. We suggest two broad outlines for the removal of the one-language constriction from introductory programming courses. We observe that because of the introduction of dotNET and because of student exposure to net-centric multimedia applications, text-based "Hello World!" examples disappoint the expectations of today's students.
This paper describes an approach to the methodology of answer set programming that can facilitate the design of encodings that are easy to understand and provably correct. Under this approach, after appending a rule o...
详细信息
This paper describes an approach to the methodology of answer set programming that can facilitate the design of encodings that are easy to understand and provably correct. Under this approach, after appending a rule or a small group of rules to the emerging program, we include a comment that states what has been "achieved" so far. This strategy allows us to set out our understanding of the design of the program by describing the roles of small parts of the program in a mathematically precise way.
暂无评论