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: