A side-effect of working on the Theme One program over the course of a decade was the measure of insight it gave me into the reasons why empiricists and rationalists have so much trouble understanding each other, even when those two styles of thinking inhabit the very same soul.
The way it came about was this. The code from which the program is currently assembled initially came from two distinct programs, ones I developed in alternate years, at first only during the summers.
In the Learner program I sought to implement a Humean empiricist style of learning algorithm for the adaptive uptake of coded sequences of occurrences in the environment, say, as codified in a formal language. I knew all the theorems from formal language theory that tell how limited any such strategy must ultimately be in terms of its generative capacity, but I wanted to explore the boundaries of that capacity in concrete computational terms.
In the Modeler program I aimed to implement a variant of Peirce’s graphical syntax for propositional logic, making use of graph-theoretic extensions I had developed over the previous decade.
As I mentioned, work on these two projects proceeded in a parallel series of fits and starts through interwoven summers for several years, until one day it hit me that the Learner, one of whose other names happened to be Index, could be put to work helping with sundry substitution tasks that needed to be done by the Modeler.
So I began to integrate the Learner and the Modeler, at first still working on the two component modules in an alternating manner, but devoting a portion of effort toward the task of amalgamating their principal data structures, bringing them into convergence with each other, and unifying them over a common basis.
Another round of seasons and many changes of mind and mood and programming style, I arrived at basically the same graph-theoretical data structure, strung like a wire through the far-flung pearls of my programmed wit. But the pearls I polished in alternate years maintained their shine along axes of polarization whose grains remained skew in regard to each other. That is to say, all the strategies that appeared to be the smartest tricks to pull from the standpoint of optimizing the program’s performance on the Learning task I found the next year were the dumbest moves to pull from the standpoint of its performance on the Reasoning task. I gradually came to appreciate this as a discovery …