In Cyc, “relation” (see #$Relation
) is used to refer to predicates and functions. In the math and database worlds, a relation is a set of ordered n-tuples. One might talk about the relation “Father”, whose elements include (Katherine, Lloyd), (Karen, Wes), (John, Bob), and so on, where the first item in each element is a person and the second is that person’s biological father. CycL relations are also ordered n-tuples. The notation we use is different from that above and depends on whether the relation is to be represented as a CycL function or a CycL predicate. In both cases, we reify a constant to stand for the relation. In our example, we might call the constant “#$FatherFn” — an uppercase name, because the relation is a function (animals have only one biological father). We’d write, for example:
(FatherFn Katherine)
to refer to Lloyd, since Katherine and Lloyd are in the “Father” relation.
CycL predicates are the other main sort of relation-denoting constant in Cyc. Predicates are used to create declarative sentences that indicate truly or falsely that a relation obtains. For example, the relation denoted by “parents” is represented with a CycL predicate. We’d write:
(parents Katherine Lloyd) (parents Katherine Bonnie)
to produce the true sentences that say that (Katherine, Lloyd) and (Katherine, Bonnie) are in the parents relation. The arity of CycL predicates is the same as the arity of the represented relation, and the arity of CycL functions is one less than the arity of the relations they represent.