April 20, 2015


Every CycL atomic sentence must begin with a predicate in order to be well-formed.

2.4.1.  Predicate Arity

Most predicates are defined to take a fixed number of arguments. There are no optional predicate arguments in CycL. However, a few predicates, such as #$different, can take a variable number of arguments. Such predicates are elements of the collection #$VariableArityRelation. In most cases, arity is automatically inferred by CYC when a relation or predicate is made an instance of a certain type of collection (e.g. #$BinaryPredicate). However, arity can also be asserted directly, via the binary predicate #$arity.

The number of arguments a predicate takes is determined by its arity. A predicate is described as unary, binary, ternary, quaternary, or quintary, according to whether it takes 1, 2, 3, 4, or 5 arguments. Only a handful of CycL predicates take 6 more arguments.

To be well-formed, an atomic sentence must have the right number of arguments for the predicate filling the ARG0 position. So,

        (#$likesAsFriend #$Colette #$AudreyHepburn #$GeorgeWBush)

is not well-formed, since the arity of #$likesAsFriend is 2, but this sentence gives 3 arguments to #$likesAsFriend.

2.4.2.  Predicate Argument Types

The type of each argument must be specified in the definition of the predicate, using the predicates #$arg1Isa, #$arg2Isa, etc. For example, suppose the predicate #$residesInDwelling is defined by the following:

        (#$isa #$residesInDwelling #$BinaryPredicate)
        (#$arg1Isa #$residesInDwelling #$Animal)
        (#$arg2Isa #$residesInDwelling #$ShelterConstruction)

To be well-formed, every sentence which has #$residesInDwelling in the ARG0 position must have a term which is an instance of #$Animal in the ARG1 position, and term which is an instance of #$ShelterConstruction in the ARG2 position. So, if Bag End is the residence of Bilbo Baggins,

        (#$residesInDwelling #$ChryslerBuilding #$BagEnd)

is probably not well-formed. Though we can never be absolutely certain just from the names, but #$ChryslerBuilding is probably not an instance of #$Animal.