Computational Logic by Ulrich Berger and Helmut Schwichtenberg, editors, Springer-Verlag, 1999, 444 pp.

This volume is based on the lectures given at the Marktoberdorf 1997 summer school, with chapters covering a range of topics of which some (but not all) will be of interest to functional programmers. Abramsky and McCusker begin the book with an introduction to recent work on application of game semantics to programming languages. The essential problem here is that traditional semantic techniques fail to characterise the computational processes that arise in computing functions of a language such as PCF. Game semantics offers solutions, here given for PCF and its extensions with state and control; other aspects such as recursive types have been covered elsewhere, and current work is addressing other features such as concurrency. Aczel's chapter on the simply typed lambda calculus is a very clear exposition of standard material, covering first the three standard kinds of inference system for implicational logic, then the untyped lambda calculus, and finally, the Curry style version of the typed calculus, i.e. that consisting of rules for typing untyped terms, rather than Church style, for forming terms that bear type annotations. The main novelties here are (i) a precise definition of the notion of 'formal system', (ii) the use of an infinite set U that equals the set U u of all unary functions on itself, with a conjecture that although this is inconsistent with classical set theory, it is consistent with an intuitionistic theory of non-well-founded sets, and (iii) a general framework for weak and strong normalisation proofs. Barendregt briefly presents the basic background on pure type systems, including his well-known cube of such systems, i.e. fragments of the calculus of constructions presented in a uniform fashion, followed by an interesting collection of exercises. Benl and Schwichtenberg discuss the formal correctness of functional programs. Among the various options, (1) of representing an algorithm by a term and proving its correctness w.r.t. a specification, (2) of extracting a program from a constructive existence proof, and (3) of using a non-constructive existence proof, either directly or after constructivisation (e.g. by Friedman's A-translation), the authors choose a combination of (1) and (2). Dijkstra's algorithm for computing shortest paths in a weighted graph is used as a case study. Buss gives a detailed introduction to the complexity of several propositional proof systems, including those based on cutting planes, and of Craig interpolations. As is well known, these are topics with connections to questions such as P …

[1]  Robin Milner,et al.  The Polyadic π-Calculus: a Tutorial , 1993 .

[2]  Robin Milner,et al.  Communication and concurrency , 1989, PHI Series in computer science.

[3]  Robin Milner,et al.  A Calculus of Mobile Processes, II , 1992, Inf. Comput..