Also available as http://math.ucr.edu/home/baez/week240.html October 22, 2006 This Week's Finds in Mathematical Physics (Week 240) John Baez I'm back from Shanghai, and classes are well underway now. For the last few weeks I'd been frantically preparing a talk for Stewart Brand's "Seminars About Long-Term Thinking", up in San Francisco. I talked about how we need to "zoom out" of our short-term perspective to understand the history of the earth's climate and what we're doing to it now: 1) John Baez, Zooming out in time, http://math.ucr.edu/home/baez/zoom/ There's a lot of tricky physics in this business. Consider, for example, this graph of cycles governing the Earth's precession, the obliquity of its orbit, and the eccentricity of its orbit: 2) Wikipedia, Milankovitch cycles, http://en.wikipedia.org/wiki/Milankovitch_cycles The yellow curve combines information from all three of these cycles and shows the amount of solar radiation at 65 degrees north latitude. The bottom black curve shows the amount of glaciation. As Milankovitch's theory predicts, you can sort of see a correlation between the yellow and black curves - but it's nothing simple or obvious. One reason is the complex feedback mechanisms within the Earth's climate. Here's a great place to read about this stuff: 3) Barry Saltzman, Dynamical Paleoclimatology: Generalized Theory of Global Climate Change, Academic Press, New York, 2002. Anyway, now this talk is done, and I can concentrate more on teaching. In my seminar this year, we're focusing on two topics: quantization and cohomology, and classical versus quantum computation. I'm trying out something new: not only are the notes available on the web, there's also a blog entry for each class, where you can ask questions, make comments and correct my mistakes! 4) John Baez, Fall 2006 seminars: Quantization and cohomology, and Classical versus quantum computation. Notes by Derek Wise, homeworks and blog entries available at http://math.ucr.edu/home/baez/qg-fall2006/ I hope more people blend teaching with blogging. It's not too much work if someone with legible handwriting takes notes and the lectures can actually be followed from the notes. You can use blogging to interactively teach people scattered all over the planet! This week, James Dolan gave a talk on something he's been working on for a long time: games and cartesian closed categories. Lately he's been working with Todd Trimble, and they reproved some important results in a fun new way. Let me sketch the ideas for you.... Let's play a game. I have a set X in my pocket, and I'm not telling you what it is. Can you pick an element of X in a systematic way? No, of course not: you don't have enough information. X could even be empty, in which case you're clearly doomed! But even if it's nonempty, if you don't know anything about it, you can't pick an element in a systematic way. So, you lose. Okay, let's play another game. Can you pick an element of X^X in a systematic way? Here A^B means the set of functions from B to A. So, I'm asking if you can pick a function from X to itself in a systematic way. Yes! You can pick the identity function! This sends each element of X to itself: x |-> x You don't need to know anything about X to describe this function. X can even be empty. So, you win. Are there any other ways to win? No. Now let's play another game. Can you pick an element of X^(X^X) in a systematic way? An element in here takes functions from X to itself and turns them into elements of X. When X is the set of real numbers, people call this sort of thing a "functional", so let's use that term. A functional eats functions and spits out elements. You can scratch your head for a while trying to dream up a systematic way to pick a functional for any set X. But, there's no way. So, you lose. Let's play another game. Can you pick an element of (X^X)^(X^X) in a systematic way? An element in here eats functions and spits out functions. When X is the set of real numbers, people often call this sort of thing an "operator", so let's use that term. Given an unknown set X, can you pick an operator in a systematic way? Sure! You can pick the identity operator. This operator eats any function from X to itself and spits out the same function: f |-> f Anyway: you win. Are there any other ways to win? Yes! There's an operator that takes any function and spits out the identity function: f |-> (x |-> x) This is a bit funny-looking, but I hope you get what it means: you put in any function f, and out pops the identity function x |-> x. This arrow notation is very powerful. It's usually called the "lambda calculus", since when Church invented it in the 1930s, he wrote it using the Greek letter lambda instead of an arrow: instead of x |-> y he wrote lambda x.y But this just makes things more confusing, so let's not do it. Are there more ways to win this game? Yes! There's also an operator called "squaring", which takes any function f from X to itself and "squares" it - in other words, does it twice. If we write the result as f^2, this operator is f |-> f^2 But, we can express this operator without using any special symbol for squaring. The function f is the same as the function x |-> f(x) so the function f^2 is the same as x |-> f(f(x)) so the operator "squaring" is f |-> (x |-> f(f(x))) This looks pretty complicated. But, it shows that our systematic way of choosing an element of (X^X)^(X^X) can still be expressed using just the lambda calculus. Now that you know "squaring" is a way to win this particular game, you'll immediately guess a bunch of other ways: "cubing", and so on. It turns out all the winning strategies are of this form! We can list them all using the lambda calculus: f |-> (x |-> x) f |-> (x |-> f(x)) f |-> (x |-> f(f(x))) f |-> (x |-> f(f(f(x)))) etc. Note that the second one is just a longer name for the identity operator. The longer name makes the pattern clear. So far, all these methods of picking an element of X^(X^(X^X)) for an unknown set X can be written using the lambda calculus. There are other sneakier ways. For example, there's the operator that sends functions with fixed points to the identity function, and sends functions without fixed points to themselves. It's an interesting challenge to figure out all these sneaky ways, but it's way too hard for me. So, from now on, just to keep things simple, let's only consider "systematic ways" that can be expressed using the lambda calculus. To win one of my games, you need to use the lambda calculus to pick an element of the set I write down. So, let's play another game. Can you write down an element of X^(X^(X^X)) using the lambda calculus? An element in here eats functionals and spits out elements of X. So, it's called a "functionalal" on X. At least that's what Jim calls it. If I have an unknown set in my pocket, can you write down a functionalal on this set using the lambda calculus? Yes! You just need to pick a recipe that takes functionals on X and turns them into elements of X. Here's one recipe: take any functional and evaluate it on the *identity* function, getting an element of x. In lambda calculus notation, this recipe looks like this: f |-> f(x |-> x) Can you think of other ways to win this game? I hope so: there are infinitely many! Jim and Todd figured out a systematic way to list them all. Now let's play another game. Can you write down an element of X^(X^(X^(X^X))) using the lambda calculus? Such a thing eats functionalals and spits out elements of X, so it's called a "functionalalal". So, can you find a functionalalal on an unknown set in some systematic way? The answer is no: you lose. How about writing down an element of ((X^X)^(X^X))^((X^X)^(X^X)) using the lambda calculus? Such a thing eats operators and spits out operators, so it's called an "operatorator". The answer is yes: there are lots of ways to win this game. The real challenge is listing all of them! This is the sort of question Dolan and Trimble figured out the answer to - though as we'll see, they weren't the first. In fact, instead of moving on to functionalators, operatorals, operatoralatorals, and so on, let me just tell you trick for instantly deciding which of all these games you can win. You just take your game, like this: ((X^X)^(X^X))^((X^X)^(X^X)) and evaluate it by setting X = 0. If you get 0, there's no way to win. If you get 1, there's at least one way to win. To use this trick, you need to know that 0^0 = 1 This is something they don't teach in school! In analysis, X^Y can approach anything between 0 and 1 when X and Y approach 0 from above. So, teachers like to say 0^0 is undefined. But X^X approaches 1 when X -> 0. More importantly, in set theory, A^B stands for the set of functions from B to A, and the number of elements in this set is |A^B| = |A|^|B| When A and B are empty, there's just one function from B to A, namely the identity. So, for our purposes we should define 0^0 = 1. Consider the case of functionals, which are elements of X^(X^X). If we evaluate this at X = 0 we get 0^(0^0) = 0^1 = 0 So, there are no functionals when X is the empty set. So, you can't pick a functional on a unknown set in *any* systematic way. That's why you lose when your game evaluates to 0. It's more interesting to prove that for games evaluating to 1, there's a way to win, using the lambda calculus. But we'd really like to understand *all* the ways to win using the lambda calculus. And for this, Dolan and Trimble used the theory of holodeck games. In Star Trek, the "holodeck" is a virtual reality environment where you can play various games. On the holodeck, if you regret a move you made, you can back up to any earlier point in the game and make a new move. Actually I'm deviating from the technical specifications of the holodeck on Star Trek, as explained here: 6) Wikipedia, Holodeck, http://en.wikipedia.org/wiki/Holodeck So, if you're a Star Trek purist, it's better to imagine a video game where you can save your game at any state of play, and go back to these saved games whenever you want. And, you have to imagine being so paranoid that you *always* save your game before making a move. This allows games to go on forever, so we only say you have a winning strategy if you can win in a finite number of moves, no matter what the other player does. To make this completely precise, we consider two-player games where the players take turns making moves. When a player can't make a move, they lose. Any such game can be written as a "game tree", like this: | \/ \ | / \|/ In this example, the first player has three choices for her first move. If she picks the middle branch, the second player has one choice for his first move. Then the first player has one choice for her second move. Then the second player has no choice for his second move - so he loses. So, in this particular example the second player has no winning strategy. A cool thing about such a game is that we can take its game tree and turn it into an expression built from some variable X using products and exponentials. To do this, just put an X at each vertex of the tree except the root: X X X | \/ X X X \ | / X X X \|/ Then blow on the tree with a strong westerly wind, so strong that the branches blow away and only the X's are left: X XX X X X X X X This is just a way of writing an expression built from X using products and exponentials: X^X X^(X^X) X^(X^(XX)) Conversely, any such expression can be turned back into a tree, at least after we simplify it using these rules: (AB)^C = A^C B^C (A^B)^C = A^(BC) For example, consider the set of operators: (X^X)^(X^X) If we simplify this, we get X^(X X^X) or X X X X giving the tree X / X X \ / X | or in other words / \ / | And here's a cool fact: if you take any expression built from X using products and exponentials, and evaluate it at X = 0, you can tell which player has a winning strategy for the game described by the corresponding tree! If you get 1, the second player has a winning strategy; if you get 0, they don't. It's pretty easy to prove: try it. But if you've been paying attention, you'll have noticed something weird. I've told you TWO ways to get a game from any expression built from X using products and exponentials. First, the game of defining an element of the resulting set, using the lambda calculus. Second, the game we get by turning this expression into a game tree, like I just did. For *both* these games, you can decide if there's a winning strategy by evaluating the expression at X = 0. But are they the same game? No! One is the holodeck version of the other! Let's look at the familiar example of operators: (X^X)^(X^X) = X^(X X^X) This evaluates to 1 at X = 0. So, if we turn it into a tree / \ / | we get a game where the second player has a winning strategy. This game is not very exciting, but it becomes more exciting if you call it "The Lady or the Tiger". In this game, the first player has only one first move: he takes the second player to a room with two doors, corresponding to the two branches of the above tree. Then it's the second player's turn. If he opens the left door, a beautiful lady pops out and they instantly get married and live happily ever after. If he opens the right door, the first player opens a tiger cage. Then the tiger jumps out and eats the second player. In this game, the second player has just ONE winning strategy: on his first move he should choose the left door. Next look at the game of defining an element of (X^X)^(X^X) = X^(X X^X) using the lambda calculus. We've seen there are INFINITELY MANY strategies for winning this: (x |-> y) |-> (z |-> z) (x |-> y) |-> (z |-> (x |-> y)(z)) (x |-> y) |-> (z |-> (x |-> y)((x |-> y)(z))) (x |-> y) |-> (z |-> (x |-> y)((x |-> y)((x |-> y)(z)))) and so on. These correspond to 2nd-player winning strategies for the *holodeck version* of The Lady or the Tiger. What are these strategies? One is just to play the game and win by choosing the left door. Another is to choose the right door - and then, just when the tiger is about to eat you, back up and choose the left door! Another is to choose the right door - and then, just when the tiger is about to eat you, back up and choose... the right door! Whoops! Then, when the tiger is about to devour you again, back up again, and this time choose the left door. And so on: for each n, there's a strategy where you choose the right door n times before wising up and choosing the left door. Now, if you want a really nice math project, ponder the pattern relating all these strategies to the corresponding lambda calculus expressions: (x |-> y) |-> (z |-> z) (x |-> y) |-> (z |-> (x |-> y)(z)) (x |-> y) |-> (z |-> (x |-> y)((x |-> y)(z))) (x |-> y) |-> (z |-> (x |-> y)((x |-> y)((x |-> y)(z)))) etc. Then, figure out how to prove that for *any* 2-person game, say: | \/ \ | / \|/ there's a 1-1 correspondence between winning second-person strategies for the holodeck verson of this game and ways of using the lambda calculus to define elements of the corresponding set: X^X X^(X^X) X^(X^(XX)) Apparently this result goes back to work of Hyland and Ong in the early 1990s. Dolan rediscovered the idea, and Trimble and he have recently worked out a new proof. If you get stuck proving this result yourself, first try these notes from Dolan's talk, for some hints: 7) James Dolan, Holodeck strategies and cartesian closed categories, lecture at UCR, notes by John Baez, Oct. 19, 2006, available at http://math.ucr.edu/home/baez/qg-fall2006/f06week03b.pdf Then try Trimble's more rigorous, technical treatment, and the original paper by Hyland and Ong: 8) Todd Trimble, Holodeck games and CCCs, available at http://math.ucr.edu/home/baez/trimble/holodeck.html 9) Martin Hyland and C.-H. Luke Ong, On full abstraction for PCF, Information and Computation, 163 (2000), 285-408. Also available at ftp://ftp.comlab.ox.ac.uk/pub/Documents/techpapers/Luke.Ong/pcf.ps.gz Dolan's talk also explains some other fun stuff, like how to multiply and exponentiate games. So, if you read these notes, you'll learn how to play chess x go and chess^{go} at least after chess and go have been "improved" so games never last forever and the last player able to make a move wins. But, if you're planning to study this stuff, I'd better admit right now that Dolan and Trimble make heavy use of the relation between the lambda calculus and cartesian closed categories. A category is "cartesian" if it has finite products - or in other words, binary products and a terminal object. It's "cartesian closed" if it also has exponentials. All these terms are carefully defined in the week 2 and week 3 notes of my classical versus quantum computation course, so let me just illustrate them with an example: the category of sets. Here the product A x B of two sets A and B is their usual Cartesian product. The exponential A^B is the set of functions from B to A. Any 1-element set is a terminal object. Dolan and Trimble don't really talk about an unknown set X, as I did above. What they really study is the "free cartesian closed category on one object x", which I like to call CCC[x]. Any object in CCC[x] is built from the object x by means of binary products, exponentials and the terminal object. For example, we have objects like this: x^1 1^(x^x) (x x)^(x 1 x^(x^x)) where I've omitted the times symbols for products. However, every object is isomorphic to one in "tree form". For example, the above object is isomorphic to x x^(x x^(x^x)) x^(x x^(x^x)) which we can draw as a tree: x x | / x x x x \| |/ x x x \|/ Dolan and Trimble consider the set of elements of any object in CCC[x], where an "element" is a morphism from the terminal object, e.g. f: 1 -> x x^(x x^(x^x)) x^(x x^(x^x)) And, they show these elements are in 1-1 correspondence with second-player winning strategies for the holodeck version of the game whose tree is constructed as above. If we pick any set X, the universal property of CCC[x] gives a functor F: CCC[x] -> Set This maps elements of any object in CCC[x] to elements of the corresponding object in Set: F(f): 1 -> X X^(X X^(X^X)) X^(X X^(X^X)) So, the element f gives a "systematic way of picking elements" of any set built from any arbitrary set X using finite products and exponentials. There might be *other* things that deserve to be called "systematic ways of picking elements", but while that's an interesting question, it's not really the point here. By the way, in a cartesian closed category, there's a 1-1 correspondence between morphisms f: B -> A and elements f: 1 -> A^B So, one can use games to describe *all* the objects and morphisms in the free cartesian closed category on one object! One can also describe *composition* of morphisms using games. In short, there's a complete description of CCC[x] in terms of games. Now let me give you some references on cartesian closed categories, the lambda calculus, categorical semantics, and games. It's an interesting network of subjects. Categorical semantics was born in Lawvere's celebrated 1963 thesis on algebraic theories: 10) F. William Lawvere, Functorial Semantics of Algebraic Theories, Dissertation, Columbia University, 1963. Also available at available at http://www.tac.mta.ca/tac/reprints/articles/5/tr5abs.html Semantics deals with theories and their models. Dual to the concept of semantics is the concept of "syntax", which deals with proofs. In the case of algebraic theories, the syntax was studied before Lawvere in the subject called "universal algebra": 11) Stanley Burris and H.P. Sankappanavar, A Course in Universal Algebra, available at http://www.math.uwaterloo.ca/~snburris/htdocs/ualg.html Lawvere modernized universal algebra by realizing that an algebraic theory is just a cartesian category, and a model is a product-preserving functor from this theory into Set or some other cartesian category - hence his thesis title, "Functorial Semantics". I explained this in much more detail back in "week200". The relevance of all this to computer science becomes visible when we note that a proof in universal algebra can be seen as a rudimentary form of computation. The "input" of the computation is a set of assumptions, while the "output" is the equation to be proved. Treating proofs as computations may seem strained, but it becomes less so when we move to richer formalisms which allow for more complex logical reasoning. One of best-known of these is the lambda calculus, invented by Church and Kleene in the 1930s as a model of computation. Any function computable by the lambda calculus is also computable by a Turing machine, and according to the Church-Turing thesis these are all the functions computable by any sort of systematic process. Moreover, computations in the lambda calculus can actually be seen as proofs. The usefulness of this way of thinking was brought out in Landin's classic paper: 12) P. Landin, A correspondence between ALGOL 60 and Church's lambda-notation, Comm. ACM 8 (1965), 89-101, 158-165. This began a long and fruitful line of research - see for example this: 13) H. Barendregt, The Lambda Calculus, its Syntax and Semantics, North-Holland, 1984. The power of the lambda calculus is evident in the textbook developed for MIT's introductory course in computer science, which is available online: 14) H. Abelson, G. J. Sussman and J. Sussman, Structure and Interpretation of Computer Programs, available at http://www-mitpress.mit.edu/sicp/ It cites pioneers like Haskell Curry, and it even has a big "lambda" on the cover! Students call it "the wizard book", because the cover also features a picture of a wizard. It's used at over 100 colleges and universities, and it has spawned a semi-mythical secret society called The Knights of the Lambda Calculus, whose self-referential emblem celebrates the ability of the lambda calculus to do recursion. In 1980, Lambek made a great discovery: 15) Joachim Lambek, From lambda calculus to Cartesian closed categories, in To H. B. Curry: Essays on Combinatory Logic, Lambda Calculus and Formalism, eds. J. P. Seldin and J. Hindley, Academic Press, 1980, pp. 376-402. He showed that just as algebraic theories can be regarded as cartesian categories, theories formulated in the lambda calculus can be regarded as cartesian closed categories (or CCCs, for short). Lambek's discovery introduced a semantics for the lambda calculus, since it lets us to speak of "models" of theories formulated in the lambda calculus, just as we could for algebraic theories. In computer programming, the importance of a model is that it gives a picture of what a program actually accomplishes. A model in the category of Sets, for example, sends any program to an actual function between sets. There's no way to list all the interesting references to CCCs and the lambda-calculus, but here are some online places to get going on them, starting out easy and working up to the harder ones. This Wikipedia article is quite good: 16) Wikipedia, Lambda calculus, available at http://en.wikipedia.org/wiki/Lambda_calculus These blog entries by Mark Chu-Carroll are *lots* of fun - just the kind of readable, informal exposition I aspire to: 17) Mark Chu-Carroll, Lambda calculus, available at http://goodmath.blogspot.com/2006/06/lamda-calculus-index.html Mark Chu-Carroll, Category theory, available at http://scienceblogs.com/goodmath/goodmath/category_theory/ These go deeper: 18) Peter Selinger, Lecture notes on the lambda calculus, available at http://www.mscs.dal.ca/~selinger/papers.html#lambdanotes and deeper: 19) Phil Scott, Some aspects of categories in computer science, available at http://www.site.uottawa.ca/~phil/papers/handbook.ps and here's a classic: 20) Joachim Lambek and Phil Scott, Introduction to Higher Order Categorical Logic, volume 7 of Cambridge Studies in Advanced Mathematics, Cambridge U. Press, 1986. Dolan and Trimble are far from the first to study the relation between games and categories. In the 1970s, Conway invented a wonderful theory of games and surreal numbers: 21) John H. Conway, On Numbers and Games, Academic Press, New York, 1976. Second edition: A. K. Peters, Wellesley, Massachusetts, 2001. 22) Elwyn Berlekamp, John H. Conway, Richard Guy, Winning Ways, vols. 1-2, Aadmic Press, New York, 1982. Second edition, vols. 1-4, A. K. Peters, Wellelsey, Massachusetts, 2001-2004. 23) Dierk Schleicher and Michael Stoll, An introduction to Conway's games and numbers, available as math.CO/0410026. In 1977, Joyal modified Conway's work a bit and related it explicitly to category theory: 24) Andre Joyal, Remarques sur la theorie des jeux a deux personnes, Gazette des Sciences Mathematiques du Quebec, Vol I no 4 (1977), 46-52. For an online version in English, try: 25) Andre Joyal, trans. Robin Houston, Remarks on the theory of two-person games, 2003. Available at http://www.ma.man.ac.uk/~rhouston/Joyal-games.ps I don't know the subsequent history very well - I'm no expert on any of this stuff! - but by 1990 Martin Hyland was giving lectures on Conway games and logic. In 1992, Andreas Blass published an influential paper on "game semantics" for logic, where propositions are interpreted as games and winning strategies are proofs: 26) Andreas R. Blass, Game semantics and linear logic, Annals of Pure and Applied Logic 56 (1992), 183-220. Then came these important papers: 27) Samson Abramsky and Radha Jagadeesan, Games and full completeness for multiplicative linear logic, Journal of Symbolic Logic, 59 (1994), 543 - 574. Also available at http://citeseer.ist.psu.edu/564168.html 28) Martin Hyland and C.-H. Luke Ong, Fair games and full completeness for multiplicative linear logic without the MIX-rule, available at http://citeseer.ist.psu.edu/hyland93fair.html According to Samson Abramsky, After these results, it was clear that the most notorious issue in programming language semantics, the `full abstraction problem for PCF', was in range. Remarkably enough, two different teams: - Abramsky, Jagadeesan and Malacaria - Hyland and Ong produced really quite different constructions which yielded in the end the same result: a synthetic construction of the fully abstract model. (The technical issue in both cases was how to accomodate the linear exponentials, i.e. the possibility to copy and delete inputs to functions. It turned out there are two very different approaches which can be taken. The HO approach (also independently found by Hanno Nickau, incidentally) is quite related to the ideas of the Lorenzen school, but, crucially, done compositionally. The AJM approach is related to the Geometry of Interaction - but takes the quite demanding step of making an honest CCC out of it.) After that, the next key step was to see that the whole space of programming languages and computational features opened up to a game theoretic analysis in a very systematic way, by varying the conditions on strategies. This step was taken by myself and my students, and has led to a substantial further development. More recently, Luke Ong, Dan Ghica, Andrzej Murawski and myself have developed algorithmic game semantics, as a basis for compositional program analysis and verification, and - in Luke and Andrzej's hands - as a beautiful meeting point between semantics and algorithmics. There have of course been many other developments too, and many people have contributed. There have been recent workshops on these topics, e.g. in Seattle as part of the Federated Logic Conference in August. "PCF" is a souped-up version of the typed lambda calculus that allows one to do arithmetic and full-fledged computation. Here are the papers on PCF mentioned above: 29) Samson Abramsky, R. Jagadeesan, and P. Malacaria, Full abstraction for PCF, Information and Computation, 163 (2000), 409-470. Available at http://web.comlab.ox.ac.uk/oucl/work/samson.abramsky/pubs.html 30) Martin Hyland and C.-H. Luke Ong, On full abstraction for PCF, In Information and Computation 163 (2000), 285-408. Here are two papers by Luke Ong using game theory to study the lambda calculus: 31) A. D. Ker, H. Nickau, and C.-H. Luke Ong, A universal innocent game model for the Boehm tree lambda theory, in Computer Science Logic: Proceedings of the 8th Annual Conference on the EACSL Madrid, Spain, September 1999, LNCS Volume 1683, Springer-Verlag, 1999, pp. 405-419. 32) A. D. Ker, H. Nickau, and C.-H. Luke Ong, Innocent game models of untyped lambda-calculus, Theoretical Computer Science, 272 (2002), 247-292. For a good introduction to all this work, try these: 33) Robin Houston, Categories of Games, M.Sc. thesis, U. Manchester, 2003. Available at http://www.cs.man.ac.uk/~houstorx/msc.pdf Robin Houston, Mathematics of Games, continuation report, U. Manchester, 2004. Available at http://www.cs.man.ac.uk/~houstorx/continuation.pdf Finally, for more on categories, intuitionistic logic, and linear logic, see "week227". ---------------------------------------------------------------------- Quote of the Week: Unlike chess or astrology, mathematics has the curious property of being an intellectual game that really matters. - Rudy Rucker ---------------------------------------------------------------------- Addenda: I thank Samson Abramsky, James Dolan, Dominic Hughes, Tom Payne, Esa Peuha and Vaughn Pratt for helpful corrections. When I wrote the first version of this Week's Finds, I was ignorant of work before Dolan and Trimble's that also described the free cartesian closed category on one object in terms of games. In addition to Abramsky's corrections (some of which are above), I was gently set straight by Dominic Hughes, who has permitted me to attach this post of his from the category theory mailing list: This "backtracking game" characterisation has been known since around '93-'94, in the work of Hyland and Ong: M. Hyland and L. Ong. On full abstraction for PCF. Information and Computation, Volume 163, pp. 285-408, December 2000. [Under review for 6 years!] ftp://ftp.comlab.ox.ac.uk/pub/Documents/techpapers/Luke.Ong/pcf.ps.gz (PCF is an extension of typed lambda calculus.) My D.Phil. thesis extended the lambda calculus (free CCC) characterisation to second-order, published in: Games and Definability for System F. Logic in Computer Science, 1997 http://boole.stanford.edu/~dominic/papers/ To characterise the free CCC on an *arbitrary* set {Z,Y,X,...} of generators (rather than a single generator, as you discuss), one simply adds the following Copycat Condition: (*) Whenever first player plays an occurrence of X, the second player must play an occurrence of X. [Try it: see how X -> Y -> X has just one winning strategy.] Although the LICS'97 paper cited above appears to be the first place the Copycat Condition appears in print, I like to think it was already understood at the time by people working in the area. Technically speaking, winning strategies correspond to eta-expanded beta-normal forms. See pages 5-7 of my thesis for an informal description of the correspondence. It sounds like you've reached the point of trying to figure out how composition should work. Proving associativity is fiddly. Hyland and Ong give a very elegant treatment, via a larger CCC of games in which *both* players can backtrack. The free CCC subcategory is carved out as the so-called *innocent* strategies. This composition is almost identical to that presented by Coquand in: A semantics of evidence for classical arithmetic. Thierry Coquand. Proceedings of the CLICS workshop, Aarhus, 1992. Dominic PS A game-theoretic characterisation with an entirely different flavour (winning strategies less "obviously" corresponding to eta-long beta-normal forms) is: Abramsky, S., Jagadeesan, R. and Malacaria, P., Full Abstraction for PCF. Info. & Comp. 163 (2000), 409-470. http://web.comlab.ox.ac.uk/oucl/work/samson.abramsky/pcf.pdf [Announced concurrently with Hyland-Ong, around '93-'94.] On a different subject, James Dolan had this to say: you describe holodeck strategies for "lady or tiger" where you take back "just when the tiger is about to eat you", but that's not the way it works. you take back just _after_ the tiger has eaten you. (i guess that this is partially because of your lack of experience with computer games with a "saved game" feature. typically you die in the game and the computer plays some sort of funeral or at least funereal music; then you're taken to the reincarnation gallery where you select one to return to from your catalog of previous lives. or something like that.) In the first version of this Week's Finds I claimed that all systematic ways of picking an element of (X^X)^(X^X) could be defined using the lambda calculus. I was disabused of this notion by Vaughan Pratt, who wrote: Hi, John, In "week240", you said The moral of this game is that all systematic methods for picking an element of (X^X)^(X^X) for an unknown set X can be written using the lambda calculus. What is unsystematic about the contagious-fixpoint functional? This is the functional that maps those functions that have any fixpoints to the identity function (the function that makes every element a fixpoint) and functions without fixpoints to themselves (thus preserving the absence of fixpoints). It's a perfectly good functional that is equally well defined for all sets X, its statement in no way depends on X, and conceptually the concept of contagious fixpoints is even intuitively natural, but how do you write it using the lambda calculus? Many more examples in this vein at JPAA 128, 33-92 (Pare and Roman, Dinatural numbers, 1998). The above is the case K = {0} of Freyd's (proper) class of examples. Vaughan Here Pratt uses "functional" to mean what I was calling an "operator". For more discussion, go to the n-Category Cafe: http://golem.ph.utexas.edu/category/2006/10/this_weeks_finds_in_mathematic_1.html ---------------------------------------------------------------------- Previous issues of "This Week's Finds" and other expository articles on mathematics and physics, as well as some of my research papers, can be obtained at http://math.ucr.edu/home/baez/ For a table of contents of all the issues of This Week's Finds, try http://math.ucr.edu/home/baez/twfcontents.html A simple jumping-off point to the old issues is available at http://math.ucr.edu/home/baez/twfshort.html If you just want the latest issue, go to http://math.ucr.edu/home/baez/this.week.html