PROFF is an offline partial evaluator for
Prolog programs. The pre-processing stage performs a size-change
analysis (to ensure the termination of the process) and a
(monovariant) binding-time analysis (to propagate static information
through the program). Then the source program is annotatated by using
the information gathered by the previous two analyses. Finally, the
proper specialization phase mainly follows the program annotations.
You can find a more detailed description of the tool
including the source files.
A technical description can be found in this
You can either write down the initial program or choose one from the
list of examples. Once the program is loaded in, you should provide an
abstract atom and an initial call.
The abstract atom is used as entry for the binding-time analysis,
e.g., incList(d,s,d) in example incList.pl, where
s means that the corresponding argument is static (definitely
known) and d means that it is dynamic (possibly unknown).
The initial call is used to start the proper specialization process,
e.g., incList(L,s(s(s(0))),LI) in example incList.pl.