= Welcome to Higher Order Prolog with Extensional Semantics =
Hopes is a prototype interpreter for a higher-order PROLOG-like
language. The syntax of the language extends that of [http://en.wikipedia.org/wiki/Prolog PROLOG] by
supporting higher-order constructs (such as higher-order predicate
variables, partial application and lambda terms). In particular,
the syntax allows clauses (and queries) that contain uninstantiated
predicate variables. The interpreter implements a higher-order
top-down SLD-resolution proof procedure described in [http://arxiv.org/abs/1106.3457 this paper]. In the
case of uninstantiated predicate variables, the proof procedure
will systematically (and in a sophisticated way) investigate all
finite instantiations of these variables.
In other words, Hopes has all the advantages of a higher-order system but continues to keep the flavor of classical Prolog programming.
== Getting Started with the Interpreter ==
To checkout the source from the darcs repository you should execute
{{{
darcs get http://code.haskell.org/hopes hopes
}}}
To compile the source you must install the cabal package and execute
{{{
make
}}}
== Features ==
* Can write first-order programs like ordinary Prolog.
* Higher-Order Variables: Can be passed as arguments and called like ordinary predicates.
* Partial Applications: Predicates can be applied only to some of their arguments.
* Lambda Abstractions: Support of anonymous predicate definition using lambda abstractions.
* Existential Higher-Order Variables: Can query a variable relation and generate an appropriate extensional binding.
== Examples ==
In order to gain some intuition behind logic programming in HOPES some simple examples are given.
The ordered predicate is the simple second-order predicate that holds if the
relation R is an ordering of the list.
{{{
ordered(R, []).
ordered(R, [X]).
ordered(R, [X, Y| Z]):- R(X,Y), ordered(R, [Y|Z]).
}}}
The popular map predicate:
{{{
map(R, [], []).
map(R, [X|Xs], [Y|Ys]) :- R(X, Y), map(R, Xs, Ys).
}}}
== Other Higher Order Logic Systems ==
* [http://teyjus.cs.umn.edu/ Teygus] is an implementation of [http://www.lix.polytechnique.fr/~dale/lProlog/ lambdaProlog].
* [http://xsb.sourceforge.net/index.html XSB] includes an implementation of [http://www.cs.stonybrook.edu/~kifer/TechReports/hilog.pdf HiLog].