Personal tools
You are here: Home Projects Prolog
Document Actions

Prolog and Logic Programming Historical Sources Archive

by Paul McJones last modified 2019-08-23 19:44

A collection of artifacts from logic programming languages beginning with Marseille Prolog.


Paul McJones, editor
- -
Software Preservation Group
Computer History Museum



The goal of this project is to preserve and present primary and secondary source materials (including specifications, source code, manuals, and papers discussing design and implementation) from the history of logic programming, beginning with Marseille Prolog. Wherever possible, we hope to identify implementations that were either originally distributed in source form or have become open source. Comments, suggestions, and donations of additional materials are greatly appreciated.




Université d'Aix-Marseille

Alain Colmerauer's interest in parsing algorithms and natural language processing (e.g. automatic translation and question-answering) led to the development of the Prolog programming language. He receiving his Ph.D. for his work in precedence grammars from the University of Grenoble in 1967. Then he went to the Université de Montréal, where he designed a tree rewriting language called Q-systems that was used in the Automatic Translation Project to construct an automatic English-to-French translation system. Colmerauer considered the Q-systems to be the ancestor of Prolog. Other influences on Colmerauer and his team included Robert Floyd's paper "Nondeterministic Algorithms", J. Alan Robinson's work on resolution logic, and Robert Kowalski's work on SL-resolution. Kowalski visited the team in Marseille for a week in 1971 and two months in 1972.

This paper is the primary source for the creation of Prolog:


Preliminary Prolog (Prolog 0), fall 1972

In 1971 the team had constructed a "primitive natural-language communication system" using Q-systems for the natural language aspects and a theorem prover written in ALGOL-W. But in 1972 severak ideas occured to them that led to the creation of a new programming language that could handle both kinds of computing:
  1. "Of all the resolution systems implemented by Philippe, the SL-resolution of R. Kowalski and D. Kuehner seemed to be the most interesting. Its stack-type operating mode was similar to the management of procedure calls in a standard programming language and was thus particularly well-suited to processing nondeterminism by backtracking à la Robert Floyd [1967] rather than by copying and saving the resolvents. SL-resolution then became the focus of Philippe's thesis on the processing of formal equality in automated theorem-proving [Roussel 1972]. Formal equality is less expressive than standard equality but it can be processed more efficiently. Philippe's thesis would lead to the introduction of the dif predicate (for ≠) into the very first version of Prolog."
  2. "After the departure of Robert, Alain ultimately found a way [which he called metamorphosis grammars] of developing powerful analyzers. He associated a binary predicate N(x,y) with each nonterminal symbol N of the grammar, signifying that x and y are terminal strings for which the string u defined by x = uy exists and can be derived from N. By representing x and y by lists, each grammar rule can then be encoded by a clause having exactly the same number of literals as occurrences of nonterminal symbols. It was thus possible to do without list concatenation. (This technique is now known as 'The difference lists technique.') Alain also introduced additional parameters into each nonterminal to propagate and compute information. As in Q-systems, the analyzer not only verified that the sentence was correct but also extracted a formula representing the information that it contained. Nothing now stood in the way of the creation of a man-machine communication system entirely in 'logic'."
  3. "A draconian decision was made: at the cost of incompleteness, we chose linear resolution with unification only between the heads of clauses. Without knowing it, we had discovered the strategy that is complete when only Horn clauses are used. Robert Kowalski demonstrated this point later and together with Maarten van Emden, he would go on to define the modern fixed point semantics of Horn clause programming."
[Colmerauer and Roussel 1996]

This first version of Prolog was implemented by Philippe Roussel in ALGOL-W on the IBM 360-67 machine (running the CP-CMS operating system) at the University of Grenoble computing center. This report describes the language Prolog and the man-machine communication system written in it:

  • Philippe Roussel. Définition et traitement de l'égalité formelle en démonstration automatique. Thèse de 3ème cycle, Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, May 1972. PDF
  • Alain Colmerauer, Henry Kanoui, Robert Pasaro and Philippe Roussel. Un systèm de communication en français, rapport préliminaire de fin de contrat IRIA, Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, Oct. 1972.
  • Alain Colmerauer, Henry Kanoui, Philippe Roussel and Robert Pasaro. Un systèm de communication homme-machine en Français, by A. Colmerauer et al., Groupe de recherche en Intelligence Artificielle, Faculté des Sciences de Luminy, 1973. PDF at

For more information about the implementation of Prolog 0, see section 7.4 of [Colmerauer and Roussel 1996].


  • The man-machine communication system.
  • A computer algebra system.
    • Marc Bergman and Henry Kanoui. Application of mechanical theorem proving to symbolic calculus. Third International Colloquium on Advanced Computing Methods in Theoretical Physics, Marseilles, France, June 1973.
    • Marc Bergman. Résolution par la démonstration automatique de quelques problèmes en integration symbolique sur calculateur. 3ème cycle thesis, Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, Oct. 1973.
    • Henry Kanoui. Application de la demonstration automatique aux manipulations algébriques et à l'intégration formelle sur ordinateur. 3ème cycle thesis, Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marscilie II, France, Oct. 1973.
  • Sugiton general problem-solving system.
    • Michel Joubert. Un système de résolution de problèmes à tendance naturelle. 3ème cycle thesis, Groupe Intelligence Artificielie, Faculté des Sciences de Luminy, Université Aix-Marseille ii, France, Feb. 1974.
  • Robert Pasero. Représentation du français en logique du premier ordre en vue de dialoguer avec un ordinateur. Thèse de 3ème cycle, Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille 11, France, May 1973.
  • A. Colmerauer. Les grammaires de metamorphose, Groupe d'Intelligence Artificielle, Universit6 de Marseille-Luminy (November 1975). Appears as "Metamorphosis Grammars" in: L. Bole (Ed.), Natural Language Communication with Computers, (Springer, Berlin, May 1978).


Final Prolog (Prolog 1), summer-fall 1973

"Between February and April 1973, at the invitation of Robert Kowalski, Philippe visited the School of Artificial Intelligence at the University of Edinburgh, which was within the Department of Computational Logic directed by Bernard Meltzer. Besides the many discussions with the latter and with David Warren, Philippe also met Roger Boyer and Jay Moore. They had constructed an implementation of resolution using an extremely ingenious method based on a structure-sharing technique to represent the logical formulae generated during a deduction. The result of this visit and the laboratory's need to acquire a true programming language prompted our decision to lay the foundations for a second Prolog. In May and June 1973, we laid out the main lines of the language, in particular the choice of syntax, basic primitives, and the interpreter's computing methods, all of which tended toward a simplification of the initial version. From June to the end of the year, Gérard Battani, Henry Meloni, and Rent Bazzoli, postgraduate students at the time, wrote the interpreter in FORTRAN and its supervisor in Prolog." [Colmerauer and Roussel 1996]

For more information about the implementation of Prolog 1, see section 7.5 of [Colmerauer and Roussel 1996] and [Kluźniak 1984].

Source code

There are no known surviving copies, but see Warsaw for a modification and port of the final Marseille interpreter to an ODRA computer.


  • Gérard Battani and Henry Meloni. Interpréter du langage de programmation PROLOG. Report de DEA, Groupe d'Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, 1973. Online at
  • D. Warren. Example to Illustrate How PROLOG Is Implemented. 1974. In a different hand, “The 3 slides that were the basis of the Hungarian PROLOG implementation (1975)” has been added. Photocopy.
  • Philippe Roussel. Prolog, manuel de référence et d'utilisation, Groupe de recherche en Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, Sept. 1975. Online at
  • D. Warren. Epilog [400,400] - A Users Guide to the D.E.C. 10 PROLOG System. Internal Memo. Department of Artificial Intelligence, Edinburgh, 1974. Cited in [Bundy 1975] and [Szeredi 2004]. Was this only a port of the Battani-Meloni code to the PDP-10, or did it include Warren's compiler?
  • Alan Bundy. Analysing Mathematical Proofs (or Reading between the Lines). Proceedings of the 4th international joint conference on Artificial Intelligence, 1975. Edinburgh Research Archive


"Gérard Battani and Henry Meloni were kept very busy with the distribution of Prolog. They sent it to Budapest, Warsaw, Toronto, and Waterloo (Canada) and traveled to Edinburgh to assist David Warren in installing it on a PDP 10. A former student, Hélène Le Gloan, installed it at the University of Montréal. Michel Van Caneghem did the same at the IRIA in Paris before coming to work with us. Finally, Maurice Bruynooghe took Prolog to Leuven (Belgium) after a three-month stay in Marseilles (October through December 1975). Indeed, as David Warren has pointed out, Prolog spread as much, or more, by people becoming interested and taking away copies either directly from Marseilles or from intermediaries such as Edinburgh. Thus, Prolog was not really distributed; rather it 'escaped' and 'multiplied.'" [Colmerauer and Roussel 1996]

"After my return [from Marseille] to Edinburgh Pietzrykowski contacted me for a possible visit to Waterloo. As the arrangements firmed up, he told me he hadn't managed to get a copy of Marseilles Prolog and could I bring one. And so it was that I arrived in Waterloo in January 1975 with two presents: a plastic bag with cuttings of the Papyrus plant and a box with a foot-long stack of punched cards. Sometime in the spring of 1975 two students of Pietrzykowski, Lewis Baxter (later to invent a fast unification algorithm) and Larry Rendell, got the Fortran of the interpreter translated to the local dialect. Thus was established the first Prolog installation in North America.

This was not the first propagation of Marseilles Prolog via Edinburgh. In December 1974 the mathematicians and logicians Hajnal Andreka and Istvan Nemeti obtained their foot-long box of cards and took it back with them to Budapest. Without much delay it got into the hands of Péter Szeredi." [van Emden 2006]


  • Marc Bergman and Henry Kanoui. SYCOPHANTE, système de calcul formel sur ordinateur, final report for a DRET contract (Direction des Recherches et Etudes Techniques), Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, 1975
  • Henry Kanoui. Some aspects of symbolic integration via predicate logic programming. ACM SIGSAM Bulletin, 1976. ACM Digital Library
  • Gérard Battani et Henry Meloni. Mise en oeuvre des contraintes phonologiques, syntuxiques et sémantiques dans un systéme de compréhension automatique de la parole, 3ème cycle thesis, Groupe Intelligence Artificielle, Faculté des Sciences de Luminy, Université Aix-Marseille II, France, June 1975.
  • David H. D. Warren. Warplan, A System for Generating Plans, research report, University of Edinburgh, Department of Computational Logic, memo 76, June 1974.
  • David H. D. Warren. PROLOG to DEC 10 Machine Code Compiler, 1975.


Prolog II, 1977–1982

"Already in 1976, Alain felt constraints were the next giant leap needed in logic programming− a dream that spawned two most influential further contributions. The first was the move from unification to equations and inequations over infinite trees (late 70’s/early 80’s), which materialised in award-winning software and paved the way for many of the accomplishments in Constraint LP that flourished as from the mid-80’s.

Alain’s second crucial contribution to CP were his highly innovative extensions of constraint solving and its semantic underpinnings into richer domains: from Prolog II’s infinite trees and non-equality predicate* − admirably implemented with Michel van Caneghem on a very primitive personal computer with floppy disk virtual memory ..."

[Dahl 2017]

* Prolog II included the dif/2 predicate, which had been part of Prolog 0 but not Prolog 1 or Edinburgh Prolog.

  • Verónica Dahl. In Memoriam: Alain Colmerauer (24 January 1941 – 12 May 2017). Association for Logic Programming Newsletter. Online at
  • PrologII+. Manuel de référence, PrologIA, Marseille. PDF at
  • Henry Kanoui and Michel van Caneghem. Implementing a very high level language on a very low cost machine. Rapport, Marseille: Group d'Intelligence Artificielle, University d'Aix-Marseille, Luminy, 1980.
  • Alain Colmerauer. Equations and Inequations on Finite and Infinite Trees. Proceedings of the International Conference on Fifth Generation Computer Systems, 1984, ICOT. PDF at
  • Francis Giannesini, Henry Kanoui, Robert Pasero, Michel van Caneghem. Prolog. International Computer Science Series, Addison-Wesley, 1986. (Published in French, English, German, Spanish, and Italian editions.)
  • Alain Colmerauer. Theoretical model of Prolog II. In: M. Van Caneghem and D. Warren, editors. Logic programming and its application, Ablex Publishing Corporation, pages 3-31, 1986.
  • Alain Colmerauer. Prolog in 10 figures, Communications of the ACM, Volume 28, Number 12, pagers 1296-1310, December 1985.
  • 1982: Prolog II a new theoretical model. Includes illustrations and downloads (manual and executable). Online at
    The download link for the program is broken, but this works: .zip via


