The Algebra of Functional Programs: Function Level Reasoning, Linear Equations, and Extended Definitions

In [Back78] we introduced a functional style of programming in which variable-free programs are built from a set of primitive programs by a small set of combining forms or functionals and by recursive definitions. The programs of this "FP" style are all strict functions (of a single argument) that map a set of "objects" into itself. This set of objects is the closure under cartesian products of some given set of atoms. The earlier paper suggested that FP systems have the following properties: (a) extremely simple semantics, (b) existence of closed-form, non-recursive expressions for many functions that are normally recursively defined, (c) programs exhibit a clear hierarchical structure in which high level programs can be combined to form higher level programs, (d) the principal FP combining forms are the operations of a powerful algebra of programs that can be used to transform programs and to solve equations for recursively defined programs.

[1]  Joseph A. Goguen,et al.  The Semantics of CLEAR, A Specification Language , 1979, Abstract Software Specifications.

[2]  C. A. R. Hoare,et al.  An axiomatic basis for computer programming , 1969, CACM.

[3]  R. Milner Models of LCF. , 1973 .

[4]  Seymour Ginsburg,et al.  Two-way balloon automata and AFL , 1968, JACM.

[5]  Donald B. Johnson,et al.  Efficient Algorithms for Shortest Paths in Sparse Networks , 1977, J. ACM.

[6]  Peter Naur Proof of Algorithms by General Snapshots , 1966 .

[7]  J. M. Cadiou,et al.  Recursive definitions of partial functions and their computations , 1972, Proving Assertions About Programs.

[8]  John W. Backus,et al.  Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs , 1978, CACM.

[9]  A. G. Fraser,et al.  Integrity of a Mass Storage Filing System , 1969, Comput. J..

[10]  A. Church The calculi of lambda-conversion , 1941 .

[11]  John H. Williams,et al.  On the Development of the Algebra of Functional Programs , 1982, TOPL.

[12]  Zohar Manna,et al.  Formalization of Properties of Functional Programs , 1970, JACM.

[13]  Zohar Manna,et al.  Inductive methods for proving properties of programs , 1973, Commun. ACM.

[14]  J. Shepherdson,et al.  Computer programming and formal systems , 1965 .

[15]  F. H. Raymond Note sur la Suppression des Étiquettes en Programmation , 1977, RAIRO Theor. Informatics Appl..

[16]  John W. Backus Programming language semantics and closed applicative languages , 1973, POPL '73.

[17]  Ellis Horowitz,et al.  Abstract data types and software validation , 1978, CACM.

[18]  Dana S. Scott,et al.  Outline of a Mathematical Theory of Computation , 1970 .

[19]  H. Raymond Strong,et al.  Characterizations of Flowchartable Recursions , 1973, J. Comput. Syst. Sci..

[20]  James H. Morris,et al.  Another recursion induction principle , 1971, CACM.

[21]  D. A. Turner,et al.  A new implementation technique for applicative languages , 1979, Softw. Pract. Exp..

[22]  F. H. Raymond Note sur l'Argebre des Fonctions , 1975, RAIRO Theor. Informatics Appl..

[23]  John Darlington,et al.  A Transformation System for Developing Recursive Programs , 1977, J. ACM.

[24]  Corrado Böhm,et al.  Flow diagrams, turing machines and languages with only two formation rules , 1966, CACM.

[25]  Erich Platte,et al.  Differentielle eigenschaften der invarianten regulärer algebren , 1980 .

[26]  John McCarthy,et al.  A basis for a mathematical theory of computation, preliminary report , 1899, IRE-AIEE-ACM '61 (Western).

[27]  Rod M. Burstall,et al.  Proving Properties of Programs by Structural Induction , 1969, Comput. J..

[28]  Michael A. Arbib,et al.  The Pattern-of-Calls Expansion Is the Canonical Fixpoint for Recursive Definitions , 1982, JACM.

[29]  S. C. Kleene,et al.  Introduction to Metamathematics , 1952 .

[30]  Joseph A. Goguen,et al.  Initial Algebra Semantics and Continuous Algebras , 1977, J. ACM.

[31]  M. Arbib,et al.  Partially additive categories and flow-diagram semantics☆ , 1980 .

[32]  P. J. Landin The Mechanical Evaluation of Expressions , 1964, Comput. J..

[33]  Joseph A. Goguen,et al.  Putting Theories Together to Make Specifications , 1977, IJCAI.