1.3. Running CCalc

The CCalc input file coins is essentially the action description shown at the end of Section 1.1 followed by the three queries discussed in Section 1.2. The file includes also several comments. (In CCalc, everything between % and the end of the line is a comment.) The value of the macro n is changed here from 3 to 10, as in the coin example (Section 0.3). To distinguish between the queries, we attached a numerical label to each of them. (A query without a label would be allowed in CCalc input as well; it would be considered to have label 0.)

The following sequence of steps will instruct CCalc to calculate the answer to Query 1.

1. cd to a directory where you want to keep CCalc input files and the temporary files that CCalc may create when it is run.

(The name of each of these temporary files is ccsat followed by an extension. CCalc may also create an external database of rules, which, if it exists, resides in the subdirectory rule_db.)

2. Copy the coins file into that directory.

3. Start SICStus Prolog or SWI-Prolog.

4. In response to the Prolog prompt (| ?-), load ccalc.pl with the full pathname:

| ?- ['.../ccalc/ccalc.pl'].
(Steps 3 and 4 can be combined into one using the Prolog load option:

unix% sicstus -l .../ccalc/ccalc.pl for SICStus Prolog, or
unix% pl -f .../ccalc/ccalc.pl      for SWI-Prolog.

This command will start Prolog and then load CCalc. You may find it convenient to introduce an alias for it. For instance, in case of SISCtus Prolog, put the line

alias ccalc 'sicstus -l .../ccalc/ccalc.pl'
in file .cshrc under your home directory if you are using C shell (csh), or the line
alias ccalc='sicstus -l .../ccalc/ccalc.pl'
in file .kshrc if you are using Korn shell (ksh).)

5. In response to the Prolog prompt, instruct CCalc to load the input file:

| ?- loadf coins.
(Generally, the file name after loadf needs to be enclosed in single quotes, but for simple names this is not necessary.)

6. In response to the Prolog prompt, instruct CCalc to answer the query:

| ?- query 1.
(The query command without a label tells CCalc that a query will be entered from the terminal. Accordingly, to instruct CCalc to answer the query that is specified in the input file but does not have a label, enter query 0.)

Now you are done. The lines

0:  c=5  


1:  c=6  


2:  c=7  
in the output of CCalc describe the path satisfying the given conditions: v0 is labeled c=5, e0 is labeled a=t, and so forth.

To exit Prolog, type ctrl-d.

Exercise 1.1. Perform steps 1-6. Then repeat Step 6 with other labels to get answers to Queries 2 and 3.

Exercise 1.2. Use CCalc to determine whether this transition system has a path from c=4 to c=10 of length exactly 8.

Exercise 1.3. Use CCalc to verify that this transition system has no path of length <15 from c=10 to c=4.

Exercise 1.4. Consider the following alternative interpretation of the intuitive meaning of c and a. There is one coin and 11 people around the table, numbered clockwise 0,...,10. The value of c tells us which person has the coin. To execute action a, that person passes the coin to his neighbor in the clockwise direction. (a) Modify the action description in file coins in accordance with the new interpretation of c and a. (b) Use CCalc to find the shortest path from c=10 to c=4 in the modified transition system.

Forward to Section 1.4: How CCalc Does It
Back to Section 1.2: CCalc Input: Queries
Up to the Table of Contents