#
Fall 1998 Course Announcement

22C:193 Logic Programming

Instructor: Arthur C. Fleck

Time/place: 1:30 pm MWF / 214 MLH

Primary text: K. R. Apt, From Logic Programming to Prolog, Prentice-Hall, 1997.

## Course overview

The ultimate goal of logic programming is to allow us to specify only the
requirements for a correct solution to a problem -- a program specification --
and then (mechanically) infer a solution from this information.
So far logic programming has achieved this ultimate goal imperfectly, but it
continues to evolve toward this end. And for many problems, logic programming
already provides an especially direct progression from a conceptual solution
to a computer program.
It is a unique paradigm suitable for many non-numeric applications,
and has connections with a variety of areas of computer science including
automatic theorem proving, deductive database, and various AI applications
such as natural language processing, expert systems, and knowledge
representation. The principal focus
of this course will be on the semantics and pragmatics of Prolog programming,
including analysis of its aptness for logic programming. Additional topics
will be the Life language and its object orientation to logic programming,
and constraint satisfaction as an extension to logic programming as imbodied
in the language CLP(R).
General background from the formal prerequisites 22C:21 and 22C:23 will be
assumed. There will be no prior knowledge of logic programming required,
necessary background for course topics will be developed. It will be assumed
that the student has experience
with several programming languages, and especially that recursion is a familiar
concept. Please note that undergraduate majors can select this course as one
of the two advanced CS courses required for the B.S. degree.

The course will involve both conceptual and project work. The projects
will be of
modest size and will use Prolog (mostly), CLP(R), Life, and possibly other
logic languages for which implementations can be obtained. A tentative
listing below indicates the
range of topics.
It will not be possible to provide a complete treatment of all these topics,
so some will be touched on only briefly.

## Tentative topic list

- Overview of Prolog and the philosophy of logic programming

- Substitutions & unification

- Horn clause logic
- proof theory - resolution
- model theory semantics
- computability

- Prolog semantics
- procedural semantics
- WAM(Warren's Abstract Machine) code

- Logic programming vs. Prolog programming
- arithmetic & 'is'
- occur-check
- cut
- assert/retract
- higher-order features(e.g., call, findall)
- negation, CWA, & NAF
- difference lists

- Logic grammars
- translation to Prolog clauses
- programming language and natural language analysis

- the Life language

- Constraint programming and
the CLP(R) language

There are a wide variety of sites on the Web that contain useful information
on logic programming and related topics. Here are a few starting points: