Call-Pattern Analysis and Improving Lazy Non-Deterministic Computations

This package contains an initial prototype for analyzing call patterns in Curry programs. This analysis is described in this paper:

Michael Hanus: Call Pattern Analysis for Functional Logic Programs, Proc. of the 10th International ACM SIGPLAN Conference on Principles and Practice of Declarative Programming (PPDP'08), ACM Press, pp. 67-78, 2008

Moreover, the package contains also a transformation tool to improve lazy non-deterministic computations by a demand analysis, which is described in this paper:

Michael Hanus: Improving Lazy Non-Deterministic Computations by Demand Analysis, Technical Communications of the 28th International Conference on Logic Programming (ICLP 2012), Leibniz International Proceedings in Informatics (LIPIcs), vol. 17, pp. 130-143, 2012

After installing this package, use the command curry-calls to analyze and transform your program.

Remarks:

Some modules in the directory src:

Analysis.curry: The main analysis implementation.

TRS.curry: Some basic definitions to deal with term rewriting systems.

ReadFlatTRS.curry: An implementation of an I/O action to read a Curry program and return the corresponding rewrite rules.

OrCaseLifter.curry: A transformation on FlatCurry program that removes deeply nested case expressions by introducing auxiliary functions. Used by ReadFlatTRS.