New technology is often what has driven the creation of new science. And so it has been with Mathematica.
One of the main reasons I originally started building Mathematica was that I wanted to use it myself.
And having Mathematica was a bit like having one of the first telescopes: I could point it somewhere, and immediately see all sorts of new things that had never been seen before.
Much has been discovered with Mathematica in almost every area of science.
But my particular interest has been to create a new kind of science that is uniquely made possible by Mathematica: a science based on exploring the computational universe.
We are used to creating computer programs for particular purposes. But as a matter of basic science we can ask about the universe of all possible programs.
And with Mathematica it becomes easy to explore this.
A quarter of a century ago I had begun my exploration of the computational universe—and had glimpsed some remarkable phenomena.
Then, when Mathematica was built, I went back and started a systematic study of the computational universe.
The results were remarkable. Wherever I looked—even among the simplest of programs—I saw all sorts of complex and interesting behavior. And from what I found I could make progress on a remarkable range of longstanding questions across all sorts of areas.
For eleven years I worked to develop this. And finally, on May 14, 2002, I published what I had done in my book A New Kind of Science.
Today is the fifth anniversary of that event.
And much has happened in the past five years with what is often called “NKS” (after the acronym for the book title).
But much more is coming.
In my book I concentrated on science. On the basic science of exploring the computational universe. That no doubt will one day be like a physics, or a chemistry, or a biology—but concerned with exploring the abstract universe of possible programs.
And also on the applications of the basic science to foundational problems in the existing sciences.
But something that has become increasingly clear in the past five years is the central importance of NKS not only for science, but also for technology.
And indeed, it is interesting to see even in Mathematica 6 the increasing effects of NKS.
For many years we have used the NKS-inspired idea of automated algorithm discovery.
One might have thought that the best algorithms would always be constructed by explicit human effort: in effect, by carefully engineering every detail to be the way one wants it.
But one of the lessons of NKS is that out in the computational universe there are vast numbers of very simple programs with very rich and complex behavior.
And what is becoming increasingly clear is that one can “mine” what is in the computational universe to find programs—or algorithms—that are useful for many practical purposes.
It is often strange to look at these programs. Sometimes one can immediately see how they work—and often it seems quite clever. But much of the time we as humans have great difficulty understanding how they work.
Sometimes they seem like objects we might find in nature: they seem to share the kind of complexity we so often see in nature.
But in a sense they define a new kind of technology: a technology of programs mined from the computational universe, much as in the past we have mined materials from the physical universe.
Mathematica may well be the world’s single largest consumer of algorithms.
And increasingly we are finding the algorithms we need by mining the computational universe.
Perhaps I’ll talk about some of the specifics in other posts.
Here I’ll give one example—that dates all the way back to Mathematica 1.0.
The picture below is a classic NKS image: the rule 30 cellular automaton. The rule it uses is simple. But the behavior obtained by running the rule is surprisingly complex. And many aspects of it seem completely random.
And all the way back to Mathematica 1.0 we’ve used this cellular automaton to generate random sequences in Mathematica. There were all sorts of other pseudorandom generators that people had engineered by various Mathematica methods and other means.
And for a while we even made the mistake of using one of them to generate random reals. But over the years, problems were found with all of them. And only rule 30—found just by searching the computational universe—survived.
It’s hard to explain just why rule 30 works. There’s all sorts of analysis that’s been done on it, and all kinds of interesting things to be said about it. But it’s a bit like some electro-optic material or something that we might take from the physical universe: we just “mine” rule 30, refine it, and use it.
For Mathematica 6 we actually went further, and considerably optimized the way we do random sequence generation. But it’s still the same basic idea as rule 30: a system mined from the computational universe using NKS methods.
Five years is a short time in the development of a major intellectual direction like NKS.
But it’s been exciting to see all the things that have happened. And to watch the feedback loop close. A direction that was made possible by Mathematica is now a major force in advancing the technology of Mathematica itself.
I am particularly eager to see what the new technology of Mathematica 6 will make possible for NKS.
NKS is a particularly good topic for Demonstrations because–almost by definition–the code tends to be simple. Which makes the Demonstrations easy to read and modify—and easy for people to learn not only science, but also Mathematica programming from.
But the dynamic interface capabilities of Mathematica 6 seem likely to allow a qualitatively new level of NKS research.
It’s remarkable to realize that all the several years of early experiments I did on cellular automata—that later launched NKS–I can now repeat in a series of Mathematica 6 one-liners that would take me only a few minutes to write.
So now it’ll be exciting to watch just how far NKS—and the exploration of the computational universe—can be taken with the new technology we have.