Prolog III, 1983–1990, PrologIA as well as University of Marseille

"Prolog was initially designed to process natural languages. Its application in various problem solving areas has demonstrated its capabilities, but has also made clear its limitations. Some of these limitations have been overcome as a result of increasingly efficient implementations and ever richer environments. The fact remains, however, that the core of Prolog, namely, Alan Robinson’s unification algorithm, has not changed fundamentally since the time of the first Prolog implementations. Moreover, it is becoming less and less significant compared to the ever-increasing number of external procedures as, for example, the procedures used for numerical processing. These external procedures are not easy to use. Their evocation requires that certain parameters be completely known, and this is not in line with the general Prolog philosophy that it should be possible anywhere and at any time to talk about an unknown object x.

In order to improve this state of affairs, we have fundamentally reshaped Prolog by integrating at the unification level: 1) a refined manipulation of trees, including infinite trees, together with a specific treatment of lists; 2) a complete treatment of two-valued Boolean algebra; 3) a treatment of the operations of addition, subtraction, multiplication by a constant and of the relations <, ≤, >, ≥ 4) the general processing of the relation ≠. By doing so, we replace the very concept of unification by the concept of constraint solving in a chosen mathematical structure. By mathematical structure, we mean here a domain equipped with operations and relations, the operations being not necessarily defined everywhere." [Colmerauer 1990]


Prolog IV, 1990–1996, PrologIA

"... to the beautiful formalization of interval reasoning and the unifying presentation of the heterogeneous solvers in Prolog IV; to generalising the idea of constraint solving by intervals narrowing into general constraints. ..." [Dahl 2017]

"What is Prolog IV?

  • The leaves of a tree can be real numbers. The Boolean values are as simple as 0 and 1, which are integers, which are rational numbers, which are real numbers.
  • 120 evaluable predicates which generate constraints.
  • ISO-standard syntax. P. Deransart, A Ed-Dbali and L. Cervoni, Prolog: The Standard, Springer, 1996.
  • It utilizes mainly an algorithm of approximate resolution by computing a fixed point. This was the basis of BNR-Prolog."
[Colmerauer 2011]

  • Alain Colmerauer. Les bases de Prolog IV. Publication interne du LIM, Marseille, 1996. PDF at
  • F. Benhamou, P. Bouvier, A. Colmerauer, H. Garetta, B. Giletta, J.L. Massat, G.A. Narboni, S. N’Dong, R. Pasero, J.F. Pique, Touraîvane, M. Van Caneghem et E. Vétillard. Le manuel de Prolog IV. PrologIA, Marseille, June 1996.PDF at
  • Alain Colmerauer. From natural language processing to Prolog. Lecture slides, Academy of Mathematics and Systems Science, Beijing, April 8, 2011. PDF at
  • 1996: Prolog IV the approximation of non-linear constraints. Downloads (manual and executable). Online at


Université de Montréal



