======
  ACP 
======

* Description

ACP is an automated confluence prover for term rewriting systems.
See http://www.nue.riec.tohoku.ac.jp/tools/acp/ for details.

* What is needed to run the ACP?

ACP is written in Standard ML of New Jersey (SML/NJ). 
To run the ACP, you need Standard ML of New Jersey (http://www.sml.org/).
We are using version 110.79. To use recent versions of < 110.75, comment 
out lines 83--86 in src/util/ord_key2.sml.

It also uses a SAT prover such as MiniSAT (http://minisat.se/) and the SMT 
prover YICES (http://yices.csl.sri.com/) as external provers. We are using 
minisat 2.2.0 and yices 1.0.40.

Lastly, we are expecting only Unix/Linux platforms. 

* Compile

ACP is provided as a heap image (such as "acp.x86-linux") that can be loaded 
into SML/NJ runtime systems. 

To create a heap image,type

 $ make

on the top directory of the distribution (where this README exists). If successful,  
the heap image of ACP is created in the directory work/acp/.

(Alternatively, you can create the heap image like this: 
invoke an SML/NJ interpreter in the top directory as
  $ sml 
and then type
  - CM.make "src/commands/sources.cm";
  - Acp.install ();
in the SML/NJ interpreter.)

This also tries to make symbolic links to minisat and yices in the work/acp
directory. If unsuccessful, you can put them afterwords. Or, you can specify
paths for these commands in options when running ACP.

* Specifying input TRS

The input TRS is specified in a file in the (old) TPDB format. 
A sample of the TRS file is work/acp/sample.trs.
For the commutation problem, specify two TRSs as in work/acp/sample-com.trs.

* How to use

After successful compilation, go work/acp directory. Then you can run the ACP 
by typing e.g.

   $ sml @SMLload=acp.x86-linux sample.trs

To see possible options, type

   $ sml @SMLload=acp.x86-linux --help

