Denotation in Algorithmic Perspective
Mihail Radu Solcan · 2006
The paper attempts to contribute to a new form of analytical philosophy. Classical analytical philosophy, illustrated by such masterpieces as Russell’s “On Denoting”[11] used logical tools borrowed from the predicate calculus. The new tools are borrowed from new chapters in logic, such as the study of computability, recursion and programming. The idea exploited in this paper is that expressions in natural language contain clues for the design of corresponding algorithms. In particular, descriptions offer clues for the computation of denotations or the attempt to compute a denotation. The paper stresses the idea that such algorithms do not function as meanings. They must be considered from the perspective of the actions of the person who is computing a denotation. 1 From Philosophy to Computational Intelligence A hundred years ago Bertrand Russell published a paper[11] in which he explained his version of the logical analysis of the natural language. The basic idea was that constructions in a natural language contain traps. We avoid such traps with the help of logic. The analysis illustrated by Bertrand Russell[11] had also an impact beyond philosophy, but we are interested in this paper only in the philosophical significance of this type of analysis. Russell’s analysis clearly separates the surface and the deep levels of the sentences formulated in a natural language. We reach the deep levels with the help of logic. Perhaps the most important feature here is the exactness, the precision that is obtained with the help of the symbolic apparatus. Logic and even philosophical logic have had an impact well beyond philosophy. In logical programming the predicate calculus has stimulated a stress on declarations and the extraction of implicit knowledge from explicit knowledge. In a computer language like Prolog, used in computational intelligence, the programmer does not formulate instructions for the computer. Almost as in classical logical analysis, the programmer relies on the precise formalization of chunks of knowledge and inferences. The Prolog system performs automatically the inferences. Thus from chunks of explicitly formalized declarations follow the logical consequences. Reading a treatise on artificial intelligence is quite an interesting experience for a philosopher. It is possible to read it as a kind of in— 3— 2. The impact of algorithm theory on logic and philosophy troduction to philosophy (mainly analytical philosophy, of course).1 Does however the connection work the other way round? Is it possible to track a distinct influence of the work done in computer science and computational intelligence upon philosophy? We tackle this question in the rest of the paper, but following the tradition o analytical philosophy we try to place it against the background of a more limited, specific problem. Therefore we have chosen a problem discussed in Russell[11]. 2 The impact of algorithm theory on logic and philosophy The question of the impact of the computer science upon philosophy presupposes an answer to another interrogation: which would be the lasting contribution of computing to the great ideas underlying theoretical thinking? Many people believe that the lasting contribution is summarized by one word: algorithm. The theory of algorithms is a newcomer. It started as a byproduct of the investigations in the 1930’s of the decision procedures in logical and mathematical systems. The theory of algorithms is now strongly associated with the development of computer science. There are a lot of interesting results in the pure theory of algorithms. There is, on the other hand, a lot of practical experience accumulated in the field of the design of algorithms. The practical design of algorithms displays a nice trait from the point of view of analytical philosophy. The design of an algorithm starts with an idea formulated in natural language. The algorithm is then translated into a more precise language and it is subjected to a process of stepwise clarification. Finally, there is a translation into a precise formal language. In analytical philosophy there is a tradition that stresses the importance of the clarification of ideas with the help of logic through a similar process. The notion of algorithm is usually defined in terms of instructions. An algorithm is made up of clear and unambiguous instructions for transforming an input into an output.2 We want to put We have mentioned in the bibliography the paper by Marcu and Hirst[6] because it covers some of the topics of the present paper. But it is also an example of a paper written for those interested in computational intelligence and computational linguistics which cites however philosophers: Frege, Russell, Meinong, Parsons. The authors use their contributions and build a system that, in its turn, could as well be studied by philosophers. Donald E. Knuth[5, §1.1] stresses first the finite and clear character of an — 4— 2. The impact of algorithm theory on logic and philosophy here this kind of definition in the perspective of the practical design of algorithms. The practical design of an algorithm starts with an idea formulated in a natural language. It is a very bad habit to start writing a computer program directly in a computer language. From the point of view of programming practice, the clarification process is the key. This process closely resembles the process of clarification through logical analysis. The difference is however that we are not looking for exact declarations concerning various situations; we are looking for the actions that lead to the desired result. As we have already observed, algorithms can be specified both in natural language and in the computer languages (which have the structure of a formal language). One can also specify algorithms in intermediary languages. A good programmer starts with a specification in a natural language and then she gives it a form in pseudocode (a mixture of natural language and formal constructions). This intermediate language is very useful and we are using it in this paper.3 What captures an algorithm? Any algorithm starts with the specification of an initial action. It then contains specifications for a finite number of actions that lead, after a finite number of steps, to a value. As we observed before, during the practical design of algorithms, there is a process of stepwise refinement of the initial formulation (in natural language) of the algorithm. For some authors, the algorithm captures the semantic content of the final ideal formulation in a symbolic language.4 This leaves however aside the problem of the continuity of the process of stepwise refinement of the algorithm. The view that we embrace here is that the algorithm is represented by what remained identical during the process of stepwise refinement. One may compare this view with the theories of peralgorithm. An algorithm has also input(s) and output(s). The output(s), the result(s) of the algorithm correspond to the value(s) returned by the algorithm. Knuth also emphasizes the significance of efficiency: the algorithmic process (the transformation of the input into the output according to the algorithm) must lead to a value in a reasonable time interval. The finite character of the process is not enough. For a very good introduction to algorithms see Baldwin and Scragg[1]. Their book on the science of computing uses as pseudocode a language that is very close to usual English. This is also a very good book for philosophers who have few ideas about algorithm theory. I think this is the view expressed by Knuth[5]. See also in § 2.1 the presentation of the important point of view of Yiannis Moschovakis.