John McCarthy writes:
It was obvious in 1971 and even in 1958 that AI programs suffered from a lack of generality. It is still obvious, and now there are many more details. The first gross symptom is that a small addition to the idea of a program often involves a complete rewrite beginning with the data structures. Some progress has been made in modularizing data structures, but small modifications of the search strategies are even less likely to be accomplished without rewriting.
Another symptom is that no-one knows how to make a general database of common sense knowledge that could be used by any program that needed the knowledge. Along with other information, such a database would contain what a robot would need to know about the effects of moving objects around, what a person can be expected to know about his family, and the facts about buying and selling. This doesn't depend on whether the knowledge is to be expressed in a logical language or in some other formalism. When we take the logic approach to AI, lack of generality shows up in that the axioms we devise to express common sense knowledge are too restricted in their applicability for a general common sense database. In my opinion, getting a language for expressing general common sense knowledge for inclusion in a general database is the key problem of generality in AI.
Production systems represent knowledge in the form of facts and rules, and there is almost always a sharp syntactic distinction between the two. The facts usually correspond to ground instances of logical formulas, i.e. the correspond to predicate symbols applied to constant expressions. Unlike logic-based systems, these facts contain no variables or quantifiers. New facts are produced by inference, observation and user input. Variables are reserved for rules, which usually take a pattern-action form. Rules are put in the system by the programmer or ``knowledge engineer'' and in most systems cannot arise via the action of the system. In exchange for accepting these limitations, the production system programmer gets a relatively fast program.
It seemed to me in 1958 that small modifications in behavior are most often representable as small modifications in beliefs about the world, and this requires a system that represents beliefs explicitly.
``If one wants a machine to be able to discover an abstraction, it seems most likely that the machine must be able to represent this abstraction in some relatively simple way'' (McCarthy 1959).
The 1958 idea for increasing generality was to use logic to express facts in a way independent of the way the facts might subsequently be used. It seemed then and still seems that humans communicate mainly in declarative sentences rather than in programming languages for good objective reasons that will apply whether the communicator is a human, a creature from Alpha Centauri or a computer program. Moreover, the advantages of declarative information also apply to internal representation. The advantage of declarative information is one of generality. The fact that when two objects collide they make a noise may be used in particular situations to make a noise, to avoid making noise, to explain a noise or to explain the absence of noise. (I guess those cars didn't collide, because while I heard the squeal of brakes, I didn't hear a crash).
Every increase in expressive power carries a price in the required complexity of the reasoning and problem solving programs. To put it another way, accepting limitations on the expressiveness of one's declarative information allows simplification of the search procedures. Prolog represents a local optimum in this continuum, because Horn clauses are medium expressive but can be interpreted directly by a logical problem solver.
One major limitation that is usually accepted is to limit the derivation of new facts to formulas without variables, i.e to substitute constants for variables and then do propositional reasoning. It appears that most human daily activity involves only such reasoning. In principle, Prolog goes slightly beyond this, because the expressions found as values of variables by Prolog programs can themselves involve free variables. However, this facility is rarely used except for intermediate results.
What can't be done without more of predicate calculus than Prolog allows is universal generalization.
John McCarthy (1927–2011), "Generality in Artificial Intelligence", 1987 (based on 1971) Turing Award Lecture, Communications of the ACM 30.12: 1029-1035.
HTML version (accessed 20111026); PDF version (accessed 20111026). The ACM's published version is online (accessed 20111026)
McCarthy's own notice says, "Generality in Artificial Intelligence relates to my ACM Turing Award lecture given in 1971. However, the ideas didn't gell (sic) sufficiently at that time to be written up. In 1987 ACM asked for a summary to include in a volume of Turing Award lectures. Instead I wrote this complete paper. Its actual relation to the 1971 lecture is hard to say." (accessed 20111026)