SBHL Predicates and Hierarchies

One of the main advantages of a structured ontology like that used in Cyc is the fact that knowledge can be inherited, allowing for much more efficient representation. For instance:

The above diagram illustrates this principal. Given an arbitrary instance of #$Truck, Cyc immediately knows many things about it: that it leaves tracks, that it cannot control its altitude and that it is driven by a trained, adult human. This follows, because it is known that the members of the collections above #$Truck have these properties, and all members of #$Truck are also members of each of the collections above #$Truck in the #$genls hierarchy.

The predicate #$genls is just one of a class of predicates with special code support which are used for this kind of transitive reasoning. These predicates are calle "SBHL" predicates and form the basis of most hierarchical reasoning that takes place in Cyc. "SBHL" stands for "subsumption-based heuristic layer". It can be thought of as one of the largest and most important of our HL modules. The implementation of SBHL is built around a set of graphs which act as a cache for the information stored in these predicates.

E.g., inheritance through #$genlMt will be triggered 'automatically' for a given Query Mt (the query will look in all genlMts of the query mt), and in attempting to satisfy an #$ist literal. Inheritance through #$genls will be triggered 'automatically' when querying #$genls, #$isa, and certain more complex relations built from these -- such as #$disjointWith. It will also be triggered by the canonicalizer (during asserting and querying) to enforce certain constraints on relations state which involve an 'isa' or 'genls' constraint. E.g.:

  #$arg1Isa, etc.
  #$arg1Genls, etc.
  #$resultIsa
  #$resultGenl
  #$interArgIsa1-2, etc.
  #$ist (for genlMt)

Other SBHL predicates include #$genlPreds, #$genlAttributes, and #$genlMt, as well as predicates for denoting instance relations like #$isa.

In all other cases such reasoning is not triggered 'automatically', but occurs only if the appropriate #$transitiveViaArg or #$transitiveViaArgInverse assertion is made on the predicate. For example, given the assertion:

    (sellsProductType Adidas-CommercialOrganization AthleticShoe)

Querying for

    (sellsProductType Adidas-CommercialOrganization Shoe)

returns

    Query was not proven

because the following is not asserted:

   (transitiveViaArg sellsProductType genls 2)

and there is no rule expressing this relationship.