Educational objectives

An objective defines what change is intended, particularly what the student should know or be able to do after the course that he or she could not do before.

We organize these according to the course sections.

1. Background in predicate logic
Be able to define the first order predicate logic language, interpretation, model, satisfiability, validity, logical implication.
Understand substitution, composition of substitutions. Be able to unify two terms using the unification algorithm. Understand clause form, be able to put an arbitrary formula into clause form. Understand resolution, be able to derive a resolution proof given a set of axioms and a hypothesis.
Understand strategies, in particular the SLD strategy, be able to carry out a proof using an SLD strategy.

2. Introduction to logic programming.
Understand the development of logic programming from clauses and SLD resolution.
Be able to define logic programs, goals, facts, rules, and that the solution is logically implied by the program.
Understand logic programming interpreters, be able to read one and modify one.
Understand the definition of different data types in logic programming, notably lists.
Understand how a logic program computes a relation, and how different programs and strategies may have different termination properties.

3. Pure Prolog.
Understand the definition of Prolog, and the Prolog interpreter.
Be able to write programs in Pure Prolog.

4. Full Prolog.
Understand and be able to use:
(i) arithmetic predicates, strings
(ii) selection and construction of terms and statements,
(iii) assert and retract
(iv) metalogical predicates
(v) input/output using read and write, streams and sockets
(vi) cut
(vii) setof
(viii) Prolog libraries