ALF is a language which combines functional and logic programming
techniques. The foundation of ALF is Horn clause logic with equality
which consists of predicates and Horn clauses for logic
programming, and functions and equations for functional programming.
Since ALF is a genuine integration of both programming paradigms,
any functional expression can be used in a goal literal and
arbitrary predicates can occur in conditions of equations.
The operational semantics of ALF is based on the resolution rule
to solve literals and narrowing to evaluate functional expressions.
In order to reduce the number of possible narrowing steps,
a leftmost-innermost basic narrowing strategy is used which can
be efficiently implemented. Furthermore, terms are simplified by rewriting
before a narrowing step is applied and also equations are rejected
if the two sides have different constructors at the top.
Rewriting and rejection can result in a large reduction of the search tree.
Therefore this operational semantics is more efficient
than Prolog's resolution strategy.

The ALF system
is an efficient implementation of the combination
of resolution, narrowing, rewriting and rejection.
Similarly to Prolog, ALF uses a backtracking strategy corresponding
to a depth-first search in the derivation tree.
ALF programs are compiled into instructions of an abstract machine.
The abstract machine is based on the Warren Abstract Machine (WAM)
with several extensions to implement narrowing and rewriting.
In the current implementation programs of this abstract machine are
executed by an emulator written in C.

A detailed user manual describing
the language and the use of the system ALF is available.

You can get the
ALF System for free, but if you take the system it is assumed
that you agree with the license agreement.
It would be nice if you send us your name,
institution and email address so that we can inform you
about updates and other things concerning the ALF system.

More information about getting and installing the ALF system
can be found >here<.