In 1971, Carl Linderholm published a book entitled Mathematics Made Difficult (Wolfe Publishing Ltd.; Zbl 217,1), in which he attempted to satirize the way in which (as he saw it) `abstract nonsense' was taking over the foundations of mathematics and making them incomprehensible. Nearly 30 years later, Paul Taylor has finally written the book of which Mathematics Made Difficult was a parody. That is not intended as a criticism of Practical Foundations of Mathematics; the reviewer has little sympathy with Linderholm's rather heavy-handed `humour', and is of the opinion that Taylor has written a splendid and highly enjoyable book. But the parallel between the two books is inescapable.
Taylor's book is both didactic and descriptive: it attempts to explain how mathematicians and informaticians (the latter being the author's appealing term for theoretical computer scientists) should view the foundations on which their work is based, but at the same time it attempts to tease out the logical structure underpinning the informal way in which mathematicians actually argue --- both today and in previous eras of history. It is this latter feature which makes it very different from most books on the foundations of mathematics, but at the same time brings it closer to Linderholm's satire. (To take two examples, the detailed description of the history of the algorithm for solving the general cubic equation, and its presentation as a program in the semi-formal language developed by the author (p. 198), remind one irresistibly of the tribulations of M. Boulangiaire in chapter 3 of Mathematics Made Difficult. And the author's concern for Bo Peep's difficulties in counting her sheep, evidenced by Exercise 1.1 on p. 60, might have been lifted straight from Linderholm's discussion of whether one can use the same number-system for adding and for counting.)
Mention of exercises is a reminder that this book is, at least partly, intended as a textbook. What sort of students could benefit from courses based on it? The author's own suggestion is that `the first three chapters should be accessible to final year undergraduates in mathematics and informatics'; this is probably true, provided the mathematics undergraduates have rather more familiarity with programming languages (and the informaticians have more familiarity with non-discrete mathematics) than is usual. (And both groups would find the exercises pretty hard going.) It is, above all, beginning graduate students in both disciplines who will find this book most useful; it will prompt them to think seriously about the foundations of their subjects, and the relations between them, in a way that no other existing book (known to the reviewer) can achieve. Indeed, if it succeeds in becoming widely used and quoted (as it deserves to do), then it may bring about an altogether new level of understanding, by each of the two groups, of the way in which the other group thinks about the subject it studies.
At the heart of the book, not surprisingly, is category theory. It is therefore a little unexpected not to find a chapter headed `Introduction to Categories' or something of the sort; Chapter III on posets and lattices is immediately followed by a chapter entitled `Cartesian Closed Categories'. However, readers who are newcomers to category theory should not despair: Chapter IV does largely consist of an introduction to category theory (albeit a rather more condensed one than that found in most textbooks on category theory), and this together with Chapter V on `Limits and Colimits' will serve to introduce such readers to all the important concepts of the subject (except, rather oddly, for adjunctions, which are held back until Chapter VII, although adjoint functors between posets have been treated in Chapter III).
The author's other main theme is structural recursion, which forms the title of Chapter VI but which, like the categorical notion of adjoint functor, actually pervades the whole book. Chapter VI itself is a tour of various aspects of recursive definitions: free algebras, the general recursion theorem (formulated, in the style of Gerhard Osius, as a theorem about well-founded coalgebras), tail recursion, and Kuratowski-finiteness. But the thing which links all of these to each other, and to the categorical ideas which are omnipresent in the foundations of mathematics, is the notion of the syntactic category of a theory and the syntax/semantics adjunction. These topics are covered more fully in the last two chapters, which introduce the notions of dependent types, fibrations and the categorical notion of quantification. Although, in these later chapters, the going inevitably gets tougher (as befits the subject-matter), the author's style remains user-friendly without becoming imprecise: a student who works through to the end of the book will (rightly) feel a real sense of achievement, but there is no reason why he shouldn't get there if he perseveres.
The book's collection of references is splendidly eclectic; Taylor is extremely good at pointing out the (sometimes surprising) sources of ideas that most of us take for granted, and at finding apposite quotations to support his argument. Indeed, the reviewer suspects that many readers will gain more enjoyment from reading the footnotes than they do from the text of this book. (The reviewer's favourite footnote, a rare unattributed example, is on page 192.) Taylor's insistence on spelling out the forenames of cited authors, whenever he knows them, may at first seem irritating to a reader brought up on the tradition of initials-plus-surname, but one soon gets used to it. Indeed, by the time one reaches the Bibliography, one is tempted to wonder what crimes Godfrey Harold Hardy can have committed in Taylor's eyes, to cause him to be reduced to `G.H.'. (In this respect, if in no other, Taylor's book is inferior to Linderholm's!)
[ P.T.Johnstone (Cambridge) ]