## Argument Types of Predicates

E-Mail Comments to: opencyc-doc@cyc.com
Copyright© 1996-2002 Cycorp. All rights reserved.

| Sets and Individuals in CYC®
| Sets Defined by Internal CYC® Functions
| Exercises About Sets And Elements

Predicates are all strongly typed, and a single collection must be specified as the type for each argument of every predicate.

Examine the term #$performedBy, an instance of #$BinaryPredicate. It has the following assertions:

         (#$arg1Isa #$performedBy #$Action)
         (#$arg2Isa #$performedBy #$Agent)

These assertions specify the domain and range of #$performedBy, the collection whose instances can be its first argument and the collection whose instances can be its second argument. So we can only use #$performedBy to specify some agent which performs some action.

Because every argument of every predicate in CYC® has type constraints, the space of valid assertions is radically reduced.

Examine #$Action and #$Agent, noting the #$genls assertions for each. They each include #$Individual, not #$Collection. #$performedBy is therefore a relation between individual things. It would be incorrect to assert:

         (#$performedBy #$Walking #$Fred)

Because #$Walking is a collection which is a subset of #$Action, not an individual which is an instance of #$Action.

(Incidentally, while there are plenty of predicates which relate individuals to collections, Cyc's representation philosophy has a bias towards the relations between individual things. In the final analysis, events and objects in the world are individuals and we must first and foremost be able to describe the relations between them.)

## Questions:

What can we say about the "legal arguments" that the predicate #$performedBy expects? I.e., if we write (#$performedBy x y), what must be true about x and y, vis a vis their being individuals or collections?

Last Update: 03/28/2002