Computation and State Machines

Preface For quite a while, I've been disturbed by the emphasis on language in computer science. One result of that emphasis is programmers who are C++ experts but can't write programs that do what they're supposed to. The typical computer science response is that programmers need to use the right programming/specification/development language instead of/in addition to C++. The typical industrial response is to provide the programmer with better debugging tools, on the theory that we can obtain good programs by putting a monkey at a keyboard and automatically finding the errors in its code. I believe that the best way to get better programs is to teach programmers how to think better. Thinking is not the ability to manipulate language ; it's the ability to manipulate concepts. Computer science should be about concepts, not languages. But how does one teach concepts without getting distracted by the language in which those concepts are expressed? My answer is to use the same language as every other branch of science and engineering—namely, mathematics. But how should that be done in practice? This note represents a small step towards an answer. It doesn't discuss how to teach computer science; it simply addresses the preliminary question of what is computation.

[1]  Martín Abadi,et al.  The existence of refinement mappings , 1988, [1988] Proceedings. Third Annual Information Symposium on Logic in Computer Science.

[2]  Krzysztof R. Apt,et al.  Ten Years of Hoare's Logic: A Survey—Part I , 1981, TOPL.

[3]  Robin Milner,et al.  A Calculus of Communicating Systems , 1980, Lecture Notes in Computer Science.

[4]  Martin Odersky,et al.  Abstract State Machines - Theory and Applications , 2002, Lecture Notes in Computer Science.

[5]  Edsger W. Dijkstra,et al.  A Discipline of Programming , 1976 .

[6]  Yuri Gurevich Abstract state machines : theory and applications : International Workshop, ASM 2000, Monte Verità, Switzerland, March 19-24, 2000 : proceedings , 2000 .

[7]  F. Grund,et al.  Wirth, N., Programming in Modula-2. Berlin etc., Springer-Verlag 1985. 3rd corr. ed., IV, 202 pp., 4 figs., DM 49,50. ISBN 3-540-15078-1 (Texts and Monographs in Computer Science) , 1988 .

[8]  Egon Börger,et al.  Abstract State Machines. A Method for High-Level System Design and Analysis , 2003 .

[9]  Yuri Gurevich,et al.  Sequential abstract-state machines capture sequential algorithms , 2000, TOCL.

[10]  Manfred Broy,et al.  Functional specification of time-sensitive communicating systems , 1993, TSEM.

[11]  Yuri Gurevich,et al.  Evolving algebras 1993: Lipari guide , 1995, Specification and validation methods.

[12]  Ralph-Johan Back,et al.  Refinement Calculus: A Systematic Introduction , 1998 .

[13]  Edsger W. Dijkstra A Personal Summary of the Gries—Owicki Theory , 1982 .

[14]  Lynn Conway,et al.  Introduction to VLSI systems , 1978 .

[15]  P. M. Melliar-Smith,et al.  Temporal Logic Specification of Distributed Systems , 1981, ICDCS.

[16]  Richard L. Sites,et al.  Alpha Architecture Reference Manual , 1995 .

[17]  Leslie Lamport,et al.  What Good is Temporal Logic? , 1983, IFIP Congress.

[18]  B. Coe Aaker, David A. (Ed.).Advertising Management. Englewood Cliffs, New Jersey: Prentice-Hall, Inc., 1975 , 1976 .

[19]  R. Stärk,et al.  Abstract State Machines , 2003, Springer Berlin Heidelberg.

[20]  Nancy A. Lynch,et al.  Hierarchical correctness proofs for distributed algorithms , 1987, PODC '87.

[21]  Jean-Raymond Abrial,et al.  The B-book - assigning programs to meanings , 1996 .

[22]  Vaughan R. Pratt,et al.  Transition and cancellation in concurrency and branching time , 2003, Mathematical Structures in Computer Science.

[23]  Amir Pnueli,et al.  The temporal logic of programs , 1977, 18th Annual Symposium on Foundations of Computer Science (sfcs 1977).

[24]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

[25]  Ralph-Johan Back,et al.  Refinement Calculus, Part II: Parallel and Reactive Programs , 1989, REX Workshop.