cs0402058/cs0402058
1: \documentclass[10pt]{article}
2: \bibliographystyle{alpha}
3: 
4: \oddsidemargin .25in
5: \evensidemargin .25in
6: \textheight 8in
7: \textwidth 6in         
8: 
9: \newcommand{\tab}{\hspace{5mm}}
10: 
11: \title{\it A Tribute to Alain Colmerauer}
12: \author{
13: \small{{JACQUES COHEN}}\\ 
14: \small{\textit{TJX/Feldberg Professor}}\\
15: \small{\textit{Volen Center}}\\ 
16: \small{\textit{Brandeis University}}\\ 
17: \small{\textit{Waltham, MA 02454, USA}}\\ 
18: \small{(\textit{e-mail:}\ \texttt{jc@cs.brandeis.edu})}}
19: \date{July 10, 2001}
20: 
21: \begin{document}
22: \maketitle
23: 
24: \section*{\centerline{Prelude}}
25: As an invited contributor to this Festschrift honoring Alain 
26: Colmerauer, I feel compelled to give not only an account of his 
27: main research contributions, but also of my perspective on the 
28: motivations behind them. I hope that this will provide the reader 
29: with a glimpse of how a focused, tenacious, rigorous, and inventive 
30: mind like Alain's picks research problems and proceeds to solve 
31: them. 
32: The history of Prolog, the language that remains one of Alain's 
33: major accomplishments, is well documented. His paper on the 
34: \textit{``Birth 
35: of Prolog,''} co-authored with Philippe Roussel \cite{CR96}, is a 
36: highly recommended account of the circumstances that led to the 
37: development of Prolog. Bob Kowalski \cite{Kow88} presents his views 
38: of the early history of Prolog from the automatic theorem proving 
39: perspective. Finally, my own paper on the topic \cite{Coh88} contains 
40: material complementing Alain's and Bob's narratives. 
41: Instead of recasting already-available historical material, I 
42: have opted to present here a more personal account of Alain's 
43: contributions, acknowledging in advance the individual bias inherent 
44: in such an accounting of long-past events. 
45: 
46: 
47: \section*{\centerline{An Early Encounter: the Sixties}}
48: I have been fortunate enough to work closely with Alain Colmerauer 
49: for almost four decades. We met in the early fall of 1963, when 
50: Alain was in his early twenties, had just completed his undergraduate 
51: studies at the Institut Polytechnique de Grenoble, France, and 
52: was contemplating a doctoral degree.
53: I had been attracted to Grenoble by the expansion that was taking 
54: place in the development of the new field of computer science, 
55: an expansion based on applied mathematics. At that time, the 
56: education in applied mathematics emphasized mostly numerical 
57: analysis and Boolean algebra. The Institute of Applied Mathematics 
58: in Grenoble (known by its French acronym IMAG) was led by Professor 
59: Jean Kuntzmann, a specialist in Boolean algebra; his closest 
60: associate was Professor Noel Gastinel, an expert in numerical 
61: analysis. 
62: In addition to Professors Kuntzmann and Gastinel, two younger 
63: researchers were prominent in the faculty at the Institute: Louis 
64: Bolliet, an experienced programmer of the earlier computers, 
65: and Bernard Vauquois, an astronomer by training, who became involved 
66: in formal language and automata theory and its application to 
67: automatic natural language translation.
68: There were two events that made 1960s Grenoble an exciting place 
69: for research in computer science. The first was an on-going effort 
70: by European and American researchers to design and implement 
71: a standard computer language, Algol60, based on the experience 
72: gained in developing earlier languages such as Fortran. The second 
73: was the availability of a mainframe computer (IBM 7044) that 
74: offered the IMAG researchers superior opportunities for computation 
75: in those early days.
76: Most of what we learned in Grenoble at that time consisted of 
77: novel techniques that had been recently proposed and published 
78: in \textit{Communications} and the \textit{Journal} of the ACM, or in 
79: contemporary 
80: monographs and dissertations. I recall that Bernard Vauquois, 
81: a member of the Algol60 original design team, and who was then 
82: directing a group on mechanical translation, was teaching a course 
83: in languages and automata theory. The course was purely theoretical, 
84: and it was our responsibility to work toward application of those 
85: theories to language implementation using the existing computers.
86: One of the main goals of the computer science team at IMAG was 
87: to develop an Algol60 compiler for the newly acquired IBM machine. 
88: Jean-Claude Boussard was the doctoral student responsible for 
89: developing the compiler. This software would be among the first 
90: Algol compilers developed in France.
91: Algol60 had a rigorous definition of its syntax, using what is 
92: known today as Backus-Naur-Form or BNF. In those days syntax-directed 
93: compilers were studied at the research level, but were considered 
94: inefficient for implementation in the available machines. Nevertheless, 
95: the graduate students in the compiler group of Louis Bolliet, 
96: including Alain and myself, were fascinated by the possibility 
97: of using syntactic rules as templates for building compilers. 
98: 
99: 
100: 
101: \section*{\centerline{Alain's First Research Project}}
102: The project that would tentatively make up Alain's dissertation 
103: was to design and implement an error-detecting program to be 
104: used as a front-end for a Cobol compiler. Cobol's syntax was 
105: available in BNF, but Alain's goal was to design a general syntax-directed 
106: general program. The implementation itself was to be written 
107: in Algol60 using the compiler being developed in Grenoble.
108: At that time, there were very few papers available on compilers. 
109: The prevalent approach was that of Dijkstra's stack-machine model 
110: which eventually became available in the book of Randell and 
111: Russell \cite{RR64}. Through Louis Bolliet we obtained an interesting 
112: new paper by Robert W. Floyd, who was at the time working at 
113: Computer Associates, near Boston. The paper was entitled ``Syntactic 
114: Analysis and Operator Precedence,'' and had appeared in a recent 
115: (1963) issue of the \textit{Journal} of the ACM \cite{Flo63}. Basically, 
116: Floyd had found a way of automatically generating Dijkstra's 
117: stack operator precedences for languages exhibiting a special 
118: restricted form of grammar rules.
119: 
120: I recall that Alain became extremely interested in that paper 
121: and decided to use Floyd's precedence grammars in his syntax-driven 
122: error-detector for Cobol. This was easier said than done. Anyone 
123: familiar with that approach realizes that Cobol's syntax does 
124: not easily conform to a precedence form. There were a multitude 
125: of precedence conflicts that would have to be resolved ``manually,'' 
126: that is, case by case. In addition, precedence grammars, being 
127: deterministic, would not allow rules with identical right-hand-sides 
128: and that characteristic was common in the existing BNF definitions 
129: for various languages.
130: 
131: Thus, Alain's initial problem was more difficult than he had 
132: anticipated. The reader will soon realize that what happened 
133: in bypassing that problem is typical of Alain's reaction when 
134: confronted with an obstacle. 
135: I open a parenthesis to mention a couple of Alain's traits that 
136: shed some light onto his creativity and perseverance. We used 
137: to drive through the narrow old streets of Grenoble and surrounding 
138: towns. Alain seldom took the same route twice: his innate curiosity 
139: often led him to find new ways of going from one spot to another. 
140: That temperament obviously served him well when it came to problem 
141: solving. I also remember that Alain had rented a studio apartment 
142: in one of the boulevards of Grenoble. He loved and still loves 
143: sports, sailing being one of his favorite hobbies. I recall that 
144: he had decided to build a small sailing boat in his studio; when 
145: the boat was ready, colleagues and I helped Alain remove it through 
146: a window. I am sure that he had taken the necessary precautions 
147: by careful measurements of the room, prior to undertaking the 
148: unusual project. Again it seemed that Alain had the knack for 
149: generating clever problems and then surmounting them. (Perhaps 
150: even his choice of living in a street named \textit{Impasse des Iris} 
151: is not completely random!) 
152: Now, to continue with the precedence grammar problem to which 
153: Alain had applied himself. A paper of Griffiths and Petrick also 
154: came to our attention \cite{GP65}. It involved the design of a two-stack 
155: Turing Machine (TM) to estimate the efficiency of various context-free 
156: parsing methods, in particular the approaches known as top-down 
157: and bottom-up. The authors had cleverly simulated various existing 
158: parsers using TM sets of instructions. 
159: I remember Alain avidly reading that paper. The notion of nondeterminism 
160: was implicit in the TM instructions; the efficiency of various 
161: parsers was estimated by simulating the TM in a computer and 
162: by determining the number of steps needed to parse representative 
163: strings generated by typical grammars.
164: Alain's acumen in bypassing difficulties with precedence conflicts 
165: amounted to generalizing Floyd's precedence parsers to be able 
166: to process more general languages than those advocated by Floyd. 
167: Basically, bottom-up and shift-reduce parsers replace the right-hand-side 
168: of a rule by its left-hand-side. When parsing from left to right, 
169: the element on the top of the stack is compared with the current 
170: element in the string being parsed. That introduces asymmetry, 
171: as only the stack may contain non-terminals allowing the parser 
172: to manipulate them.
173: By using two stacks, \textit{\`{a} la} Griffiths and Petrick, symmetry 
174: is restored since the input string being parsed is placed in 
175: a second stack, and reductions may occur in either stack. This 
176: extension allows for the parsing of a significantly more general 
177: class of languages than those defined by simple precedence. It 
178: then became possible to handle parsing and error detection based 
179: on the existing Cobol syntactic rules, virtually without ``manual'' 
180: intervention.
181: 
182: 
183: \section*{\centerline{A Premonition for Prolog: the Late Sixties }}
184: Alain's JACM paper on Total Precedence summarizes his dissertation 
185: and provides a preview of the ingeniousness, simplicity and rigor 
186: he applied to the solving of a fairly complex computer science 
187: problem \cite{Col70}. The dissertation can also be viewed as containing 
188: ingredients that appeared later on in the development of Prolog 
189: (e.g., parsing and nondeterminism).
190: The language Algol68 was being perfected at about the time of 
191: the completion of Alain's thesis. He showed great interest in 
192: the two-level grammars proposed by van Wijngaarden to define 
193: the syntax of that new language \cite{Wij68}. Again, that formalism 
194: had some intriguing resemblance with the one that later became 
195: Prolog rules. (This is because two-level grammars can represent 
196: a potentially infinite number of context-free rules.)
197: Around 1967, Grenoble's compiler team familiarized itself with 
198: yet another paper by Robert Floyd; in this paper, he proposed 
199: annotations to a computer language that allowed its processor 
200: to deal with (\textit{don't know}) nondeterministic situations 
201: \cite{Flo67}. 
202: Floyd also proposed an implementation of his ideas using 
203: flowcharts. A group of graduate students including Alain actually 
204: implemented a version of nondeterministic Algol60 that proved 
205: successful in describing succinctly the solution of combinatorial 
206: problems.
207: I offer the above reminiscences of the precursors to Prolog because 
208: I firmly believe that the papers of Floyd, Griffiths \& Petrick, 
209: and van Wijngaarden were pivotal in establishing a frame of mind 
210: that prepared Alain for the ``discovery'' of Prolog. 
211: If I recall correctly, in one of the Algol68 design meetings, 
212: Alain had suggested to van Wijngaarden the incorporation of 
213: nondeterministic 
214: constructs into Algo68; the latter replied with something like: 
215: ``Wait young man, one should not introduce a feature into a language 
216: just because of it being nifty.'' It seems that it behooved to 
217: Alain to do precisely that a decade later.
218: 
219: \section*{\centerline{The Stay in Montreal}}
220: Around 1967, upon finishing his doctoral degree at Grenoble, 
221: Alain spent three years at the University of Montreal. The University 
222: of Montreal and other Canadian universities were attractive options 
223: for the military service of young Frenchmen, including Alain. 
224: While in Montreal, Alain decided to concentrate his research 
225: on natural language processing and artificial intelligence (AI). 
226: His interactions were with both computer scientists and linguists, 
227: and his decision to include both disciplines in his research 
228: must have been due in no small part to his wife, Colette, who 
229: is an accomplished linguist.
230: During that period Alain developed Q-systems, now considered 
231: the precursor of Prolog's operational semantics. Essentially 
232: it consists of a set of rules specifying that a sequence of trees 
233: can be rewritten into another sequence of trees; a version of 
234: that model was subsequently used by Alain to define rigorously 
235: the semantics of later versions of Prolog.
236: In my view, Alain was continuing to generalize his work on context-free 
237: parsers to include nondeterminism. That is a key feature in 
238: natural language processing, where dealing with ambiguities is 
239: a must. In addition, since syntax \textit{per se} is insufficient to 
240: deal with semantics, Alain embarked on an in-depth study of 
241: theorem-proving 
242: techniques and became aware of the famous paper by Alan 
243: Robinson on resolution and unification. That paper had been published 
244: two years earlier \cite{Rob65}. It was Cordell Green in 1969 who 
245: had proposed using theorem-proving as an approach to problem 
246: solving \cite{Gre71}.
247: When Alain was considering returning to France in 1969 he had 
248: multiple choices. Under the sponsorship of Robert Floyd, Alain 
249: had an interview for an appointment at Stanford University. The 
250: final choice of Marseille is typical of what one would expect 
251: from Alain. He could easily have had a position in a French university 
252: with an already-established group in computer science, but he 
253: preferred to start his own department from scratch. He must also 
254: have been fascinated by the natural beauty of the neighboring 
255: towns in Provence, like Aix-en-Provence and Cassis. 
256: As a good hiker and sailor, 
257: the calanques (fjord-like inlets) in Cassis must also have exerted 
258: a strong attraction.
259: 
260: 
261: \section*{\centerline{Back to France and the Dawn of Prolog: the Seventies}}
262: Upon returning to France and settling in Marseilles, Alain had 
263: the challenging task of starting a new computer science department 
264: at the campus of Luminy. He surrounded himself by bright students, 
265: among them Philippe Roussel, and concentrated his research on 
266: theorem-proving and computational linguistics. The computing 
267: facilities in Marseilles were minimal, and this must have been 
268: anticlimactic considering the good equipment available in Grenoble 
269: and Montreal. The struggle to obtain adequate computers is one 
270: that Alain had to face throughout his tenure as chair of the 
271: budding CS department in Luminy.
272: In the late sixties and early seventies the artificial intelligence 
273: group at Edinburgh was among the best in Europe. A team there 
274: was exploring the potential of automatic theorem-proving techniques 
275: to problem solving. A doctoral student from Edinburgh, Bob Kowalski, 
276: had shown how to reduce substantially the search space for 
277: resolution-based 
278: theorem-provers \cite{KK71}. Alain obtained funds to invite Bob for 
279: a stay in Marseilles and the cooperation between Edinburgh and 
280: Marseilles flourished. As I mentioned earlier the history of 
281: that cooperation is well documented.
282: It is fair to state that before Alain Colmerauer's entry into 
283: the field of programming language design, there were basically 
284: two applicable paradigms: one representing imperative languages 
285: (like Algol or Fortran) and the other functional languages (like 
286: Lisp). Alain's and Bob's remarkable insight was to ``invent'' or 
287: ``discover'' a third paradigm, known as logic programming languages 
288: and represented by Prolog. Prolog's simplicity and logical foundations 
289: contributed to its worldwide acceptance and success. Perhaps 
290: the definitive indication of the worldwide acceptance has been 
291: the adoption of Prolog as the main language for the Fifth Generation 
292: Japanese Computer Project. 
293: Alain's many contributions to the elegant usage and basic features 
294: of Prolog remain valid to this day. They include the widespread 
295: use of the so-called metamorphosis grammars or the equivalent 
296: definite clause grammars, the suggestion of control annotations 
297: (e.g., the cut), the use of lazy evaluation, and so forth. Even 
298: the first usage of the now ubiquitous concatenation predicate 
299: \textit{append} is 
300: due to Alain. As in the case of Lisp, that procedure allows a 
301: user to perform clever text processing. Furthermore, because 
302: of Prolog's capabilities for inverse computations, \textit{append} 
303: can simulate other functions including table-lookup. 
304: I should mention here Bob Pasero and Henri Kanoui, who were among 
305: Alain's first doctoral students. Bob closely examined the problems 
306: of natural language understanding, and Henri explored the symbolic 
307: formula manipulation techniques that made use of the inverse 
308: computation capabilities of Prolog.
309: 
310: 
311: \section*{\centerline{Prolog II: the Eighties}}
312: The above contributions, even though major, were but a prelude 
313: to the more ambitious design features that Alain incorporated 
314: into the first extension to Prolog, known as Prolog II. They 
315: were the unification of infinite trees and a new predicate for 
316: testing non-equality of those trees. Those developments took 
317: place in the late seventies and early eighties. It is admirable 
318: that Alain and his colleague Michel van Caneghem were able not 
319: only to design the new language features but to implement them 
320: in what is now recognized as a very primitive personal computer: 
321: an Apple II. One can only marvel that Alain and Michel had implemented 
322: a virtual memory system using a floppy disk in a computer with 
323: a tiny fast (RAM) memory! 
324: I recall that one of the feats that Michel and Alain incorporated 
325: in the Apple II- Prolog II system was the ability to abort computation 
326: using a \textit{control-C} command, and to manage to safeguard all 
327: the important information prior to issuing that command. It must 
328: also have been an immense source of frustration to have a virtual 
329: memory system based on fairly unreliable floppy disks. In any 
330: case, that implementation became a forerunner of what now occurs 
331: in a PC implementation of Prolog, with all the trimmings such 
332: as debugging features and garbage collection.
333: In the mid-eighties I had the good fortune of being invited by 
334: Alain to teach a compiler course at Luminy at the same time that 
335: John McCarthy from Stanford had been invited there to present 
336: seminars in non-monotonic logic. I recall with amazement the 
337: times in which we had the opportunity to dine together and discuss 
338: problems in computer science. At that time McCarthy had recently 
339: proposed the new area of non-monotonic logic and two of Alain's 
340: top students were writing their dissertations on that topic. 
341: 
342: I also recall that John McCarthy mentioned that he belonged to 
343: a futuristic society, in California, that was planning to have 
344: scientists spend time in a moon colony to study problem solving 
345: capabilities in planetary environments. He suggested that Alain 
346: and Colette be included among potential candidates for the lunar 
347: sojourn. (Knowing the adventurous side of Alain and Colette I 
348: am not sure that they would have completely dismissed the idea 
349: as farfetched.) 
350: In another conversation with John, Alain mentioned that in the 
351: late sixties he had been invited to join the Stanford faculty. 
352: To this John retorted: If you had accepted that offer you probably 
353: would not have come up with Prolog!
354: Let me return to the novel features of Prolog II, namely infinite 
355: trees and \textit{diff} (the non-equality predicate). They are 
356: definitely 
357: the precursors of constraints as understood now in the Constraint 
358: Logic Programming (CLP) paradigm. Behind these features is the 
359: desire to extend, in a clean manner, the equality and non-equality 
360: predicates to new domains.
361: 
362: \section*{\centerline{CLP and Prolog III: the Nineties}}
363: The addition of infinite trees and \textit{diff} enabled Alain to 
364: carry out yet another new design, this time introducing new data 
365: types and global operators. To perform equalities in linear algebra 
366: with the necessary rigor, one must introduce first the domain 
367: of rationals, and second the capability to test the satisfiability 
368: of systems of linear equations, inequations, and disequations. 
369: In Prolog III, a harmonious design included the blending of the 
370: domain of infinite trees with that of the rationals and also 
371: with two additional domains: Booleans and a new domain called 
372: linear lists. With Prolog III, the original Prolog becomes just 
373: a special case of CLP.
374: It is essential to point out the significant role that Alain's 
375: doctoral students had in the development of the later Prologs. 
376: The implementation of Prolog III is in itself a work of programming 
377: art. One had to be thoroughly familiar with the admirable abstract 
378: machine proposed by David H. Warren and to extend it in a substantial 
379: manner in order to incorporate Boolean processors \textit{\`{a} la} 
380: Davis-Putnam, 
381: simplex-like solvers capable of detecting when a variable becomes 
382: bound to a specific value, special garbage collectors, and so on.
383: All this had to be done by providing a seamless interaction among 
384: the four domains: infinite trees, rationals, Booleans, and linear 
385: lists. Furthermore, there was the implicit requirement that, 
386: when confronted with a standard Prolog program, the compiler 
387: should produce code as efficiently as a Prolog processor unencumbered 
388: by the new extensions. In the quest of designing the various 
389: components of Prolog III, Alain mentored several doctoral dissertations 
390: that delved deeply into the algorithmic components necessary 
391: to process each specific domain.
392: Prolog III extended Prolog's applications into the realm of numerical 
393: computations, which are the staple of work in linear algebra 
394: and in operations research (OR). After designing Prolog III, 
395: Alain concentrated his interest on the extremely difficult combinatorial 
396: algorithms needed to solve scheduling problems in OR. At that 
397: time Alain also became acquainted with the work of William Older 
398: on the incorporation of interval domains to Prolog \cite{OV90}. Alain 
399: saw a renewed opportunity to extend Prolog III to deal with this 
400: new domain. 
401: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
402: % for a better look of the previous page 
403: %\newpage 
404: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
405: \section*{\centerline{Intervals and Prolog IV: the Late Nineties}}
406: Prolog IV can be viewed as the culmination of Alain Colmerauer's 
407: efforts in language design; of course, each one of Alain's major 
408: accomplishments was considered as the culmination of the previous 
409: one! Prolog IV's balanced design surpasses that of Prolog III. 
410: The introduction of interval variables not only enables a machine-oriented 
411: rigorous definition of reals (the floating-point numbers), but 
412: it also subsumes rationals, integers, and Booleans. Essentially, 
413: Booleans are a particular case of finite domains, and the latter 
414: are a particular case of real variables expressed in floating-point 
415: notation. The introduction of interval variables also paved the 
416: way for dealing with non-linear numerical problems and enabled 
417: the practical solution of scheduling problems that previously 
418: required hours of computations.
419: In addition, interval variables allow for proving propositions 
420: asserting the nonexistence of solutions to systems of equations 
421: or inequations in which variables are required to have values 
422: within certain ranges. When confronted with such situations, 
423: if a processor for an interval constraint language replies ``no,'' 
424: then it implicitly provides a proof that no solution exists (i.e., 
425: assuming that the interpreter is proven correct). 
426: 
427: 
428: \section*{\centerline{A Continued Love for Puzzles}}
429: Alain has always had an interest in solving mathematical puzzles. 
430: In the realm of Booleans, Alain admired the logical puzzles of 
431: Lewis Carroll (and not incidentally, Alain's youngest daughter 
432: was named Alice). He continually seeks out new puzzles in the 
433: French daily \textit{Le Monde} and in \textit{Scientific American}. 
434: 
435: In this context, one of the latest combinatorial problems holding 
436: Alain's interest is finding the squares that can be covered by a set 
437: of different smaller square \cite{G99}. He has proposed one of the 
438: most succinct and remarkable Prolog programs to accomplish that task 
439: efficiently.
440: 
441: 
442: 
443: \section*{\centerline{Current Work}}
444: Of late, Alain has also applied himself to the problem of sorting 
445: interval variables [Alain Colmerauer and No\"elle Bleuzen-Guernalec, 2000]. 
446: Donald Knuth, one of the world's leaders 
447: in computer science, has devoted a full volume of his collected 
448: works to sorting. Alain's involvement in sorting brings a fresh 
449: new approach to that basic problem. Furthermore, this type of 
450: sorting has proved to be of paramount importance in scheduling, 
451: one of the most difficult tasks in Operations Research. Alain's 
452: approach achieves the complexity of classical sorting and even 
453: though no large application of the problem is presently known, 
454: it is not unlikely that it will occur in the future.
455: 
456: Finally, in the past year or so Alain has also renewed his interest 
457: in an extension of Prolog originally proposed by Michael Maher 
458: \cite{Mah88}. This extension consists of allowing a user to incorporate 
459: existential and universal quantifiers to Prolog clauses. Michael 
460: had written a theoretical account and provided proofs of the 
461: validity of that approach. Alain's most recent paper demonstrates 
462: that Maher's ideas are feasible in practice and can be effectively 
463: used for solving interesting problems [Alain Colmerauer and Dao 
464: Thi-Bich-Hanh, 2000].
465: 
466: 
467: 
468: \section*{\centerline{Postlude}}
469: One can only marvel at the breadth and scope of Alain Colmerauer's 
470: research. His contributions range from computational linguistics, 
471: to symbolic manipulation, to language design, to symbolic logic, 
472: to operations research. This range is matched by in-depth analyses 
473: of the solutions he has found for complex problems. In the history 
474: of computer science, the combination of theory and practice present 
475: in Alain's work has been achieved only rarely. And who knows 
476: -- Alain may still have a couple of good tricks up his sleeve!
477: The above paragraph brings to mind a favorite Unix fortune cookie 
478: saying (those that are used to bid farewell after each session):
479: 
480: \vskip 10pt
481: 
482: \par\noindent\textit{Failure:}
483: \par\noindent\textit{Work hard to improve}
484: \par\noindent\textit{Success:}
485: \par\noindent\textit{You solved the wrong problem}
486: \par\noindent\textit{Work hard to improve}
487: 
488: \vskip 10pt
489: 
490: The metaphor aptly describes the behavior of a Prolog interpreter 
491: traversing a search tree while attempting to find all solutions 
492: to a given program. The metaphor also aptly portrays the tribulations 
493: and breakthroughs in one's professional life. Perhaps choice, 
494: genetics, or a combination of both determines the size of our 
495: own search trees and their number of failure and success nodes. 
496: Perhaps the number of success nodes could measure our perception 
497: of a person's achievements. Alain's search tree has proven to 
498: be quite remarkable! An abundance of success nodes, far removed 
499: from the root and representing unusual achievements, are present. 
500: And certainly, his successes have made some of ours possible.\\
501: Thank you Alain.
502: \section*{\centerline{Acknowledgements}}
503: I wish to thank Colette Colmerauer and Krzysztof Apt for the thoughtful 
504: comments they made on the original manuscript.
505: 
506: \begin{thebibliography}{999}
507: 
508: \bibitem[{Jacques Cohen, }1988]{Coh88} Jacques Cohen (Jan. 1988), 
509: A View of the Origins and Development of Prolog, 
510: \textit{Communications ACM}, vol 31, pp 26-36. 
511: 
512: \bibitem[{Alain Colmerauer, }1970]{Col70} Alain Colmerauer (Jan. 1970), Total 
513: Precedence Relations, \textit{Journal ACM 1970}, vol 17, pp 14-30.
514: 
515: \bibitem[{Alain Colmerauer and No\"elle Bleuzen-Guernalec, }2000]{CB00} 
516: Alain Colmerauer and No\"elle Bleuzen-Guernalec, (2000), Optimal Narrowing 
517: of a Block of Sortings in Optimal time, 
518: \textit{Constraints: an International Journal}, Kluwer, vol 5, pp 85--118.
519: 
520: \bibitem[{Alain Colmerauer and Philippe Roussel, }1970]{CR96} 
521: Alain Colmerauer and Philippe Roussel, (1996), The Birth of Prolog, in History 
522: of Programming Languages, edited by T.J. Bergin and R. G. Gibson, 
523: ACM Press and Addison Wesley, pp 331-367.
524: 
525: \bibitem[{Alain Colmerauer and Dao Thi-Bich-Hanh, }2000]{CT00} 
526: Alain Colmerauer and Dao Thi-Bich-Hanh, (2000), Expressiveness of full 
527: first order constraints in the algebra of finite or infinite trees,
528: \textit{Lecture Notes in Computer Science}, vol 1894, Rina Dechter (Ed.), 
529: Principles and Practice of Constraint Programming - CP 2000.
530: 
531: \bibitem[{Cordell Green, }1969]{Gre71} Cordell Green, (1969),
532: Application of theorem proving to problem solving, \textit{Proceedings of the 
533: First International Joint Conference in Artificial Intelligence}, Washington 
534: DC, pp 219-239.
535: 
536: \bibitem[{Robert W. Floyd, }1963]{Flo63} Robert W. Floyd, (1963), 
537: Syntactic Analysis and Operator Precedence, \textit{Journal ACM}, vol 
538: 10, pp 316-333. 
539: 
540: \bibitem[{Robert W. Floyd, } 1963]{Flo67} Robert W. Floyd, (Oct. 1967), 
541: Nondeterministic Algorithms, \textit{Journal ACM}, vol 14, pp 636-644.
542: 
543: \bibitem[{Ian Gambini, } 1999]{G99} Ian Gambini, (Dec. 1999) Quant aux 
544: carr\'es carrel\'es, in French, Doctoral Dissertation, Universit\'e de la 
545: M\'editerran\'ee.
546: 
547: \bibitem[{Timothy V. Griffiths and Stanley Petrick, } 1963]{GP65} 
548: Timothy V. Griffiths and Stanley Petrick, (1965) On the Relative Efficiencies 
549: of Context-Free Grammar Recognizers, \textit{Communications ACM}, vol. 8, no. 
550: 5, pp 289-300. 
551: 
552: \bibitem[{Robert Kowalski and Donald Kuehner, } 1971]{KK71} 
553: Robert Kowalski and Donald Kuehner, (1971) Linear Resolution with selection 
554: function, \textit{Artificial Intelligence}, vol 2, 1971, pp 227-260.
555: 
556: \bibitem[{Robert Kowalski, }1988]{Kow88} 
557: Robert Kowalski,(Jan. 1988) The Early History of Logic Programming, 
558: \textit{Communications ACM}, vol 31, pp 38-43.
559: 
560: \bibitem[{Michael J. Maher, }1988]{Mah88} 
561: Michael J. Maher: (1988) Complete Axiomatizations of 
562: the Algebras of Finite, Rational and Infinite Trees, \textit{LICS 
563: 1988}: pp 348-357.
564: 
565: \bibitem[{Guy Narboni, }1999]{Nar99} 
566: Guy Narboni, From Prolog III to Prolog IV, (Dec. 1999) 
567: \textit{Constraints: An International Journal}, Vol 4 ,Number 4, pp 
568: 313-335
569: 
570: \bibitem[{William Older, and Andr\'e Vellino, 
571: }1990]{OV90} 
572: William Older, and Andr\'e Vellino, (1990) 
573: Extending Prolog with constraint arithmetic on real intervals, 
574: \textit{Proceedings of the Canadian 
575: Conference on Computer \& Electrical Engineering}, Ottawa, Canada.
576: 
577: \bibitem[{J. Alan Robinson, }1965]{Rob65} 
578: J. Alan Robinson, (Jan. 1965) 
579: A Machine-Oriented Logic Based on the Resolution 
580: Principle, \textit{Journal ACM}, vol 12, pp 23-41.
581: 
582: \bibitem[{Brian Randell and Lawford J. Russell, 
583: }1964]{RR64} 
584: Brian Randell and Lawford J. Russell (1964), 
585: Algol60 Implementation, \textit{Academic Press}.
586: 
587: \bibitem[{Adriaan van Wijngaarden, }1968]{Wij68} 
588: Adriaan van Wijngaarden,\textit{et al}, (1968) 
589: Final Draft Report on the Algorithmic Language Algol68, 
590: \textit{Mathematisch Centrum}, Amsterdam.
591: 
592: \bibitem[{Alain Colmerauer, }2001]{C} Alain Colmerauer, URL of his Web page:\\
593: {\tt http://www.lim.univ-mrs.fr/\~{}colmer/}
594: \end{thebibliography}
595: \end{document} 
596: 
597: