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

Roy Dyckhoff
2001 Journal of functional programming  
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
more » ... 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 wellknown 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 = NP ? and NP = co − NP ?. The main systems considered are Frege-Hilbert systems (those with schematic axioms and schematic inference rules, such as Modus Ponens) in which proof size and worst-case analysis are taken to be of greater importance than the average cost of proof search. Constable describes, in the most interesting chapter of the volume, a formalisation of theorems about decidable properties of finite automata, faithful to the classic 1969 textbook by Hopcroft and Ullman. Since the theory is based on a primitive notion of computability, absent from classical mathematics without prior development of automata theory or its equivalent (and arguably not even then), this imposes a requirement for constructive mathematics (e.g. in the style of Bishop or Martin-Löf), in which the primitive notion of function allows the use of the notion of effective procedure. Girard, in his stimulating and provocative chapter on the 'Meaning of Logical Rules I:
doi:10.1017/s0956796801214117 fatcat:5tmswn3qqbglfkio4prxcylahm