Why am I asking to stop programming when I am advocating the experimentation of large systems by AI researchers? In fact, I recommend using a computer, but without programming it.
Indeed, programming is a complex task, and man is not very good at doing it, as we can see from the number of our bugs, and the delays, mistakes, and costs that they entail. When a computer works on an AI problem, it needs a huge amount of knowledge, but we must not give it inside programs. This knowledge is often unknown in the beginning, we have to experiment the system so that we can improve and complete it. Unfortunately, it is very difficult to modify a program, and we add a lot of new bugs doing it. To lessen this difficulty, it is better to separate knowledge from the way to use it, we must not give it in a procedural form as it is in a computer program: we give knowledge in a declarative form, which does not include how to use it. The drawback is that we need a general program that can use declarative knowledge.
Let us first examine what is declarative knowledge; the following sentence, taken from a French grammar, is declarative:
Articles agree in gender and number with the noun they determine.
This does not indicate whether one must verify this agreement when one finds an article, or a name, or at the end of the processing of a sentence, etc. It does not tell what one does when there is a disagreement, or if it is used when one processes a text in order to understand it, or when one writes a text, or in both cases. One could even decide not to use this rule in some situations, for instance, when parsing a text. An advantage of using declarative knowledge is that it is easy to modify it: if one wants the analogous rule for English, it is enough to remove the gender agreement, for Greek, to add “case”, and for Latin, where there are no articles, to remove it.
Some could say that the problem is not solved, we create a new problem, more difficult than the initial one: writing a program that can use declarative knowledge. However, we win because only one program is needed, it will be able to use declarative knowledge in any domain. Moreover, this reflectivity leads to another advantage: one can bootstrap the use of declarative knowledge, the knowledge necessary for using declarative knowledge must also be given in a declarative form.
One factor makes easier this bootstrap: knowledge may be more or less declarative, there is a large gap between purely procedural knowledge (such as it is in computer programs) and purely declarative knowledge (such as in the preceding grammar rule). When knowledge is more declarative, it is easier to create and modify it. The bootstrap progresses in increasing the declarativity of the pieces of knowledge used for solving our problem, and also the declarativity of the pieces that are necessary for using declarative knowledge. Let us give a less declarative example of the preceding grammar rule:
When one parses a text, and one finds a noun, one looks for its article, and one checks that both genders and numbers are the same.
We have mixed grammatical knowledge with indications on how to use it. This rule is less general than the initial one: it will not be used for generating a text.
For bootstrapping the use of declarative knowledge, I began with a program that could manage to use rather procedural knowledge, with only a few declarative aspects. This program was simple: it is easy to use knowledge, when it is given in a form similar to a programming language. With this program, the initial knowledge was transformed into a program. Since that time, I only had to increase the declarativity of knowledge, the old program creates a new program, which can use this new version. In that way, it is easier to give knowledge: using it, the system can accept knowledge more and more declarative. CAIA has written the 470,000 lines of C that make up CAIA for the present time, none has been written by myself. On the other hand, every bit of knowledge is now given in a formalism much more convenient that 25 years ago.
In that way, besides the main bootstrap where I am realizing an artificial AI researcher that will help me to advance AI, a “small” bootstrap makes easier the realization of this artificial researcher: its knowledge is given in a more and more declarative formalism.
Naturally, we must have programs, but they have to be written by the AI system itself. During the development of the AI bootstrap, each of the participants, myself and CAIA, has to do the tasks that he does the best. Artificial beings are much better than ourselves for programming: they are faster, and they are making less bugs. Contracting out the programming activities gives us more time for doing what we are still doing better than artificial beings: finding new knowledge in order to improve them.