PEPE is a tool that help the user to estimate the cost improvements that
can be achieved by a partial evaluator. It takes as input a logic program
and an abstract atom, i.e., an atom whose arguments are either s
(static) or d (dynamic), and proceeds as follows:
First, a trace analysis is run in order to determine the shape of
the successful computations of the program.
Then, a termination analysis (namely a size-change analysis) and
a simple (monovariant) BTA are used for inferring which loops can
be safely unrolled.
The analysis gives only qualitative information so far: it shows two
regular expressions denoting the call traces of the original and
partially evaluated program. By comparing the two traces, the
user can observe which predicate calls would be removed by partial
evaluation and whether their removal would imply a significant
speedup or not.
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 also
provide an abstract atom.
The abstract atom is used as entry for both the trace analysis and
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).