## CLAUSE-IDENTIFIER

the internal form of a goal-spec
```Major Section:  MISCELLANEOUS
```

To each goal-spec, `str`, there corresponds a clause-identifier produced by `(parse-clause-id str)`. For example,

```(parse-clause-id "[2]Subgoal *4.5.6/7.8.9'''")
```
returns `((2 4 5 6) (7 8 9) . 3)`.

The function `string-for-tilde-@-clause-id-phrase` inverts `parse-clause-id` in the sense that given a clause identifier it returns the corresponding goal-spec.

As noted in the documentation for goal-spec, each clause printed in the theorem prover's proof attempt is identified by a name. When these names are represented as strings they are called ``goal specs.'' Such strings are used to specify where in the proof attempt a given hint is to be applied. The function `parse-clause-id` converts goal-specs into clause identifiers, which are cons-trees containing natural numbers.

Examples of goal-specs and their corresponding clause identifiers are shown below.

```             parse-clause-id
-->

"Goal"                       ((0) NIL . 0)
"Subgoal 3.2.1'"             ((0) (3 2 1) . 1)
"[2]Subgoal *4.5.6/7.8.9'''" ((2 4 5 6) (7 8 9) . 3)

<--
string-for-tilde-@-clause-id-phrase
```

The caar of a clause id specifies the forcing round, the cdar specifies the goal being proved by induction, the cadr specifies the particular subgoal, and the cddr is the number of primes in that subgoal.

Internally, the system maintains clause ids, not goal-specs. The system prints clause ids in the form shown by goal-specs. When a goal-spec is used in a hint, it is parsed (before the proof attempt begins) into a clause id. During the proof attempt, the system watches for the clause id and uses the corresponding hint when the id arises. (Because of the expense of creating and garbage collecting a lot of strings, this design is more efficient than the alternative.)