CurryInfo: call-analysis-3.2.0

categories:
Analysis Optimization
dependencies:
[Dependency "base" [[VGte "3.2.0",VLt "4.0.0"]],Dependency "directory" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "flatcurry" [[VGte "3.0.0",VLt "5.0.0"]],Dependency "filepath" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "profiling" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "redblacktree" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "showflatcurry" [[VGte "3.0.0",VLt "4.0.0"]]]
documentation:
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](https://doi.org/10.1145/1389449.1389459),
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](http://dx.doi.org/10.4230/LIPIcs.ICLP.2012.130),
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-ndopt`
to analyze and transform your program.


Remarks:

* The implementation contains an analysis with depth-bounded terms.
  The default depth bound is 2. It can be changed to <k> by executing
  the command `curry-ndopt -d <k> prog`.

* Currently, the main program must contain all rules, i.e.,
  no modules are imported for the program analysis.
  In particular, primitive functions must be also defined
  in the program file (compare `benchmarks_callpattern/readfile.curry`).

* In programs containing higher-order applications
  (compare `benchmarks_callpattern/mapadddouble.curry`), rules to define
  an higher-order application operator `apply` are implicitly
  generated.


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.
exportedmodules:
Overlapping Names TRS Nondeterminism NondetAnalysis Analysis Dependency LetDropping OrCaseLifter ReadFlatTRS
modules:
Overlapping Names TRS Nondeterminism NondetAnalysis Analysis Dependency LetDropping OrCaseLifter ReadFlatTRS
version:
3.2.0