NSF Grant: IRI-9308970
1993-1997
Stephen Murrell (co-principal investigator)
Jan Plaza (co-principal investigator)
Eric Gottlieb (graduate assistant)
George Holler (graduate assistant)
Sidong Liu (graduate assistant)
The style of traditional programming is imperative: a program instructs the
computer how to accomplish a task, for instance how to sort a list. On the other
hand, logic programming opens a possibility of declarative programming, i.e.
writing programs which just tell the computer what final state is desired, for
instance that we want a list to be sorted adding a definition which explains what is meant
by a sorted list. A logic program is written as a set of logical definitions
(declarations, specifications.) The same program is interpreted by a computer as a set of
imperative procedures. After composing the program in a declarative way, the programmer
may wish to consider program's imperative meaning, and add control structures to improve
the efficiency.
This research project was concerned with designing a logic programming system which could offer the programmer a wide expressive power and minimize the need for thinking about the procedural meaning of the program. It included the development of a theory and an experimental implementation.
The project resulted in creation of Logos -- an extendable, declarative logic programming language with equality constraints over an open universe of terms. The language has a fully declarative core that guarantees soundness and completeness for a useful and easily identifiable set of programs; answers returned by the programs outside this core will be sound but not necessarily complete. Logos (unlike Prolog) is based on solid mathematical foundations and its syntax and semantics adhere very strictly to the classical first-order logic. In its core, the language provides a form of negation related to classical negation, both universal and existential quantifiers, as well as logical input/output features of a new design. Arithmetic and certain meta-programing constructs, although not in the core, are also available. Besides logical connectives "or" and "and" whose components can be evaluated in any order, Logos also supports the familiar sequential connectives of Prolog represented by a comma and semicolon. The project has shown how Logos could be extended to handle multiple open and closed universes and metaprogramming constructs significantly more powerful than those known from Prolog.
The current experimental implementation Logos 1.0 is in a form of an interpreter. To assure portability, the interpreter is written in Common LISP.
The language was constructed in order to investigate how far the idea of declarative programming can be extended. Having measures of uncertainty attached to program rules turned out to be incompatible with the essential idea of the language - handling uncertainty by means of separate causal nets outside the language seems more appropriate.
Logos is an extendible language with a potential for extensions which could be applied
in construction of distributed multi-component intelligent systems. We believe
that the availabilty of a commercial product based on these ideas would have a desirable
impact on the development of future intelligent systems.
FILE | BYTES | DESCRIPTION |
Documentation | ||
readme.txt | 2,930 | quick explanation of what is what |
manual.doc | 35,840 | introduction to Logos 1.0 (MS Word) |
manual.txt | 20,876 | introduction to Logos 1.0 (text) |
Sample Logos Programs | ||
demo.l | 6,927 | self-running demo |
tomandjerry.l | 423 | demo of basic capabilities |
hanoi.l | 6,927 | towers of Hanoi |
lists.l | 6,927 | append, reverse lists, etc |
numbers.l | 6,927 | numbers and arithmetic with z, s(z), s(s(z)), etc. |
family.l | 6,927 | family relationships |
Logos Source Files in Common Lisp | ||
init.lsp | 3,771 | load this first |
l.lsp | 755 | auto-loader |
main.lsp | 8,730 | read-execute-write loop |
builtins.lsp | 39,692 | defines builtin operations (e.g. write) |
disjoin.lsp | 7,662 | complex logic operations |
guards.lsp | 52,929 | complex logic operations |
parser.lsp | 36,683 | Logos parser |
pp.lsp | 13,075 | pretty-printer |
printer.lsp | 17,558 | Logos parser inverted |
resolve.lsp | 45,273 | program solver |
sortsf.lsp | 12,385 | complex logic operations |
vars.lsp | 1,638 | global variables |
preprocessor.lsp | 58,397 | pre-processor |
utilities.lsp | 13,994 | utilities |
Executables | ||
macLogos10 (*) | 2,043,648 | Logos interpreter for Macintosh |
Packages | ||
logos10.sea (*) | 1,337,244 | Macintosh executable, documentation and programs |
logos10src.sea (*) | 94,244 | source, documentation and programs (Macintosh) |
logos10src.zip | 88,244 | source, documentation and programs (Windows) |
logos10src.tar.gz | 77,429 | source, documentation and programs (Unix) |
(*) Notice: If your Macintosh does not recognize this file as an "application
program" it will not run.
logos.ps
A bibliography of relevant logic programming papers (LaTeX format).
You can visit the home page of LPNMR -- a forum for exchange of information on logic programming and non-monotonic reasoning.
Go back to: