Looking at Assertions in the Transcript

Lets look at how your operations were recorded in the transcript. Go to the bottom frame and click on "System".

Additional information is added when the operation is saved to the transcript, so let's look at the contents of the local transcript:

Click on the hyper link after Write Transcript: to display that file. The most recent operations are at the end of the file. Here's an example of the resulting operations if the cyclist was #$Natasha, the Cyc Server was "cyc-server", and the date was March 12, 1996:


     ((:HP "Natasha" 201285) "cyc-server" 19960312 
	 (:HP "isa" 260) 
	   (:HP "Natasha" 201285) 
	   (:HP "Doctor-Medical" 27477)) 
       '(:HP "BaseKB" 273) ':DEFAULT ':FORWARD))

     ((:HP "Natasha" 201285) "cyc-server" 19960312 
       '(:HP "Natasha" 201285) '19960312))

The first thing that you should notice is that the constants are referred to with expressions containing 3 items: ":HP", the constant name, and a number which is that constant's internal id. These are called "encapsulated" constants (explained below). Lets "unencapsulate" the constants and generally make the expressions more readable:


     (#$Natasha cyc-server 19960312 
       (FI-ASSERT '(#$isa #$Natasha #$Doctor-Medical)

     (#$Natasha cyc-server 19960312 
       (FI-TIMESTAMP-ASSERTION #$Natasha 19960312))

So each operation has the form:

     (<undefined> <originating-cyc-server> <date> <fi-operation>)

The first item, <undefined>, used to be the cyclist's constant, but it is not currently defined. Although it is often the cyclist's constant, it may have other values and should not be relied on. Ignore it.

<fi-operation> is a call to one of the functions of the Cyc Functional Interface, the application program interface (API) for Cyc.

The first operation is obviously the assertion that we entered. But what is the second operation which calls FI-TIMESTAMP-ASSERTION?

FI-TIMESTAMP-ASSERTION puts an explicit date and author on an assertion. Cyc assertions made via the Cyc Web Interface are always performed as a pair of operations, one to do the assertion and the other to annotate it.

Notice that FI-TIMESTAMP-ASSERTION does not refer to the assertion directly, but depends on the cyc-server to have recorded the last assertion. In the unusual case that transcripts are edited by hand, care must be taken to keep timestamping operations immediately after the operations to which they refer.


We need to encapsulate constants with a unique and unchanging id number because constants can be renamed. Suppose a Cyc Server is processing a long sequence of operations from other Cyc Servers. From Server-A comes an operation that renames #$Constant1 to #$Constant2, but close behind it comes an operation from Server-B, making an assertion involving #$Constant1. Clearly, it is better for the assertion to be made on the intended constant, despite the rename, than to get an error.

Incidentally, the ":HP" doesn't stand for "Hewlett-Packard", but for "Hash-Percent". Cyc constants used to be prefixed with "#%" instead of "#$", so at the time this convention was devised we chose ":HP" as the marker for encapsulated constant expressions.