Before he went to Marseille, Alain Colmerauer led the TAUM (Traduction Automatique de l'Université de Montréal) project for automatic translation from English to French. He designed a tree rewriting language called Q-systems for use in this project.

"The Q-systems were written in ALGOL by Alain Colmerauer and were operational by October 1969. Michel van Caneghem and Franqois Stellin, then completing a master's degree, developed a FORTRAN version, and Gilles Steward developed an ultra-fast version in machine language for the CDC 6400 computer of the University of Montreal. These Q-systems were used by the entire TAUM project team to construct a complete chain of automatic English-French translations. The English morphology was written by Brian Harris, Richard Kittredge wrote a substantial grammar for the analysis of English, Gilles Stewart wrote the transfer phase, Jules Danserau wrote the grammar for the French synthesis, and Michel van Caneghem developed a complete French morphology [Taum 1971]. The Q-systems were also used a few years later to write the METEO system, a current industrial version of which produces daily translations of Canadian weather forecasts from English into French." [Colmerauer and Roussel 1996]

  • Alain Colmerauer. Les systèmes-q ou un formalisme pour analyser et synthétiser des phrases surordinateur. Internal publication no 43, Département d’Informatique de l’Université de Montréal, September 1970. Online at
  • TAUM 71, Annual report, Projet de Traduction Automatique de l'Université de Montréal, Jan. 1971.


Marseille Prolog for Control Data 6000

"A former student, Hélène Le Gloan, installed [Marseille Prolog] at the University of Montreal." [Colmerauer and Roussel 1996]
  • Hélène Le Gloan. Implantation de PROLOG, Internal report, Université de Montréal, 1974.

"The first installation of Prolog in Warsaw was that of a version prepared by Le Gloan (1974) for the CDC6000 series. The principal difference with respect to the original version (Battani and Meloni, 1973) was the manner in which the interpreter's tables were accessed. The CDC machines were very fast, but had only up to 128K words of memory; each word had 60 bits, though, so the potential amount of data items - addresses in various linked data structures - was three times as large. Le Gloan replaced all array accesses with calls to simple packing/unpacking routines.

The loss in execution speed was considerable. This was compounded by the fact that the interpreter was not a Prolog interpreter really: it could only interpret the internal representation of a Prolog program in its tables. The 'real' Prolog interpreter (i.e. the program which could read and store Prolog clauses, read and write terms, and the like) was itself a Prolog program (Roussel, 1975) executed by the FORTRAN interpreter.

The effect was that our CDC CYBER 73, which ran at approximately 1.2 million instructions per second, read in Prolog programs at the average speed of 5 seconds per clause. As the machine was constantly labouring under a heavy load of multiprocessed jobs flowing in from a number of remote card-reader/printer terminals, it was impracticable to run Prolog for longer than a minute or so. In spite of all the packing, one needed to run in a low-priority storage class (we needed at least 72 000 (octal) words, as opposed to the standard of 54 000 (octal) for FORTRAN compilations, etc.), so a one-minute job used to hang in the input queue for up to 10 hours. Longer runs had to wait until the weekend.

Fortunately, the interpreter's internal state could be saved on a file between successive runs, so in spite of all this, Prolog was used for various small tasks, even by students. S. Szpakowicz even wrote his PhD program - a parser for a significant subset of Polish - in Prolog. With the low tum-around, reading in ten clauses at a time, it took him several months to get the program into the machine: spectacular evidence of Prolog's ability to captivate the mind!" [Kluźniak 1984]


University of Edinburgh

"One dark morning in October 1972 in Edinburgh, Bob Kowalski sat me down on the couch in his living room. `I'll show you something interesting. We call it programming in logic.'

I had flown in from California the day before to take up my appointment at the Department of Machine Intelligence under the direction of Donald Michie."


As a follow-up to our session on Bob's couch upon my arrival in Edinburgh in the fall of 1972, Bob arranged a few meetings as a sort of crash course for new arrivals in resolution and programming in predicate logic. These included David Warren and Austin Tate, two new students who were also to work under Michie.

David and I attended Bob's crash course. If there were any others, they couldn't have been more than one or two. By November it was clear that the fixpoint characterization applied to logic programs. In the spring of 1973 Bob and I made good progress with this work. I found it very exciting. I learned about the compactness theorem and we used it. Bob was not happy with it. He had the feeling it could be simpler. When we split for the summer, he suggested I leave it with him to see if he could find a more satisfactory exposition. By the time I returned, he had found the beautifully simple one-step inference characterization that can be found in our JACM paper.

In the course of 1973 Colmerauer and Roussel visited. They reported on their Prolog implementation, which had control annotations on the clauses. Our reaction was lukewarm: it seemed too far removed from logic.

I enjoyed programming in logic, though we couldn't run anything. We had learned how to append lists from the Marseilles people. When I told Bob my latest brainwave:

member(x,y) <- append(u,x.v,y)

he was gratifyingly surprised.


What little interest in Prolog there might have been that summer in Edinburgh continued to evaporate until David Warren returned from his visit to Marseilles in February 1974. He brought two things: a program and a foot-long box of cards. The program was WARPLAN, a one-page program that Bob, I, and others studied for years afterwards. The box contained the new Prolog. This was the second implementation, done in Fortran by Battani and Meloni.

The effect was electrifying. Actually being able to run programs (an opportunity obligingly arranged by David on the new PDP-10 computer in Edinburgh) made a huge difference, though it shouldn't have from a rational point of view. Moreover, the formerly ubiquitous control annotations had gone, being replaced by an occasional cut, which was much less obtrusive.


Some of the 1974 visitors were unreservedly interested not only in logic programming, but even in Prolog. These included Keith Clark from Queen Mary College, Luis Pereira from Lisbon, and Tomasz Pietrzykowski from the University of Waterloo in Canada."

[van Emden 2006]


Logic Programming

  • Robert Kowalski and Donald Kuehner. Linear Resolution with Selection Function In Artificial Intelligence, Vol. 2, 1971, pp. 227-60. Reprinted in: Anthology of Automated Theorem-Proving Papers, Vol. 2, Springer-Verlag, 1983, pp. 542-577. Online at
  • Robert Kowalski. Predicate Logic as Programming Language. In: Proceedings IFIP Congress, Stockholm, North Holland Publishing Co., 1974, pp. 569-574. Reprinted in Computers for Artificial Intelligence Applications, (eds. Wah, B. and Li, G.-J.), IEEE Computer Society Press, Los Angeles, 1986, pp. 68-73. Online at
  • M. H. van Emden and R. A. Kowalski. The Semantics of Predicate Logic as a Programming Language Journal of the ACM, Vol. 23, No. 4, 1976, pp. 733-742. Online at
  • Maarten van Emden. The Early Days of Logic Programming: A Personal Perspective. Assocation for Logic Programming Newsletter, Vol. 19 n. 3, August 2006. Online at


PROLOG to DEC 10 Machine Code Compiler, Version 13 Sep 1975.

This compiler was written in Marseille Prolog by David H. D. Warren. Computer History Museum Lot #X6167.2011, gift of Maarten van Emden. Posted here with permission of David H. D. Warren.

  • David H. D. Warren. Listing. PDF
  • David H. D. Warren. Example 1: Quicksort. Circa 1975. Example of generated code from PROLOG to DEC 10 Machine Code Compiler. PDF
  • David H. D. Warren. Example 2: Illustrates the improved scheme for indexing clauses. Circa 1975. Example of generated code from PROLOG to DEC 10 Machine Code Compiler. PDF


DECsystem-10 PROLOG

Source code

  • Bruce Baumgart, archivist. Stanford AI Lab W.A.I.T.S. backup tapes. The source files include versions modified to run on the Stanford system, as well as original versions.


  • Luis Moniz Pereira, Fernando C. N. Pereira, and David H. D. Warren. User's Guide to DECsystem-10 Prolog. Technical Report 03/13/5570, Laboratório Nacional De Engenharia Civil, Lisbon, September-October, 1978. Provisional version. Interpreter version 1.32 and compiler version 1.11. PDF at - ASCII at
  • Lawrence Byrd, Fernando Pereira, and David Warren. A Guide to Version 3 of DEC-10 Prolog. Department of Artificial Intelligence, University of Edinburgh, June 1980. ASCII at
  • Lawrence Byrd. Prolog Debugging Facilities. Technical note, Department of Artificial Intelligence, Edinburgh University, 1980. ASCII at
  • D.L. Bowen (editor), L. Byrd, F.C.N. Pereira, L.M. Pereira, and D.H.D. Warren. DECsystem-10 Prolog User's Manual. University of Edinburgh, Department of Artificial Intelligence, 10 November 1982. Prolog version 3.47. ASCII at CMU AI Repository
  • Ernie Davis and Udi Shapiro. A Prolog Tutorial Based on User’s Guide to DECsystem-10 Prolog. December 1980. ASCII at
    Accompanying examples. ASCII at


  • D. H. D. Warren. Implementation of an efficient predicate logic interpreter based on Earley deduction. Research proposal to the Science Research Council, Dept. of AI, University of Edinburgh (1975).
  • D. H. D. Warren, L. M. Pereira and F. Pereira. Prolog - the Language and its Implementation compared with Lisp, Proc. ACM Symposium on Artificial Intelligence and Programming Languages, Rochester, N.Y., 1977. ACM Digital Library PDF at
  • D. H. D. Warren, Implementing Prolog-Compiling Predicate Logic Programs. Research Reports 39 and 40, Department of Artificial Intelligence, University of Edinburgh, May 1977. Superseded by Warren's thesis?
  • David H. D. Warren. Applied logic : its use and implementation as a programming tool. Ph.D. thesis, University of Edinburgh, 1978. Online at - Online at
  • David H. D. Warren. PROLOG on the DECsystem-10. Pages 112-121 in [Michie 1979]. Discusses tail-recursion optimization.
  • David H. D. Warren. An Improved PROLOG implementation which optimises tail recursion. Research Paper 156, Dept. of Artificial Intelligence, University of Edinburgh, Scotland, 1980; also published in [Tärnlund 1980]
  • D. H. D. Warren. Perpetual Processes - an Unexploited Prolog Technique. Logic Programming Newsletter, number 3, Universidade Nova de Lisboa, 1982.
  • D. H. D. Warren. Higher-order extensions to PROLOG: are they needed? In Hayes, J. E., Michie, D., and Pao, Y.-H. (Eds.), Machine Intelligence 10. Ellis Horwood. Online at AAAI AITopics
  • David H. D. Warren. Optimizing Tail Recursion in Prolog. In: Michel van Caneghem and David H. D. Warren, eds. Logic Programming and its Application. Ablex, 1986.
  • Donald Michie, editor. Expert Systems in the Micro-Electronic Age. Edinburgh University Press, 1979.
  • S-A. Tärnlund, editor. Proceedings of the Logic Programming Workshop, Debrecen, Hungary, 1980.


  • D. H. D. Warren. Generating conditional plans and programs. Procs. AISB Conf., p.34-354, Edinburgh. July 1976.
  • David H. D. Warren. Logic programming and compiler writing. Software: Practice and Experience, Vol. 10, February 1980, pages 97-125. Online at Online at
  • Fernando C. N. Pereira and David H. D. Warren. Definite clause grammars for language analysis — A survey of the formalism and a comparison with augmented transition networks. Artificial Intelligence, Vol. 13, Issue 3, May 1980, pages 231-278. ScienceDirect CiteSeerX

    "This formalism -- the main subject of our paper -- we call definite clause grammars (DCGs). DCGs are a special case of Colmerauer's (1975) "metamorphosis grammars", which are for Chomsky type-0 grammars what DCGs are for CFGs. Although metamorphosis grammars can be translated into definite clauses, the correspondence is not nearly so direct as that for DCGs."

  • David H. D. Warren. Efficient Processing of Interactive Relational Data Base Queries expressed in Logic. Procedings of 7th Very Large Data Bases Conference, September 9-11, 1981, Cannes, France, Proceedings, pages 272-281.
  • Fernando Carlos Neves Pereira. Logic for Natural Language Analysis. Ph.D. thesis, University of Edinburgh, 1982. era (Edinburgh Research Archive)

    A slightly revised version was published as Technical Note 275, AI Center, SRI International, January 1983. Online at

  • David H. D. Warren and Fernando C. N. Pereira. Chat-80 prototype natural language question answering system.
  • Leon Sterling, Alan Bundy, Lawrence Byrd, Richard O'Keefe, and Bernard Silver. Symbolic reasoning with PRESS. In Computer Algebra (J. Calmet, ed.), Lecture Notes in Computer Science 144, Springer-Verlag, 1982. era (Edinburgh Research Archive)


PDP-11 Prolog

  • C. Mellish. Minimal documentation of the PDP-11 Prolog system. Dept. of Artificial Intelligence, University of Edinburgh, 1978. (Informal note.) Cited in [Warren 1979].
  • Clocksin, W.F. and Chris S. Mellish, The UNIX Prolog System Software Report 5, Department of Artificial Intelligence, University of Edinburg. Cited in Clocksin and Mellish, Programming in Prolog, first edition.
  • W. Clocksin, C. Mellish, and R. Fisher. The RT-11 Prolog System. Software Report 5a (revised), Department of Artificial Intelligence, University of Edinburgh, Edinburgh, Scotland, 1980. Cited in Clocksin and Mellish, Programming in Prolog, first edition.
  • C. S. Mellish. An Alternative to Structure Sharing in the Implementation of a PROLOG Interpreter. Research Paper 150, Department of Artificial Intelligence, University of Edinburgh, 1980.
  • C. S. Mellish. An Alternative to Structure Sharing in the Implementation of a PROLOG Interpreter. Pages 99-106 of: [Clark and Tärnlund 1982]. Condensed from [Mellish 1980].


EMAS Prolog

In 1980, Luís Damas wrote a Prolog in the IMP programing language for Edinburgh Multi-Access System (EMAS) running on ICL 2900 computers. [F. Pereira, C-Prolog, 1982]

  • Lawrence Byrd, editor. User's guide to EMAS Prolog. Occasional Paper 26, Department of Artificial Intelligence, University of Edinburgh, 1981.


  • James R. Cowls. Analysis of Descriptive Texts. ANLC '83 Proceedings of the first conference on Applied natural language processing. PDF at
    "The code for the system is written in PROLOG (Clocksin and Mellish, 1981) as implemented on the Edinburgh Multi Access System (Byrd, 1981). This is a standard implementation of the language, with the single enhancement of a second internal database which is accessed using a hashing algorithm rather than a linear search. This has been used to improve the efficiency of the dictionary search procedures. "



C-Prolog was written by Fernando Pereira around 1982 in the EdCAAD project in the Department of Architecture at the University of Edinburgh. It was based on EMAS Prolog, written by Luís Damas. There were also contributions by Lawrence Byrd. [F. Pereira,, 1982]

"C-Prolog was designed for machines with a large, uniform, address space, and assumes a pointer cell 32 bits wide. At the time of writing, it has been tested on VAX machines under the UNIX and VAX/VMS operating systems, on the Sun workstation under 4.1/2 UNIX, and has been ported with minor changes to other MC68000-based workstations and to the Three Rivers PERQ."
[F. Pereira, C-Prolog User's Manual, 1982]

Source code


  • Fernando Pereira, editor. C-Prolog User's Manual. Version 1.5, February 22, 1984. Online at
  • Richard O'Keefe. Portability of C-Prolog. AI-List Digest, Volume 2, Issue 25, March 6, 1984. Forwarded from Prolog Digest. Online at
    "The first thing to beware of is that there are two main versions of C-Prolog drifting around. The one most people have is the one distributed by EdCAAD (which is where Fernando Pereira wrote it), and while that runs under VAX/UNIX and VAX/VMS both, and is said to run on at least one 68000 box, V7 C compilers don't like it much. The other version is distributed by EdAI on a very informal basis, but it should be available from Silogic in a couple of weeks. The EdAI version has been ported to the Perq (running ICL's C-machine micro-code and their PaNiX port of V7 UNIX) and to another C-machine called the Orion (that compiler isn't a derivative of PCC). C-Prolog has something like one cast per line, the EdAI version has stronger type declarations so that the compiler produces no warning messages. Both versions are essentially the same, so EdAI cannot distribute their version to anyone who hasn't got a licence for the EdCAAD version."



"Prolog-X was designed just before I left Edinburgh in 1980. Workstations (such as the Apollo, Sun, etc) were the latest thing, and we (Lawrence Byrd, David Bowen, and I) wanted a workstation Prolog system compatible with DEC-10 Prolog. We reckoned there would be a ready market for such software. We were also envious of the Lisp Machine developments, and wanted to do the same thing for Prolog. Using pseudocode notes that we wrote, I wrote a 'reference' implementation in Pascal, and at about the same time I moved to Oxford to take up a research post in the Robot Welding Group to develop image processing algorithms for real-time control of a robot arc-welding system. I therefore had less time to work on Prolog-X. The reference implementation sort of worked, and the 'test' was to run Chat-80 on it (a program written by David Warren and Fernando Pereira) to answer questions in English about world geography, e.g. "What is the capital of Upper Volta?"), which I ran on a PDP-11/10 bought to control the robot welder. At Edinburgh, David Bowen had more time to work on a version of Prolog-X called NIP, so that made some progress.

Meanwhile, in Oxford I made contact with Tim [Robinson] from High Level Hardware, who had developed a microcoded workstation called the Orion (there is a good Wikipedia article on this machine). Tim wanted a Prolog system for the Orion, so I gave him the Prolog-X reference implementation. He microcoded it, and we reckoned it would have amazing performance because of that. However, several simultaneous events conspired to halt the microcoded Prolog on the Orion.

  1. I had by that time moved to Cambridge, where I was running an Orion, but had no time to make further development on the Prolog system. I used the Orion essentially as a very nice graphics workstation for my robotics research.
  2. Computer architecture had moved on; microcoding was no longer where the performance was. We found that running C-Prolog on a new 32-bit microprocessor chip (by Fairchild) was actually faster than the microcoded Prolog!
  3. At Cambridge I began collaborating with Acorn during its transition into ARM, and they had a workstation called the Archimedes using their own RISC chip on which I got Prolog-X running. However, this project folded as the transition to ARM matured and they decided not to offer consumer workstations."
[William Clocksin, personal communication, 11 June 2019]

  • David L. Bowen, Lawrence M. Byrd, and William F. Clocksin. A Portable Prolog Compiler. In Logic Programming Workshop, pages 74–83, Algarve, Portugal, 1983. Online at
  • William F. Clocksin. Design and Simulation of a Sequential Prolog Machine. Journal of New Generation Computing (NGC), pages 101–120, vol. 3, no. 1, 1985. SpringerLink

    "In this paper we describe an abstract Prolog machine, called the ZIP machine, which is suitable for implementation in software, microcode, or hardware.


    The first version of the Prolog-X system was written in Pascal under VMS for the DEC VAX in 1982. It was then ported to the ICL 2980 under VME, and the bytecode emulator was subsequently translated into the VME systems programming language S3. The first version was also used as the basis of a separate Prolog implementation design study. The second (and current) version of Prolog-X is a translation of the first version into the C language. This version runs on the following machines: the ICL Perq under PNX (similar to System III Unix), the HLH Orion (made by High Level Hardware, Ltd.) under Berkeley Unix 4.1, the DEC VAX under Berkeley Unix 4.2, and the IBM 3081 (370 architecture) under MVS."

  • W. F. Clocksin. Implementation techniques for Prolog databases. Software—Practice and Experience, Volume 15, Number 7, pages 669-675, July 1985. Wiley Online Library
  • Lisa Robinson. High Level Hardware Orion. Informational web site, circa 2009. Online at


New Implementation of Prolog (NIP)

"At Edinburgh, David Bowen had more time to work on a version of Prolog-X called NIP, so that made some progress." [William Clocksin, personal communication, 11 June 2019]

"3.2.5 NIP (CYLK, AJL)

NIP, the New Implementation of Prolog from Edinburgh, is now complete. It has been distributed by RAL to 29 research groups for use on a large range of UNIX based systems. A range of utilities and tools developed on the DEC 10 at Edinburgh are distributed with NIP and are available independently over the networks for users of other Prologs.

Release 1.1 of NIP was received from AIAI at the end of January. This was unloaded onto the following machines:

  • SUN2: fileserver, richard and harold
  • VAX: rlvd
  • Pyramid: rlya
  • Atlas-10

The installation of NIP required a few alterations to a Makefile which determined where the NIP executable files were to be found after installation. Then they were compiled and linked (all with the supplied makefile) . The compiled binaries were then copied to the destination directories for general access. All but the Pyramid were relatively straight forward; the Pyramid was most frustrating due to compiler problems. (Similar problems have prevented a Whitechapel installation).

There have been two new releases of NIP. Release 1.2 arrived at the beginning of February and was successfully installed on the SUNs, VAX and Atlas-10.

Release 1.3 arrived at the end of April (24th) and has been installed on the SUNs, Orion and VAX.

Release 1.3 manuals were received from AIAI and 10 copies of these were made and set to various Prolog users within the Division." [IKBS section, 1985-1986 Annual Report, Informatics Department, Rutherford Appleton Laboratory, Chilton]

  • A. M. J. Hutchings, editor and D. L. Bowen, L. Byrd, P. W. H. Chung, F. C. N. Pereira, L. M. Pereira, R. Rae, and D. H. D. Warren. Edinburg Prolog (The New Implementation) User’s Manual - version 1.4. Department of Artificial Intelligence, University of Edinburgh, 1984.
  • A. M. J. Hutchings, editor and D. L. Bowen, L. Byrd, P. W. H. Chung, F. C. N. Pereira, L. M. Pereira, R. Rae, and D. H. D. Warren. Edinburgh Prolog (The New Implementation) User's Manual. Report AIAI/PSGm1/86, AI Applications Institute, University of Edinburg, 1986.


Prolog Library

"The DEC-10 Prolog Library was an extraordinary and catholic collection of Prolog routines, largely written by research workers and students in Professor Alan Bundy's Mathematical Reasoning Group at the Department of Artificial Intelligence at the University of Edinburgh. In summer 1987 we sifted through the enormous amount of material in this library, grouping similar material together and converting some of the more used programs into Edinburgh Prolog." [Johnson and Rae 1987]


Katholieke Universiteit Leuven

"Finally, Maurice Bruynooghe took Prolog to Leuven (Belgium) after a three-month stay in Marseilles (October through December 1975)." [Colmerauer and Roussel 1996]

"I visited Prof. Kowalski at Imperial College, in June 1975. I remember I came home with 2 boxes of punched cards, a copy of the Marseille Prolog system. (I also remember it did not run, I figured out some card was missing in the first 10 lines).

I visited Prof. Colmerauer in Marseille from October to December 1975."
[Maurice Bruynooghe, personal communication, 7 May 2019]


PDP-11 Prolog

"... my own Prolog implementation for PDP 11, 64K bytes, which likely was in the period 1979-1981." [Maurice Bruynooghe, personal communication, 7 May 2019]


BIM-Prolog (with the BIM company)

  • André Mariën. Improving the Compilation of Prolog in the Framework of the Warren Abstract Machine. Ph.D. dissertation, Katholieke Universiteit Leuven, September 1993.


University of Waterloo

"After my return to Edinburgh [Tomasz] Pietzrykowski contacted me for a possible visit to Waterloo. As the arrangements firmed up, he told me he hadn't managed to get a copy of Marseilles Prolog and could I bring one. And so it was that I arrived in Waterloo in January 1975 with two presents: a plastic bag with cuttings of the Papyrus plant and a box with a foot-long stack of punched cards. Sometime in the spring of 1975 two students of Pietrzykowski, Lewis Baxter (later to invent a fast unification algorithm*) and Larry Rendell, got the Fortran of the interpreter translated to the local dialect. Thus was established the first Prolog installation in North America." [van Emden 2006]

* See for example: Lewis Denver Baxter. A Practically Linear Unification Algorithm. Research Report CS-76-13, Department of Computer Science, University of Waterloo, February 1976. PDF at


Waterloo Prolog for IBM System/370

"In 1976 Grant Roberts, a Master's student, was looking for a project. If not writing a compiler, then at least implementing an interesting language. Prolog seemed suitable. As I was the only faculty member who was at least a user of Prolog, Grant was steered in my direction.

Grant was famous in Waterloo, because as an undergraduate he had been on the Waterloo team in the Putnam competition that had done very well in the year he was on it. Grant did not share the computer scientists' disdain of the IBM 370. In fact, he loved this machine. Not because he liked programming in Fortran, or in Cobol, or in PL/I. No, he programmed in assembler. At least that was all that an outsider could make out of his activities. What he actually programmed in was his own programming language, a macro processor.

There are very few people who can do this. There are even fewer who tell about it. One of the exceptions is Mark Halpern in his memoirs in the 1991 Annals of the History of Computing where he says something about his XPOP macroprocessor. But these few tend to perform incredible programming feats. In the case of Roberts the feat was to complete in 1977 a beautifully stable Prolog implementation, the fastest in the world." [van Emden 2006]

"The most completely engineered logic programming systems to date are the PROLOG systems (cf. P. Roussel [1975], G. Roberts[1977], D. Warren et ai.[1977],), which are based on ideas of Kowalski, Colmerauer, Roussel, Hayes, and Boyer and Moore (cf. Kowalski [1974], p.573)." [Kenneth Bowen 1979]

[Roberts 1977] describes the language and its implementation, which uses the structure-sharing approach, following the Marseille interpreter.

  • Grant Maxwell Roberts. An Implementation of PROLOG. Master's thesis, University of Waterloo, Waterloo, Ontario, Canada, 1977. Posted with the permission of Grant Roberts. PDF

Source code

  • Grant Roberts. Waterloo Prolog source code assembly listing, version 1.2, 13 March 1982. PDF
  • Michigan Terminal System, Distribution 6.0, April 1988, contains some locally-produced documentation for Waterloo Prolog 1.7 from 1985, but, for licensing reasons, no Waterloo/Intralogic files. Online at

User manual

  • Grant Roberts. Waterloo Prolog User's Guide, version 1.4. With handwritten corrections by author. PDF Grayscale PDF


Roberts later formed a company called Intralogic Inc. to develop and distribute Waterloo Prolog commercially. This was a sideline to Roberts' main business, which was an application software development firm. Intralogic developed another PROLOG implementation in C for Unix but that was not commercially successful. Roberts decided to focus on his primary business, scaling back Intralogic and just distributing the original IBM System/370 PROLOG with some enhancements. He recalls there were about 90 licensees worldwide at the peak in the 1980's, tapering off to a few licensees by the late 1990's when he terminated Intralogic. [Source: Grant Roberts, personal communication, 17 April 2019]


Waterloo Unix Prologs

In the 1970s and 1980s, several students implemented versions of Prolog for Unix.
  • R.J. Ferguson, 1977.
    • R.J. Ferguson: An Implementation of Prolog in C. Master's Thesis, Department of Computer Science, University of Waterloo, 1977.
    • Maarten H. van Emden. An Algorithm for Interpreting PROLOG Programs. Technical Report CS-81-28, Department of Computer Science, University of Waterloo, September 1981. PDF at

      "Many thanks to Ron Ferguson for some very helpful discussions."

  • T. Y. Ng, 1982.
    • T. Y. Ng. Prolog Implementation. M. Math. Thesis, Department of Computer Science, University of Waterloo, 1982.
    • M. H. van Emden. An interpreting algorithm for Prolog programs. First International Logic Programming Conference, University of Marseille, 1982. Also published in: [Campbell 1984]. Posted by permission of Maarten van Emden. PDF

      "Many thanks to Ron Ferguson for some very helpful discussions and to Paul Ng for his willingness to use the algorithm in this form as basis for his implementation work."

    • J. A. Campbell, editor, Implementations of Prolog, Ellis Horwood, 1984.
  • Mantis Hoi Ming Cheng, 1984.
    • R. G. Goebel and M. H. M. Cheng. Waterloo Unix Prolog Reference Manual. Logic Programming Group, University of Waterloo, 1983.
    • M. H. M. Cheng and R. G. Goebel. Waterloo Unix Prolog Implementation Manual. Logic Programming Group, University of Waterloo, 1984.
    • M. H. van Emden and R. Goebel. Waterloo Unix Tutorial Version 1.2. Logic Programming Group, University of Waterloo, 1984
    • Mantis H. M. Cheng. Design and implementation of the Waterloo Unix Prolog environment. Master's thesis, Department of Computer Science, University of Waterloo, December 1984. PDF at
    • Mantis H. M. Cheng. Applications of Waterloo Unix Prolog.
      • Waterloo Unix Prolog and Lisp Environment (WUPL). A functional programming language based on LispKit Lisp and integrated into the Waterloo Unix Prolog interactive programming environment. Report with User Manual, Implementor Manual, and source code listing. PDF
      • FPL. A typed functional programming language supporting lazy evaluation, higher-order functions and universal polymorphism. Originally written for Waterloo Unix Prolog, but ported to ALS Prolog. Scanned listing includes manual, source code, and many example FPL definitions. August 1, 1988. PDF


Warsaw University

These projects were carried out at the Institute of Informatics, Warsaw University. All the quotations in this section are taken from:
  • Feliks Kluźniak. The `Marseille Interpreter' -- a personal perspective. In [Campbell 1984]. Posted by permission of Feliks Kluźniak. PDF


First installation of Marseille Prolog in Warsaw

Hélène Le Gloane's port of Marseille Prolog to the Control Data 6000 at the Université de Montréal was installed on a CDC CYBER 73 at Warsaw University; see Kluźniak's description here.


Port of Marseille Prolog to ODRA 1305 (ICL 1906-compatible)

"In 1978 we obtained funding for porting Prolog to an ODRA 1305 (essentially an ICL 1900). The machine was much slower, but it had 24-bit words, so there was no question of packing: we had high hopes that the result would be a faster interpreter (in the end it turned out to be twice as fast as on the CYBER). The memory was also only 128K, but we could have all of it, as the machine had only a very simple executive program and was operated in open shop." [Kluźniak 1984]

For a detailed description of this implementation, which is based on the Marseille interpreter, see [Kluźniak 1984].

Source code

  • Snapshot of ODRA Prolog. Gift of Janusz Bień. ZIP archive Unpacked Kluźniak [1984] notes: "The Prolog system was in the form of four decks of cards."
    • "There was the interpreter proper, which consisted of about 2000 FORTRAN cards."" odra.3
    • "Another FORTRAN program - about 350 cards - was used to create a binary file with the interpreter's internal state. This program, which we called 'The Initiator', could only read in Prolog programs in a very low-level form - essentially a character representation of the internal form of Prolog clauses. The interpreter used Prefix Polish representation of trees, so we called this low-level language Prefix Prolog. To give an example of its distinctive flavour, here is the well-known procedure APPEND(*):
      (*) The first digit is the number of variables. Each functor is followed by its arity and variables are represented by integer offsets (not ambiguous, as numbers greater than 9 are not allowed)."
    • "The third deck - about 75 cards - started with a card defining the character set, followed by 17 cards of integer sequences defining the interpreter state's 'kernel' (the representation of NIL, etc.). Seven cards declared the non-character functors and predicates used in the Prefix Prolog program which followed, 'The Bootstrapper', which could read and execute programs written in what we called 'Prolog B'. This was rather primitive, but already similar to full Prolog ('Prolog C'). One could write:
                  +APPEND(.(*EL,*L), *L2, .(*EL,*L3)) -APPEND(*L,*L2,*L3)
      " odra.5
    • "The last deck consisted of about 400 cards in Prolog B, defining the full Prolog Monitor (interpreter with 'real' diagnostics, high-level input/output routines, etc.). The Monitor was written in a style apparently-designed to squeeze the last ounce of advantage from unification's ability to deal with multi-purpose arguments. Despite repeated attempts to read it, we could not at first understand more than small isolated fragments of this program, so for a long time we did it no harm apart from changing French diagnostic messages to Polish." odra.6



"After we finished with the ODRA, a Pascal interpreter was written for the CYBER [Kluźniak, 1981]. This used no bootstrapping and a different program representation,* but otherwise -- on a conceptual level - the general design of Marseille Prolog. It was very successful: reading time was about 20 clauses per second and small programs could be run in 54 000 (octal) words -- the turn-around for our Prolog class was not worse than for FORTRAN. We used it quite extensively until the telephone line to the CYBER was cut off in December 1981.
> * Direct tree representation, but tightly-packed print-names."
[Kluźniak 1984]
  • Feliks Kluźniak, IIUW-Prolog, Logic Programming Newsletter 1, 1981.


  • Barbara Dunin-Kęplicz and Stanisław Szpakowicz. Język programowani PROLOG (Polish). Institute of Computer Science, Polish Academy of Science, 1979. Online at
  • Feliks Kluźniak and Stanisław Szpakowicz. Prolog (Polish). Wydawnictwa Naukowo-Techniczne (Warszawa), 1983.
  • Feliks Kluźniak & Stanisław Szpakowicz, with a contribution by Janusz S. Bień. Prolog for Programmers. Academic Press Inc. (London), 1987, ISBN 0-12-416521-4. Online
    Source code for C and Pascal versions of Toy Pascal are provided on the web site.





"Németi had research contacts in Edinburgh and visited Scotland several times. From there he brought the news and some papers about a theorem prover (?) called Prolog. I was quite taken aback by the fact that there was a theorem prover that could do something useful: calculate the factorial of a number! Németi brought the Marseille interpreter as a deck of cards from Edinburgh together with a brief description of built-ins (on a line printer listing) entitled Epilog[400,400] and copies of slides of David Warren's talk entitled 'What is Prolog?'.

Porting of the Marseille Fortran interpreter to the ICL 1903A computer of NIM IGÜSZI was included into our research contract for 1975. A member of Németi's group, Péter Tóth, who was given this task, encountered unexpected problems due to the different word and character size (ICL 1900 had 24 bit words and 6 bit characters). While he was struggling with the porting, I decided to try to write my own Prolog interpreter in CDL. I actually had never had a look at the Marseille Prolog itself, I based the implementation on the last three slides of David Warren's above mentioned talk, entitled 'Example to illustrate how Prolog is implemented'. This showed three snapshots in the execution of the (naive) rev(a.b.X, a.b.X) goal. The structure of the (single) stack was quite apparent from these slides, and this, together with my earlier encounter with a structure sharing unification algorithm was enough to get me started. CDL proved to be a very convenient implementation tool, especially suited for parsing, so the tokeniser and parser were written in CDL, rather than in Prolog (as was the case for the Marseille interpreter).

I succeeded in producing a working Prolog interpreter in a few weeks, just in time for the usual yearly out of town gathering of NIM IGÜSZI software developers where Prolog was the main topic that year. The availability of a working interpreter gave a big boost to that meeting. Several people got rather excited about Prolog, including Ferenc Darvas who worked on projects for drug-industry, Iván Futó, who worked in simulation, Zsuzsa Márkusz, an architect, Miklós Szõts, a civil engineer turned computer scientist. (Both Zsuzsa Márkusz and Miklós Szõts were students of Németi.) In a few weeks after the meeting Miklós Szõts produced the very first application of the Hungarian Prolog: a program for planning of a one level workshop building using prefabricated panels. Ferenc Darvas also came back with a number of application proposals, where he believed Prolog to be of good use, such as predicting drug interactions and various other programs in drug design." [Szeredi 2004]

[Santane-Toth and Szeredi 1982] list 16 installations of this PROLOG system by 1980, and a long list of applications, beginning with drug design and architecture.

  • P. Szeredi and I. Futo. PROLOG reference (Hungarian) SZAMOLOGEP, VII. No. 3-4. pp. 5-130, 1977.
  • P. Koves. BS2000 PROLOG Users' Reference Manual. V2.4. (Hungarian) SZKI report, 1978.
  • T. Laufer. DOS PROLOG Users' Reference Manual. (Hungarian) Technical High School report, Pecs (Hungary), 1979.
  • E. Santane-Toth and P. Szeredi. PROLOG Applications in Hungary. In [Clark and Tärnlund 1982], pages 19-31, 1982.
  • Péter Szeredi. The Early Days of Prolog in Hungary - a personal account. Association for Logic Programming Newsletter, Vol 17, No. 4, November, 2004. Online at
  • C. H. A. Koster. CDL - a compiler implementation language. Proceedings of Confeence on Methods of Algorithmic Language Implementation. In Lectures Notes in Computer Science, No. 47, SPringer-Verlag, 1977.



"Catching the last wave of big government grants for software, the development of a new Prolog implementation was started in 1978. This implementation, later called MProlog, was based on the three stack Warren model of 1977. It was written in CDL2, a successor to CDL.

The MProlog system offered two paths for program execution. During development, the Program Development SubSystem (PDSS) provided an interactive environment for writing and testing programs. For application delivery the Production System was offered, which used the traditional translate-link-execute model.


It was written in CDL2 and in addition to interpretation proper, it served as the run-time system (i.e. memory management, etc.) for the compiled code.

MProlog extended the usual Edinburgh Prolog language in a number of respects. It had a (name based) module concept, user-controlled multi-level indexing, exception handling, a rich set of built-ins, including the undoable ones inherited from the first Hungarian Prolog. For more details on MProlog, see [Far1994]." [Szeredi 2004]

  • J. Bendl, K. Varga, M. Kosa and K. Balogh. The Specification of an Interpreter of a Modular PROLOG. (Hungarian) NIM IGUSZI report. SOFTTECH D20, SZAMKI, 1979.
  • J. Bendl, J. Boda, G. Bogdanfy, M. Kosa, L. Naszvadi and J. Visnyovszky. A Users' Documentation of the MPROLOG System. (Hungarian) NIM IGUSZI report, 1979.
  • J. Bendl, P. Köves and P. Szeredi. The MPROLOG system. In [Tärnlund 1980], pp. 201-210, 1980.
  • J. Bendl, M. Kosa and P. Szeredi. A Rough System Description of the MPROLOG Compiler for IBM like Architectures. (Hungarian) NIM IGUSZI - SZKI report, 1980.
  • Alex Bykat. An evaluation of MProlog by Logicware. SIGART Bulletin 95 (January 1986), pages 31-33. ACM Digital Library
  • Zs. Farkas., P. Köves, P. Szeredi. MProlog: an Implementation Overview. In Evan Tick and Giancarlo Succi (editors): Implementations of Logic Programming Systems. Kluwer Academic Publishers, 1994, 103-117


T-Prolog, CS-Prolog, CSO-Prolog, and CSR-Prolog

Iván Futó and his group.
  • I. Futó. Prolog with Communicating Processes: From T-Prolog to CSR-Prolog (Invited paper). In: D. S. Warren (Ed.): Logic Programming, Proceedings of the Tenth International Conference on Logic Programming, MIT Press, pages 3-17, 1993.


Imperial College London and Logic Programming Associates (LPA)



  • K. L. Clark and F. McCabe. Programmers' Guide to IC-PROLOG. CCD Report 79/7, Imperial College, University of London, 1979.
  • Keith L. Clark and Frank McCabe. The control facilities of IC-Prolog. Pages 122–149 of: [Michie 1979].
  • Steve. Gregory. Towards the compilation of annotated logic programs. Research Report DOC 80/16, Imperial College, London, 1980. PDF at PDF at via
  • Keith L. Clark, Frank G. McCabe, and Steve Gregory. IC-PROLOG — language features. Pages 253–266 of: [Clark and Tärnlund 1982].
  • Keith L. Clark and Frank G. McCabe. IC-PROLOG — aspects of its implementation. In [Clark and Tärnlund 1982].
  • Keith L. Clark and Sten-Åke Tärnlund (eds). Logic programming. London: Academic Press, 1982.


LPA micro-PROLOG, LPA Mac Prolog, LPA sigma-Prolog

  • F. G. McCabe. Micro-PROLOG programmers reference manual, 36 Gorst Rd., London:LPA Ltd., 1980.
  • Keith L. Clark and Frank G. McCabe. Micro-Prolog - programming in logic. Prentice Hall international series in computer science, Prentice Hall, 1984.
  • F. G. McCabe, K. L. Clark, B. D. Steel, and P. D. French. sigma-PROLOG 1.0 Programmer's Reference Manual. LPA Ltd., London, 1984. This was the Unix version of LPA's Prolog.
  • K. Clark, F. G. McCabe, N. Johns, C. Spenser. "LPA MacPROLOG Reference Manual", Logic Programming Associates Ltd, London, 1987.
  • Manuals and decompiled executables. Online at


Abstract Prolog Machine (APM)

  • F. G. McCabe. Abstract PROLOG machine — a specification. DOC 83/12, Department of Computing, Imperial College, May 1983. PDF


Relational Language, PARLOG, and Parallel PARLOG

"Giles Kahn, in his 1977 IFIP paper with Dave McQueen on a stream communication model of parallel programming, set me and Frank McCabe on the track of exploring coroutining and pseudo parallelism, with incremental communication via shared variables, in IC-Prolog. It was our inability to see how we might efficiently implement IC- Prolog on a multi-processor that was the motivation to find an alternative approach. Then, on a semester visit in 1980 to Syracuse University, at the invitation of Alan Robinson, Steve Gregory and I decided to look at Hoare's CSP for inspiration. The concept of guards and committed choice non-determinism of that language (an idea previously proposed by Dijkstra for his guarded command language) seemed to us just the concept needed to allow efficient implementation of and-parallelism with stream communication in a logic programming language. This lead to the so called Relational Language, which merged the committed choice, communication only on committment, concept of CSP with the equally elegant stream communication model of Kahn and McQueen.

Because of our early work on concurrent LP languages, Steve Gregory and I were invited to ICOT in 1983. (I was pleased to hear in his Monday conference presentation, that Koichi Furukawa had read with interest our 1981 paper on the Relational Language and, even before the start of the FGCS project, had considered using a concurrent logic language rather than an or-parallel Prolog as the PIM kernel language.) Our 1983 visit coincided with the second ICOT visit of Ehud Shapiro, the originator of Concurrent Prolog, which was based on but significantly extended the Relational Language. I believe that between the three of us, we helped convince Koichi Furukawa and his colleagues that adopting a concurrent LP language as the PIM kernel language was a sound approach. During that visit Steve Gregory and I crystalized our views on the essential features of Parlog, our successor to the Relational Language." [Clark 1992]

"After 1984, the languages had stabilized and implementation efforts started in earnest. The size of the Parlog group (which was previously 1-2) increased and ICOT expanded even further. Some excellent, seriously usable, implementations of both Parlog and GHC were developed, especially Jim Crammond's Parallel Parlog system and ICOT's KLIC. Ironically, by the time that these implementations became available, there were few people to use them: interest in concurrent logic programming, and FGCS technology in general, had already started to fade." [Gregory 2007]

  • Keith L. Clark and Steve Gregory. A relational language for parallel programming. Proceedings of the 1981 conference on Functional programming languages and computer architecture, p.171-178, October 18-22, 1981, Portsmouth, New Hampshire, United States. ACM Digital Library
  • K. L. Clark and S. Gregory. PARLOG: A parallel logic programming language. Res. rep. DOC 83/5, Dept. of Computing, Imperial College, London, May 1983. PDF at via
  • K. L. Clark and S. Gregory. Notes on systems programming in PARLOG. In Proceedings of the International Conference on Fifth Generation Computer Systems (Tokyo, Nov. 1984), pages 299-306. PDF at
  • K. L. Clark and S. Gregory. Notes on the implementation of PARLOG. J. Logic Program. 2, 1 (Apr. 1985), pages 17-42. ScienceDirect (open access)
  • Keith Clark and Steve Gregory. PARLOG: parallel programming in logic. ACM Trans. Program. Lang. Syst. 8, 1 (January 1986), pages 1-49. ACM Digital Library
  • I. Foster, S. Gregory, G. Ringwood, and K. Satoh. A Sequential Implementation of PARLOG. 3rd International Conference on Logic Programming, London, July 1986. SpringerLink
  • Keith L. Clark. PARLOG: the language and its applications. Pages 30–53 of: J. W. de Bakker, A. J. Nijman, and Philip C. Treleaven (eds). Proceedings of the conference on parallel architectures and languages europe (PARLE). Volume II: Parallel languages. Lecture Notes in Computer Science, vol. 259. Eindhoven, The Netherlands: Springer Verlag, 1987.
  • David Gilbert. PARLOG: a tutorial introduction, Current trends in Parallel Processing and Supercomputing, organised by the Belgian Institute for Automatic Control. November 19-20, Antwerp, 1987. .ps.gz at
  • S. Gregory. Parallel Logic Programming in PARLOG: The Language and its Implementation, Addison-Wesley, 1987.
  • T. Conlon and S. Gregory. Hands on MacParlog 1.0. Parallel Logic Programming Limited, London, January 1989.
  • Windows Parlog. Parallel Logic Programming Ltd. (dissolved in October 2015). Online at

Parallel PARLOG

  • Jim A. Crammond. Scheduling and Variable Assignment in the Parallel PARLOG Implementation. In Logic Programming, Proceedings of the 1990 North American Conference, Austin, Texas, USA, October 29 - November 1, 1990, pages 642-657, 1990.
  • Jim A. Crammond. The Abstract Machine and Implementation of Parallel Parlog. New Generation Computing, Vol. 10, No. 4, pages 385-422, 1992. SpringerLink
  • Parlog Group. The Parallel Parlog User Manual V1.5.9. Department of Computing, Imperial College, London, 9 October 1989, revised 28 September 1993. PDF
  • Source code: see IC Prolog ][ below.

History of PARLOG

  • Steve Gregory. Concurrent Logic Programming before ICOT: A Personal Perspective. The ALP Newsletter, vol. 20, no. 3/4, December 2007. Online at PDF


Logic and Objects

  • Francis Gregory McCabe. Logic and objects : language, application and implementation. Ph.D. thesis, Department of computing, Imperial College of Science and technology, April 17, 1989. Online at
  • Francis G. McCabe. Logic and Objects. Prentice Hall International, 1992.
  • Logic and Objects for MacProlog. Source code and documentatation. Requires LPA MacProlog 4.0 (running on Classic Mac OS). CMU AI Repository
  • Source code: see IC Prolog ][ below.
  • Zacharias Bobolakis. L&O on IC PROLOG ][ User’s Guide DRAFT. Undated, but circa 1993. PDF


IC Prolog ][

"IC-Prolog ][ (ICP) is a multi-threaded Prolog system developed at Imperial College. Multiple threads allow queries to be executed concurrently. ICP also has an interface to Unix TCP/IP system calls and "mailboxes", a high level communication system. This interface together with multiple threads enables distributed applications (such as client/server systems) to be written in Prolog.

The package also includes a preprocessor for the Logic & Objects (L&O) object-oriented extension to Prolog. This gives a powerful structuring mechanism for Prolog programs as well as providing a logical interpretation of inheritance and other object-oriented features. (The sources for the L&O extension is also available to LPA MacProlog users in the subdirectory 'lo'.)

Parlog has been integrated with IC-Prolog ][ as a separate thread, so applications may be written in either language depending on which is more suitable. (Standalone versions of the Parlog system for Sun-3 and Sun-4 can be found in the parlog/ directory.)

The package also includes a simple expert system shell called Skilaki." [Chu 1993]

  • Damian Chu. I.C. Prolog II: a Multithreaded Prolog System. Undated draft included in [Chu 93]. PDF
  • Damian Chu. I.C. Prolog II: a Language for Implementing Multi-Agent systems. Published in the Proceedings of the Special Interest Group on Cooperating Knowledge Based Systems, Keele, September 1992, and included in [Chu 93]. PDF
  • Yannis Cosmadopoulos and Damian Chu. IC Prolog II Reference Manual. Technical Report, Logic Programming Section, Department of Computing, Imperial College, Version 0.96, September 28, 1993. PDF HTML at via
  • Michael Lawley, Zacharias Bobolakis, and Yannis Cosmadopoulos. IC Prolog ][ and L&O. ALP Newsletter, Vol. 6, No. 1, February 1993. Online at
  • IC Prolog ][, Parallel Parlog, and Logic&Objects, version 0.96 for SUN 3 and SUN 4 (source, executables, documentation, examples), 1993. Provided by Frank G. McCabe. .zip archive


Sussex University


Poplog Prolog

"During 1982, Chris Mellish and Steve Hardy devised a model for implementing Prolog, using Pop-11 closures to represent Prolog continuations, and Chris implemented a Prolog in Pop-11, while he was learning Pop-11. It worked, but was somewhat slow compared with high performance Prolog systems.

One reason for comparative slowness was that we decided that it was particularly useful to enable Prolog to share data-structures with Pop-11. This meant that it was not always possible to infer that because a Prolog program could no longer access some structures they were inaccessible. They might still be accessible if they had been handed to a Pop-11 program and stored somewhere for later use. This meant that structures that could be allocated using a stack in a stand-alone Prolog, had to be on a garbage collectable heap in Poplog. The use of garbage collections could slow things down, though the more memory was available the less this mattered, since having more memory reduced the frequency of garbage collections.

There were other inefficiencies in the original implementation, which led John Gibson to extend the Pop-11 virtual machine to provide additional mechanisms specifically to support Prolog. For example, instead of Prolog continuations being Pop-11 closures allocated on the heap (and therefore requiring garbage collections), they were allocated on a special stack reserved for Prolog continuations. Additional changes were made to speed up backtracking and unification.

It was as a result of such changes for Prolog that we started referring to the Poplog virtual machine rather than the Pop-11 virtual machine." [Sloman 1989]

Source code


Papers and implementation documentation

  • Chris Mellish and Steve Hardy. Integrating Prolog into the POPLOG environment. Proceedings of the Eighth International Joint Conference on Artificial Intelligence, Vol. 1, 1983. PDF at
    A slightly expanded version of this paper appears as Chapter 25 of Robin Popplestone's unfinished book. Chapter 26 of the book is a description of those datatypes and procedures built into POPLOG which are intended for the support of Prolog. Online at
  • Aaron Sloman. The Evolution of POPLOG and Pop-11 at Sussex University. In: POP-11 Comes of Age: The Advancement of an AI Programming Language, Ed. J. A.D.W.Anderson, Ellis Horwood, pp 30-54, 1989. PDF and HTML at
  • R. Smith, A. Sloman and J. Gibson. POPLOG's two-level virtual machine support for interactive languages, In: D. Sleeman and N. Bernsen, editors. Research Directions in Cognitive Science Volume 5: Artificial Intelligence, Lawrence Erlbaum Associates, 1992, pages 203-231. Online at


Syracuse University



"I first encountered Lisp when John McCarthy rang my doorbell the day after we moved into a house in Menlo Park in the summer of 1965. I had published the Resolution paper a few months earlier and McCarthy had (in 2 hours!) written and run a Lisp program embodying the proof procedure, with, he said, minimal debugging. This seemed a miracle to me, who had for years been flailing about, first with assembly languages and then with Fortran. The gruff McCarthy, who was by then already well known, was also something of an astonishing revelation, but that is another story. I bought a copy of the Lisp 1.5 manual, and found it brilliant but with strangely clumsy but MIT-ishly bold and naïve blunders (involving QUOTE and functions as objects, FUNARGS and all that, eventually fixed years later in SCHEME but still there in Common Lisp)." [Interview with Alan Robinson, inventor of resolution logic, van Emden 2010]

"Some of the visitors [to Edinburgh in 1974] were not swept up in the anti-theorem proving campaign emanating from MIT. They believed that there was a lot of valuable potential in resolution theorem-proving. But when these people heard that we actually wanted to program in logic rather than in Lisp, the atmosphere would turn chilly. A prime example was Robinson himself. We thought he would be delighted to see resolution used to turn logic into an actual programming language complete with a beautiful fixpoint theory. He was not. His first and only love in programming was Lisp. Mechanize theorem-proving, by all means. But do it in Lisp. Later, Robinson was to give valuable support to logic programming in many ways, such as the founding of the [Journal of Logic Programming]. He was in favour of research in logic programming. But for him, programming was something you do in Lisp." [van Emden 2006]

"Our own early attempts (as devoted users of LISP) to use PROLOG convinced us that it would be worth the effort to create within LISP a faithful implementation of Kowalski's logic programming idea. We felt it would be very convenient to be able to set up a knowledge base of assertions inside a LISP workspace, and to compute the answers to queries simply by executing appropriate function calls. What seemed to be required was an extension of LISP consisting of a group of new primitives designed to support unification, LUSH resolution, and so on, as efficiently as possible. We set out to honor the principle of the separation of logic from control (no CUT, no preferred ordering of assertions within procedures nor of atomic sentences within hypotheses of assertions) by making the logic programming engine 'purely denotative'. Instead of the PROLOG method of generating the LUSH resolution proof tree one branch at a time by backtracking, we decided to generate all branches in quasi-parallel so that heuristic control techniques could be brought to bear on deciding which branch to develop at each step and so that our design would lend itself to multiprocessing at a later stage." [Robinson and Sibert 1982]

  • J. A. Robinson and E. E. Sibert. Logic Programming in LISP. Technical Report 8-80, E. E. School of Computer and Information Science, Syracuse University, November 1980. Also in Rome Air Deveopment Center Technical Report RADC 80-379, volume 1, 1980.
  • J. A. Robinson and E. E. Sibert. LOGLISP Implementation Notes. Technical Report, School of Computer and Information Science, Syracuse University, December 1981.
  • J. A. Robinson and E. E. Sibert. The LOGLISP User's Manual. Describes version V2M3 of LOGLISP, December 1981. Accesion number 102720431, Herbert Stoyan collection on LISP programming, Computer History Museum. PDF
  • J. A. Robinson and E. E. Sibert. LOGLISP: an alternative to PROLOG. In: J.E. Hayes, Donald Michie, and Y-H. Pao, editors, Machine_Intelligence 10, Ellis Horwood Ltd., Chicester, England, 1982. Online at
  • J. A. Robinson and E. E. Sibert. LOGLISP: Motivation, design and implementation. In: [Clark and Tärnlund], pages 299-313, 1982.
  • Robert C. Schrag. Notes on the Conversion of LogLisp from Rutgers/UCI-LISP to Interlisp. Rome Air Development Center, Final Technical Report RADC-TM-83-1, January 1983. PDF at
  • J. A. Robinson and E. E. Sibert. LOGLISP Implementation Notes. Technical Report, Logic Programming Research Group, Syracuse University, February, 1984.
  • Robert C. Schrag. Lisp Implementation Baseline Investigation. Rome Air Development Center, In House Report RADC-TR-84-151, June 1984. Online at
  • Robert C. Schrag. LogLisp Sequential Forms with Resolution Semantics. Rome Air Development Center, Final Technical Report RADC-TM-84-13, July 1984. Online at
  • Robert C. Schrag. Compilation and Environment Optimizations for LogLisp. Rome Air Development Center, Final Technical Report RADC-TM-84-14, July 1984. Online
  • J. A. Robinson, E. E. Sibert and K. J. Greene. The LOGLISP Programming System. Rome Air Development Center, Final Technical Report RADC-TR-85-89, May 1985. Online at
  • Sanjai Narain. Mycin: Implementing the Expert System in Loglisp. IEEE Software, Volume 2, Issue 3, May 1985. IEEE Xplore
  • J. A. Robinson. Beyond LOGLISP: combining functional and relational programming in a reduction setting. In: J. E. Hayes, Donald Michie, and J. Richards, editors. Machine Intelligence 11, Clarendon Press, 1988.
  • Maarten van Emden, interviewer. Interview with Alan Robinson, inventor of resolution logic. A Programmer's Place Blog, June 8, 2010. Online at


Syracuse/Argonne Prolog

"In the early 1980's, Kenneth Bowen and the Logic Programming Research Group at Syracuse University (Hamid Bacha, Kevin Buettner, Ilyas Cicekli, Keith Hughes, and Andrew Turk) were exploring meta-level extensions toLogic Programming systems, and to Prolog in particular. Desiring a Prolog implementation on which to experiment, they worked co-operatively with a group at Argonne National Laboratories (Tim Lindholm, Rusty Lusk, and Ross Overbeek), and initially developed a Prolog byte-code interpreter running on a Data General MV/8000, and later on a VAX 780. They found the system performance disappointing, and in late 1984, set out to develop a portable compiler-based system utilizing a byte-code interpreter for D. Warren's WAM design, implemented over C.

This came on line by fall, 1985. It contained a resident incremental compiler (from Prolog to WAM), and supported a module system, garbage compaction, and implemented assert/retract using on-the-fly compilation and decompilation techniques, the latter also utilized in a four-port debugger. The system performance was markedly better than the original byte-code interpreter. It was used as the starting point for two versions of a meta-prolog extension. ..." [See ALS Prolog below.] [Kenneth Bowen, personal communication, 11 June 2019]

  • Kenneth A. Bowen. Prolog. Proceedings of the 1979 annual conference (ACM '79), Arvid L. Martin and James L. Elshoff (Eds.). ACM, New York, NY, USA, 14-23. ACM Digital Library
  • Kenneth A. Bowen and Tobias Weinberg. A Meta-Level Extension of Prolog. Proceedings of the 1985 Symposium on Logic Programming, Boston, Massachusetts, USA, July 15-18, 1985, pages 48-53. Also: University of Syracuse, Electrical Engineering and Computer Science Technical Report 36. Online at
  • Kenneth A. Bowen, Kevin A. Buettner, Ilyas Cicekli, and Andrew Turk. The Design and Implementation of a High-Speed Incremental Portable Prolog Compiler. Proceedings of Third International Conference on Logic Programming, Imperial College of Science and Technology, London, United Kingdom, July 14-18, 1986, pages 650-656, SpringerLink. Also Technical Report. 35, Electrical Engineering and Computer Science, Syracuse University, 1985. Online at


SRI International and Stanford University

  • David H. D. Warren. A View Of The Fifth Generation and Its Impact, Technical Note 265. AI Center, SRI International, July 1982. Online at
  • See also [Pereira 1982].
  • Fernando C. N. Pereira. Can Drawing Be Liberated From The Von Neumann Style?, Technical Note 282. AI Center, SRI International, June 1983. Online at
  • David H. D. Warren Applied Logic--Its Use and Implementation As A Programming Tool, Technical Note 290. AI Center, SRI International, June 1983. Online at
  • Fernando C. N. Pereira and David H. D. Warren. Parsing As Deduction, Technical Note 295. AI Center, SRI International, June 1983. Online at


Warren Abstract Machine

  • David H. D. Warren. An Abstract Prolog Instruction Set. Technical Note 309, Artificial Intelligence Center, Computer Science and Technology Division, SRI International, October 1983. Online at
  • Evan Tick. An Overlapped Prolog Processor, Technical Note 308. AI Center, SRI International, October 1983. Online at
  • Evan Tick and David H. D. Warren. Towards a Pipelined Prolog Processor. New Generation Computing, Vol. 2, pages 323-345, 1984. Online at
  • E. Tick. Towards a Multiple Pipeline Prolog Processor, International Workshop on High-Level Computer Architecture, The University of Maryland, May 1984.
  • Evan Tick. 1984. Sequential Prolog machine: Image and host architectures. In Proceedings of the 17th annual workshop on Microprogramming (MICRO 17). IEEE Press, Piscataway, NJ, USA, 204-216. ACM Digital Library


Prolog technology theorem prover


University of Uppsala

See also this list of early Computer Science Department reports.

UPMAIL stands for Uppsala Programming Methodology and Artificial Intelligence Laboratory.



  • Martin Nilsson. FOOLOG--A Small and Efficient Prolog Interpreter. Report 20, June 1983.
  • M. Nilsson. The world's shortest Prolog interpreter? Pages 87-92 in [Campbell 1984].


YAQ (Yet Another QLOG)

Source code

Papers about YAQ

  • M. Carlsson. (Re)Implementing PROLOG in LISP or YAQ - Yet another QLOG. UPMAIL 81/1, Box 2059, S-75002, Uppsala, Sweden, 1981.
  • T. Risch. A Data Base Extension of Prolog and its Implementation. UPMAIL, Dept. of Computer Science, Uppsala University, Sweden, 1982. PDF at



"LM-Prolog is an implementation of Prolog for the MIT family of Lisp Machines. The Prolog dialect differs quite a bit from the Edinburgh Prolog family of dialects both in terms of syntax and built-in predicates. The bulk of the code was written in 1983, when the authors were at Uppsala University. The work was supported by the Swedish National Board for Technical Development (STU).

Ken Kahn wrote two precursors to the present implementation, one in Pure Lisp and one based on flavors and message passing and implemented libraries of built-in predicates and demo programs. The present implementation compiles Prolog predicates to Lisp functions, using success continuations to emulate the Prolog control structure. Mats Carlsson implemented the compiler and runtime support including microcode extensions for LMI CADRs and Lambdas." [Ken Kahn and Mats Carlsson, README, 1989]

Source code

Papers about LM-Prolog

  • Kenneth M. Kahn. A Grammar Kit in Prolog.
    • In New Horizons in Educational Computing, edited by M. Yazdani, Ellis Horwood Ltd., Chichester, U.K., 1983.
    • In Proc. AISB Easter Conference on Artificial Intelligence and Education, April 1983.
    • UPMAIL Technical Report 14C, Uppsala, revised February 2, 1985 by Mats Carlsson. PDF
  • Kenneth M. Kahn. Unique Features of LISP Machine Prolog. UPMAIL Technical Report 14, 1983 and Report 15B, revised February 1985 by Mats Carlsson. PDF
  • K. M. Kahn. A Primitive for the Control of Logic Programs. Proc. 1984 Symposium on Logic Programming, Atlantic City, and UPMAIL Technical Report 16, February 1983.
  • Mats Carlsson. LM-Prolog - The Language and its Implementation. Thesis for Licentiat of Philosophy in Computer Science at Uppsala University. UPMAIL Technical Report 30, October 1984. PDF
  • Kenneth M. Kahn and Mats Carlsson. The Compilation of Prolog Programs without the Use of a Prolog Compiler. Proceedings of the International Conference on Fifth Generation Computer Systems 1984, ICOT. PDF at
  • Mats Carlsson. On implementing Prolog in functional programming.
    • UPMAIL Technical Report 5, Uppsala, revised December 8, 1983. PDF
    • New Generation Computing, December 1984, Volume 2, Issue 4, pages 347–359. SpringerLink
  • K. M. Kahn and M. Carlsson. How to implement Prolog on a LISP Machine. Pages 117-134 in [Campbell 1984].



  • Executables for Tricia 0.9b and 0.95, for Macintosh Classic OS. CMU AI Repository
    "Credits to: Jonas Barklund, Monika Danielsson, Jan Gabrielsson, Per Mildner, Per-Eric Olsson and Jan Wünsche. The compiler was kindly contributed by Mats Carlsson. The editor and top level was contributed by e (a.k.a. Doug Currie)."

Papers about Tricia

  • J. Barklund, L. Oestreicher, Å. Hugosson, M. Nylén. Tricia User's Guide, Computing Science Department, Uppsala University, Sept. 1986.
  • J. Barklund, H. Millroth, Garbage Cut for Garbage Collection of Iterative Prolog Programs, in 1986 Symposium on Logic Programming , Salt Lake City, Sept. 1986.
  • Mats Carlsson. Compilation for Tricia and Its Abstract Machine, UPMAIL Technical Report 35, Uppsala, Sept. 1986. PDF
  • J. Barklund, H. Millroth, Code Generation and Runtime System for Tricia, UPMAIL Technical Report 36, Uppsala, in preparation.
  • J. Barklund. Efficient interpretation of Prolog programs. Papers of the Symposium on Interpreters and interpretive techniques (SIGPLAN '87), Richard L. Wexelblat (Ed.). SIGPLAN Not. 22, 7 (July 1987), 132-137. ACM Digital Library
  • Jonas Barklund, Efficient Interpretation of Prolog Programs. Report 39, April 1987. Expanded version of previous paper. (PDF at
  • Jonas Barklund and Håkan Millroth, Integrating Complex Data Structures in Prolog. UPMAIL Technical Report 42, Uppsala, October 1987. (PDF at


Nova Prolog

  • Jonas Barklund and Håkan Millroth. Nova Prolog. UPMAIL Technical Report 52, Uppsala, July 1988.


Reform Prolog

"Reform Prolog is an (dependent) AND-parallel system based on recursion parallelism and Reform compilation. The system supports selective, userdeclared, parallelization of binding-deterministic Prolog programs (nondeterminism local to each parallel process is allowed). The implementation extends a convential Prolog machine with support for data sharing and process managment. Extensive global dataflow analysis is employed to facilitate parallelization." [Bevemyr et al 1993]

  • Source code and documentation: Online at
  • Project home page: via
  • Håkan Millroth. Reforming Compilation of Logic Programs. Proceedings International Symposium on Logical Programming, MIT Press, 1991. Also Technical Report 67, Computer Science Department, University of Uppsala, July 1991. PDF at
  • Håkan Millroth. Using the Reform Inference System for Parallel Prolog. Report 69, Computer Science Department, University of Uppsala, January 1992. PDF at
  • Johan Bevemyr, Thomas Lindgren and Håkan Millroth. Exploiting Recursion-Parallelism in Prolog. Report 75, Computer Science Department, University of Uppsala, November 1993. PDF at
  • Johan Bevemyr, Thomas Lindgren and Håkan Millroth. Reform Prolog: The Language and its Implementation. In Proc. of the 10th Int'l Conference on Logic Programming, MIT Press, pages 283-298, 1993. Also Technical Report 76, Computer Science Department, University of Uppsala, November 1993. PDF at


Applied Logic Systems (ALS)


ALS Prolog

[See Syracuse/Argonne Prolog above.] "... A number of the group members decided to explore commercial possibilities in the PC arena and set out to reimplement the Research Group system design, targeting the then-current 16-bit systems, later extended to 32 bits. Applied Logic Systems, Inc. (ALS) was formed in 1984 to carry this out. The initial version, named ALS Prolog (or alspro), for the IBM PC/DOS, appeared in 1985, and implemented the compiler/WAM byte-code interpreter design from the research group. This was followed by a version for the Macintosh/MacOS. A native code compiler optimizing the WAM was developed for the IBM PC/DOS, and partially built for the Macintosh/MacOS. At the time, the native code compiler for the 386 chip was quite fast, and temporarily won the "naive reverse LIPS (Logical Inferences Per Second)" speed wars. However, the difficulty of maintaining and porting these native code compilers led to the development of a respectably efficient portable threaded code system which was subsequently used on all platforms.

These PC and Macintosh systems were followed relatively quickly (1987) by a version for Sun Workstations (Sun/SunOS/Solaris[m68000, later SPARC]), and then for other Unix workstations (Silcon Graphics/IRIX, HP/HPUX, IBM/AIX), VAX (a new version), NeXT/NeXTStep, and systems utilizing the Motorola 88k chip. An embeddable logic engine was developed under contract for Apple (plus a control interface for the Macintosh Programmer's Workshop (MPW)). It was delivered, but never released by Apple. In addition, tools for direct interfaces to dBase and R:Base were developed for the PC.

In the late 1980's - early 1990's, most of the original staff of ALS obtained their degrees from Syracuse University, and moved on to other employment. The remainder of ALS moved to Newton, MA (and later Cambridge, MA), where Chuck Houpt joined the company (and remains involved as a GitHub core memeber). XWindows interfaces were developed for the Unix workstations, and a port to Microsoft Windows was carried out via Win32. Later a port to Cygwin was developed and utilized for subsequent ports to Windows. A port to Linux was carried out, which later provided the basis for a Mac OSX version. Further database interface tools included ODBC and AccSys, tgoether with ODBC-based interfaces to Microsoft Access, Microsoft SQL Server, mySQL and Oracle.

Extensions/improvements during the 1990's included:

  • Foreign language interfaces to Tcl/Tk, Python, and Java;
  • A basic integrated windowed development environment (alsdev) built using Tcl/Tk;
  • Delay/freeze support;
  • A platform agnostic I/O system (i.e. read/write different line-endings);
  • Improved ISO Prolog conformance.
The system has been converted to open source, and now is accessible on GitHub at Documentation and releases are available at"

[Kenneth Bowen, personal communication, 11 June 2019]

Source code

Documentation and papers

  • Prolog Execution Model. Applied Logic Systems, Inc. March 20, 1998 PDF at



Bell-Northern Research (BNR)

William J. Older of the Computing Research Laboratory, Bell-Northern Research, and his colleagues developed a series of Prolog implementations starting in 1986 and eventually encompassing the handling of cyclic structures, breadth-first unification, variable functors, variadic structures, and relational interval arithmetic. [Older 1994] gives the basic history as well as a detailed overview of the system as of 1994.


XMS Prolog

"The forerunner of BNR Prolog was XMS Prolog, which was developed in 1986-87 within the XMS Project at BNR by William Older and Bruce Spencer. The first four versions of XMS Prolog were toy implementations of a structure-sharing interpreter written in BNR Pascal, but were valuable learning exercises. Some features, such as the State Space and context stack were already present at this early date. In 1987 the interpreter was totally redesigned and reimplemented in 68000 Assembler by W. Older to become Version 5 of XMS Prolog. The handling of cyclic structures, breadth-first unification, variable functors, and variadic structures all date from this period." [Older 1994]

XMS Prolog ran on BNR's XMS operating system:

  • Marek Fridrich and William J. Older. Helix: The Architecture of the {XMS} Distributed File system. IEEE Software, Vol. 2, No. 3, 1985, pages 21-29. Online at


BNR Prolog

"BNR Prolog developed from XMS Prolog during 1988-89. Much of the Version 5 XMS Prolog core structure was retained, but ported into UCSD Pascal to run on Macs. Variable name retention was added at this time as well as freeze, and the syntax was changed radically to bring in it into conformance with the evolving Prolog standards. Also added was the relational interval subsystem based on the ideas of Dr. John Cleary of the U. of Calgary.(*) A major portion of the work was aimed at adapting the system from a conventional command line interpreter, to a relatively complete graphics-oriented programming environment with high level access to many of the Mac capabilities.

The development team consisted of William Older, John Rummell, Susan Antoft, Rick Snapper, Bijan Farrahi, Peter Hoddinott, Andre Vellino, Al Sary, and Marianne Morin, all under the direction of Rick Workman. Many contributions were made by other people during this period and in the next couple of years. In particular, Peter Cashin, the director of CRL, initiated (among other things) the Panels subsystem which was developed further by Rick Workman.

The Mac versions of BNR Prolog (and the associated manuals) were distributed to many in the academic community and other researchers around the world from 1989 to 1992. Several universities, such as Karlsruhe in Germany and Laval in Quebec, have adopted it as a teaching language at one time or another, so that many thousands of students have come into contact with it in various places. The interval arithmetic system has attracted much interest in the constraint programming community, and the technology has been copied several times: Interlog (Dassault Electronique, Fr.), ILOG Solver (Fr.), 1994 release of VM Prolog (IBM, Paris), and very likely by future Prolog IV (Marseille) and Prince (an Esprit project), as well as in several non-commercial systems.

The Unix versions of BNR Prolog originated in 1991 with William Older’s design for a WAM-style compiler extended for BNR Prolog and its corresponding byte-coded interpreter. A wholly new core system based on this design was implemented in C in 1992-93 by John Rummell, and an alternate interpreter in 68K Assembler was done by W. Older. A team of developers under Jean Jervis developed the X-system interface in 1993 and reimplemented the GUI tools on top. A greatly extended new design for the relational interval arithmetic subsystem, renamed CLP(BNR), was developed by William Older and Frederic Benhamou and implemented in 1993 and subsequently upgraded in 1994." [Older 1994]

(*) See:

Source code

  • Source Archive of final BNR Prolog release, V5.0.5, 1999 for Unix platform(s) of that time. Online at

    "This archive is provided as is under the MIT license even though individual files do not have copyright notices..."

  • Re-implementation of CLP(BNR) in Prolog and packaged as an SWI-Prolog module. Online at


  • BNR Prolog Reference Manual (Macintosh Version). PDF
  • BNR Prolog User Guide (Macintosh Version). PDF

Papers about BNR Prolog

  • William J. Older and André Vellino. Extending Prolog with Constraint Arithmetic on Real Intervals. Proceedings of the Canadian Conference on Electric and Computer Engineering, 1990. [Colmerauer 2011] notes "[This paper will] be important for Prolog IV." PDF at
  • William J. Older. Inside BNR Prolog, or, Wendezvous with WAMA. Computational Research Laboratory, Bell-Northern Research, 1994. PDF at
  • BNR Prolog Papers: Collection of formal and informal papers covering design and use of BNR Prolog (1988-1995). Online at
  • W. J. Older and J. A. Rummell. An Incremental Garbage Collector for WAM-Based Prolog, Proceedings of the Joint International Conference and Symposium on Logic Programming, MIT Press, Cambridge, Mass., 1992.
  • William J. Older. William J. Older. Introduction to CLP(BNR): Notes from a course given at Carleton University, Winter Term, 1995. PDF


University of Cambridge


DelPhi Parallel Inference Machine

"[After Prolog-X] I felt the only way forward in performance was to exploit multiprocessing, and realised that Prolog was an ideal language for running OR-parallel (now called 'embarrassingly parallel' programs), and devised a novel architecture for running it on a network of loosely coupled multiple processors. I persuaded DEC to donate 25 micro-VAXes to me, and ran parallel Prolog on that for a while. I became interested in other research topics, so this work came to an end. However, I think it is still worth preserving as an interesting idea with unexploited potential for the future." [William Clocksin, personal communication, 11 June 2019]

"... the DelPhi principle ... states that the construction of computation state for each path (from the topmost goal node to a given terminal node) of a OR-only proof tree should be computed by a single processor associated with the path. Given multiple processors, the way to deploy them according to this principle is to enumerate all paths of the proof tree, and to associate each path with a processor. A path is represented by an oracle, a list of the nodes along a path. An oracle always begins with the root node of the tree, and terminates with either a success or failure node. The important thing about an oracle is that it is compact and context-free (contains no computation state such as variable bindings). For example, the complete OR-only binary tree of depth n has 2n oracles, which are all binary strings of length n bits. Because a path of an OR-only tree contains no decisions and does not require state from ‘across’ the tree, a given processor in possession of the program is in principle capable of computing the path (choosing clauses as directed by the oracle and performing a series of unifications) without further inter-processor communications until the oracle is exhausted. A tree containing AND nodes may be converted to an OR-only forest by standard methods. Assuming the two subpaths of a binary AND-node are to be executed in sequence, the execution may be determined by an oracle string of the length of the sum of the lengths of the two subpaths. In practice, the forest is not constructed, but is tracked as execution proceeds ..." [Clocksin 1992]

  • W. F. Clocksin and H. Alshawi. A Method for Efficiently Executing Horn Clause Programs using Multiple Processors. Technical Report CCSRC-3, Computer Laboratory, University of Cambridge, September 1987. Revised version of unpublished manuscript by the authors dated May 1986.
  • W. F. Clocksin. Principles of the DelPhi Parallel Inference Machine. The Computer Journal, Volume 30, Issue 5, October 1987, Pages 386–392. Oxford Academic (open access)
  • W. F. Clocksin and H. Alshawi. A Method for Efficiently Executing Horn Clause Programs using Multiple Processors. New Generation Computing, March 1988, Volume 5, Issue 4, pages 361–376. SpringerLink
  • H. Alshawi and D.B. Moran. The Delphi model and some preliminary experiments. Proceedings 5th Conf. Symp. Logic Programming (Kowalski and Bowen, editors.), MIT Press, 1989, pages 578-1589.
  • K. L. Wrench. A distributed and-or parallel prolog network. PhD dissertation. Available in summary form as Technical Report 212, Computer Laboratory, University of Cambridge, 1990.
  • C. S. Klein. Exploiting or-parallelism in Prolog using multiple sequential machines. PhD dissertation. Reprinted as Technical Report 216, Computer Laboratory, University of Cambridge, 1991.
  • W. F. Clocksin. The DelPhi multiprocessor inference computer. Workshop #6 (parallel and distributed implementations), 1992 International Joint Conference and Symposium on Logic Programming, Washington, 1992. ps.Z at - PDF (repaired)
  • W. F. Clocksin. The DelPhi multiprocessor inference computer. In 4th UK Conference on Logic Programming (K. Boda, ed), Springer Verlag, 1993. SpringerLink
  • Project summary, circa 1993. Online at
  • S. Saraswat. Performance Evaluation of the Delphi Machine. Ph.D. thesis, Computer Laboratory, Cambridge University, England, Dec. 1995. Reprinted as Technical Report No. 385.
  • Ian Lewis. PrologPF: Parallel Logic and Functions on the Delphi Machine. Ph.D. thesis, Girton College, University of Cambridge, 1998. University of Cambridge Repository

    "PrologPF is a parallelising compiler targeting a distributed system of general purpose workstations connected by a relatively low performance network. The source language extends standard Prolog with the integration of higher-order functions. ..."


Swedish Institute of Computer Science (SICS)


SICStus Prolog

"1985–1990. SICS is founded and recruits the first author, who joins the Logic Programming Systems laboratory, headed by Seif Haridi. The laboratory’s first and main field of research was or-parallel execution of Prolog. The first author’s first task at SICS is to develop the Prolog engine that will be the subject of parallelization (Gupta et al. 2001). This happens in the informal Aurora project (Lusk et al. 1990) involving David H.D. Warren and researchers from Manchester and ANL, who provide schedulers and visualizers. Subsequently, another SICStus-based or-parallel effort, MUSE (Ali and Karlsson 1990a; Ali and Karlsson 1990b), doing more copying and less sharing than Aurora, is being pursued by other SICS researchers. At the same time, SICS begins distribution of SICStus Prolog, which quickly becomes popular mainly in the academy. Visitors Carl Kesselman and Ralph Haygood develop execution profilers and native code compilers, respectively." [Carlsson and Mildner 2012]


Papers about SICStus Prolog

  • M. Carlsson. On Compiling Indexing and Cut for the WAM. Swedish Institute of Computer Science, Report R86011B, December 18, 1986. PDF
  • Mats Carlsson. An Implementation of dif and freeze in the WAM. Research Report R86012, Swedish Institute of Computer Science, December 18, 1986. PDF
  • M. Carlsson. Internals of Sicstus Prolog version 0.6. Internal Report, Gigalips Project, November, 1987.
  • Mats Carlsson. The SICStus emulator. SICS Report T91:15. Only the first 30 pages are present in the online copy. Online at SODA, the Software institutes' Online Digital Archive
  • M. Carlsson and P. Mildner. SICStus Prolog—The first 25 years. Theory and Practice of Logic Programming, 12(1-2), 2012, pages 35-66. Cambridge Core - Draft at

Web site


Muse Prolog

"... Subsequently, another SICStus-based or-parallel effort, MUSE (Ali and Karlsson 1990a; Ali and Karlsson 1990b), doing more copying and less sharing than Aurora, is being pursued by other SICS researchers. [Carlsson and Mildner 2012]"

  • K. Ali and R. Karlsson. The Muse or-parallel Prolog model and its performance. In Proc. of the North American Conference on Logic Programming (NACLP ’90). MIT Press, Cambridge, 757–776.
  • K. Ali and R. Karlsson. The Muse approach to or-parallel Prolog. International Journal of Parallel Programming 19, 2, 129–162, Springer.
  • Roland Karlsson and Khayri A. M. Ali. The Engine-Scheduler Interface used in the Muse OR-parallel Prolog System. Research Report R92:04, Swedish Institute of Computer Science, 1992. Online at DiVA Portal
  • Khayri A. M. Ali, Roland Karlsson, and Shyam Mudambi. Performance of Muse on Switch-Based Multiprocesor Machines. Research Report R92:07, Swedish Institute of Computer Science, 1992. Online at DiVA Portal


Gigalips Project (Argonne National Laboratory, University of Manchester, University of Bristol, SICS, and IQSOFT SZKI)

  • Péter Szeredi. Performance Analysis of the Aurora Or-Parallel Prolog System. In Proceedings of the North American Conference on Logic Programming, E. Lusk and R. Overbeek, Eds. MIT Press, Cambridge, MA, 713–732, 1989.
  • E. Lusk, R. Butler, T. Disz, R. Overbeek, R. Stevens, David H.D. Warren, A. Calderwood, Péter Szeredi, Per Brand, Mats Carlsson, Andrzej Ciepielewski, Bogumil Hausman, and Seif Haridi. The Aurora or-parallel Prolog system. New Generation Computing, 7 (2,3), February 1990, pages 243-271. SpringerLink
  • Péter Szeredi and Mats Carlsson. The Engine-Scheduler Interface in the Aurora Or-Parallel Prolog System. Technical Report TR90-09, University of Bristol, April 1990. PDF
  • Feliks Kluźniak. Developing Applications for Aurora Or-Parallel System. Technical Report TR-90-17, Dept. of Computer Science, University of Bristol, 1990.
  • Mats Carlsson and Péter Szeredi. The Aurora Abstract Machine and its Emulator. Report R90005, Swedish Institute of Computer Science, 1990. Online at SODA digital archive
  • Mats Carlsson. Design and Implementation of an OR-Parallel Prolog Engine. Ph.D. thesis, Royal Institute of Technology, Stockholm, 1990.
  • Péter Szeredi. Contributions To Or-Parallel Logic Programming. Ph.D. thesis, Technical University of Budapest, December 1997. PDF at



This project would not have been possible with help from many people:

  • Alain Colmerauer
  • Mike Alexander
  • Janusz Bień
  • Ken Bowen
  • Lars Brinkhoff
  • Maurice Bruynooghe
  • Mats Carlsson
  • Peter Cashin
  • Mantis Cheng
  • William F. Clocksin
  • Christopher J. Dollin
  • Maarten van Emden
  • Randy Goebel
  • Steve Gregory
  • Chuck Houpt
  • Feliks Kluźniak
  • Jan Komorowski
  • Tim Lindholm
  • Frank G. McCabe
  • Guy Alain Narboni
  • Ulrich Neumerkel
  • William Older
  • Elena Pereira
  • Fernando C. N. Pereira
  • Grant Roberts
  • Robert Schrag
  • Brian D. Steel
  • Stanisław Szpakowicz
  • André Vellino
  • David H. D. Warren
  • Rick Workman
« August 2019 »
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: