In Memoriam: John W. Addison Jr, my Phd Advisor.

John Addison (1930–2026) died last summer, 2025, at the age of 96. He was my PhD advisor at UC Berkeley, and I count myself extraordinarily lucky to have worked under his guidance.

When I arrived in Berkeley in 1966, I had no clear idea what I wanted to study. Some fellow Canadian newcomers strongly recommended a logic course taught by a professor named Addison. I went, was immediately captivated, and to this day I regard him as the best instructor I ever had—and my professors at he University of British Columbia (UBC) had already set a very high bar.

I especially loved how precise he was and I try to be equally so. His notational conventions were elegant and economical and I follow them religiously in my own work.

As an undergraduate at UBC I had taken no logic, so I needed special permission to enroll. I went to see Addison, and he agreed to let me in when I told him I had been the top science graduate at UBC. He didn’t have to: I had missed the first-year logic course and knew no proof theory. Nevertheless, his course, which focused mainly on model theory, provided an outstanding introduction to logic. I have always preferred model theory in logic and, correspondingly, semantics in computer science.

Addison’s exams were tough but brilliant, and they always contained a touch of humor. I vividly recall one true/false question: “This statement is false.” It was not an easy choice, because he deducted marks for wrong answers. The optimal strategy was to skip the question altogether—which is what I did—or lose a mark.

I loved the course and ended up tying for the top mark. The following year I eagerly enrolled in his seminar on definability, and it did not disappoint. Early in the seminar I was assigned an unsolved problem involving intricate proofs about the difficulty of defining certain point subsets (of the Baire Space, the set of all infinite sequences of natural numbers). I was completely stuck until Addison suggested I read a paper by Hartley Rogers. That paper solved a parallel problem in number theory, and by using analogical reasoning I eventually found, at the last moment, a similarly simple solution to my original problem.

My analogical solution relied on Addison’s description of continuous functions as continuously operating Turing machines. Given two sets of sequences, I showed that one could determine their relative complexity by means of an infinite game. Looking back, this episode illustrates how much I had already absorbed from Addison: the Turing-machine characterization of continuity, the central role of analogies, and the use of infinite games—the list goes on. In particular, it shows his uncanny ability to identify the technology needed at each crucial stage of a project, even before it was clear exactly how that technology would be applied.

At first I thought my infinite game was just a clever trick for cracking a difficult problem. Addison, however, encouraged me to study the game systematically, and that encouragement launched my PhD research. With his steady support and his crucial technical suggestions, I was eventually able to extract more and more structure until I arrived at a description of the order type of the Borel sets. By the time I finished, my dissertation ran to 350 typed pages.

Throughout this period Addison was remarkably generous with his time. Our meetings were not the standard one hour per week; I remember long discussions that went on for hours, covering not just my research but logic more broadly, including his recollections of conversations with Kurt Gödel. I was extraordinarily fortunate.

He was generous with his connections as well. He made sure I was introduced to the logic luminaries at Berkeley. I even took a seminar from the legendary Alfred Tarski. I will never forget an evening at Addison’s home where I met Kleene (of regular-expression fame) and Church (the inventor of the lambda calculus). Kleene had been Addison’s PhD advisor and Church’s student—and Addison himself was Church’s son-in-law.

In some ways Addison spoiled me: I became accustomed to being treated with respect and patience. He could tease, but he never disparaged me. I would later learn that this attitude is far from universal in academia.

When I left Berkeley, I moved into computer science and did not pursue my work on what are now called “Wadge degrees.” I suspect Addison was somewhat disappointed. Yet in my new career I drew constantly on what I had learned from him. For example, Edward Ashcroft and I designed the dataflow language Lucid. In dataflow programming, the central idea is a filter that transforms an input stream into an output stream. Streams are elements of the Baire space, and filters are precisely Addison’s continuously operating Turing machines.

To this day there is hardly a day when I am not reminded of something Addison taught me. Sometimes it is something small, like “never begin a sentence with a mathematical expression.” Sometimes it is something profound, such as “domains of infinite objects are simpler than domains of finite objects.”

I have supervised many PhD students of my own, and I have tried to emulate Addison’s methods. I have tried to be generous with my time and knowledge, to have high standaards but to never disparage my students, and always to remind them of their distinguished academic ancestry and their remarkable “grand supervisor.”

John W. Addison Jr. is no longer with us, but his spirit lives on in his academic descendants; certainly in me.

Posted in Uncategorized | Tagged , , | Leave a comment

A Functional Approach to Dictionaries

Dictionaries are extremely useful data objects. A dictionary is an associative store, basically a set of key-value pairs. A dictionary takes a key and returns the associated value.

Python has dictionaries and the Python engineers have put a lot of effort into making them efficient in both space and time. The PyFL interpreter makes extensive use of dictionaries and they are responsible for major improvements in performance. (PyFL is my experimental functional language.)

The obvious conclusion is that PyFL, too, should have dictionaries. A PyFL dictionary could simply be a Python dictionary wrapped in a functional interface.

Continue reading
Posted in Uncategorized | Tagged , , | Leave a comment

Functional OO in PyFL [130 views]

For along time I thought about adding object-oriented features to PyFL but couldn’t figure out how. Classes and methods don’t seem to fit into the declarative model, where all objects are immutable. But then I stumbled on an answer almost by accident.

My lucky break came when I figured out how to add structs to PyFl.

Structs

Almost every other programming language has some form of struct. A struct is a record with named components. For example, in most languages you can declare something like

struct Person {
    name: string
    surname: string
    dob: date
    job: occupation
}
Continue reading
Posted in Uncategorized | Tagged , , , | Leave a comment

PyFL and its While Clauses [130 views]

[This is another excerpt from the paper we were going to submit to ICFP 2025. Unfortunately it was immediately rejected because we included our names, contrary to the instructions that it is anonymous. Sigh]

PyFL is a pure and lazy functional language and yet has a limited, declarative form of iteration – a while loop construct (sounds impossible, but true). The while clause not only makes the coding easier, the iterative versions are often much more efficient.

Continue reading
Posted in Uncategorized | Tagged , , | Leave a comment

The Yin and Yang of Programming [3000 views]

[This is from a paper we’re submitting to the International Conference on Functional Programming (ICFP 2025)][update: the paper was rejected because we included our names, violating anonymity]

Introduction

Recursion and iteration are the Yin and Yang of programming. Conventional languages support both, but tend to favor the Yang – iteration. Java and C, for example, have elaborate while and/or for statements but can’t easily return functions as results. Python is a bit better. The Yin, we might say, is strong in that one. 

Continue reading
Posted in Uncategorized | Tagged , , | Leave a comment

The Root of all Evil- more sayings [210 views]

“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” ~ Donald Knuth

“Both women and computer science are the losers when a geeky stereotype serves as an unnecessary gatekeeper to the profession.” ~ Cordelia Fine

“All problems in Computer Science can be solved by another level of indirection.” ~ Butler Lampson

Continue reading
Posted in Uncategorized | Tagged , , | Leave a comment

“Computers are Useless” and Other Sayings [480 views]

“Computers are useless. They can only give you answers.” ~ Pablo Picasso

“Science is to computer science as hydrodynamics is to plumbing.” ~ Stan Kelly-Bootle

Back then, the entire Internet consisted of two slow, boxcar-sized UNIVAC computers about 50 feet apart, connected by a wire. It would take one of these computers an entire day to send an email to the other one, which would immediately delete it, because it was a Viagra ad.
Dave Barry

Continue reading
Posted in Uncategorized | Tagged , , , | 2 Comments

Old Masters, New Technology

Ive been looking at paintings a lot lately, and started to wonder, what would the old masters like Rembrandt make of new technology: trains, cars, TV etc? In particular, what would they make of computers and smart phones. How would they portray them in their paintings?

Impossible to know, you say. Yes, but we can guess – thanks to AI!

Continue reading
Posted in Uncategorized | Tagged , , , , , , | Leave a comment

The complete story of Gödel incompleteness. [4300 views]

The famous mathematician Kurt Gödel proved two “incompleteness” theorems. This is their story.

Continue reading
Posted in Uncategorized | 1 Comment

The Rise and Fall of GOFAI [3000 views]

Recently various pundits (including myself) have announced the end of Good Old Fashioned AI (GOFAI). But it has an impressive history, and encountered failure only on the verge of what would have been its greatest triumph.

What is GOFAI? Some say it is what grew out of the 1956 Dartmouth AI meeting. However others have described it as based on “symbolic reasoning”, which has a history well before 1956. We’ll adopt this definition.

Continue reading
Posted in Uncategorized | Tagged , , , , | 2 Comments