![]() | Editing the Cyc KB with the Web Interface |
![]() | Adding an Assertion |
![]() | Editing an Assertion |
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 (FI-ASSERT '( (:HP "isa" 260) (:HP "Natasha" 201285) (:HP "Doctor-Medical" 27477)) '(:HP "BaseKB" 273) ':DEFAULT ':FORWARD)) ((:HP "Natasha" 201285) "cyc-server" 19960312 (FI-TIMESTAMP-ASSERTION '(: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) #$BaseKB :DEFAULT :FORWARD)) (#$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.
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.