SBHL: Subsumption-Based Heuristic Modules

The SBHL modules are a growing collection of modules that support very fast inference involving subsumption tests with respect to particular subsumption hierarchies. Each module is associated with a particular hierarchy, and each hierarchy is defined by ground, atomic assertions in the KB having a particular transitive predicate. Four of the most commonly used modules and their associated predicates are:

SBHL Module       predicate
-----------       ---------
:genls            #$genls
:genl-mts         #$genlMt
:genl-predicates  #$genlPreds
:genl-attributes  #$genlAttributes

The SBHL modules are implemented with special datastructures and over fifty special-purpose API functions that make use of that datastructure.

Importantly, the domains of each of the SBHL predicates are disjoint. Therefore, only collections will have other collections as their superiors, inferiors, and negations; only predicates will have other predicates as their superiors, inferiors, and negations; etc. Since collections, predicates, microtheories, and attributes do not include all constants in the KB, not all constants will have entries on their SBHL slots.

The SBHL methods are described in the Cyc API, but here are some plain English descriptions of some of their capabilities:

  • Get the plural generated phrase for the OpenCyc term (intended for classes).
  • Get the singular generated phrase for the OpenCyc term (intended for individuals).
  • Get the default generated phrase for the OpenCyc term (intended for properties).
  • Get the paraphrase for the OpenCyc statement.
  • Get the comment for the OpenCyc term. Embedded quotes are replaced by spaces.
  • Get a list of the types for the OpenCyc term.
  • Get a list of the directly asserted true super classes for the OpenCyc class.
  • Get a list of the minimum (most specific) super classes for the OpenCyc class.
  • Get a list of the directly asserted true sub classes for the OpenCyc class.
  • Get a list of the least specific sub classes for the OpenCyc class.
  • Get a list of the direct super classes of the direct sub classes for the OpenCyc class.
  • Get a list of the siblings (direct sub classes of the direct super classes) for the OpenCyc class.
  • Get a list of the siblings (direct sub classes of the direct super classes) for the OpenCyc class.
  • Get a list of all of the direct and indirect super classes for the OpenCyc class.
  • Get a list of all of the direct and indirect sub classes for the OpenCyc class.
  • Get a list of all of the direct and indirect super classes for the OpenCyc term1 which are also sub classes of OpenCyc term2.
  • Get a list of all of the dependent sub classes for the OpenCyc class. Dependent sub classes are those direct and indirect sub classes of the class such that every path connecting the sub class to a super class of the class passes through the class. In a typical taxonomy it is expected that all-dependent-sub classes gives the same result as all-sub classes.
  • Get a list with the sub classified number of sample sub classes of a OpenCyc class. Attempts to return leaves that are maximally different with regard to their all-super classes.
  • Return true if OpenCyc term1 is a direct or indirect sub class of OpenCyc term2.
  • Return true if OpenCyc term1 is a direct or indirect super class of OpenCyc term2.
  • Return true if OpenCyc class1 and OpenCyc class2 are tacitly coextensional via mutual super classes of each other.
  • Return true if OpenCyc class1 and OpenCyc class2 are asserted coextensional.
  • Return true if OpenCyc class1 and OpenCyc class2 intersect with regard to all-sub classes.
  • Return true if OpenCyc class1 and OpenCyc class2 are in a hierarchy.
  • Get a list of the justifications of why OpenCyc term1 is a sub class of OpenCyc term2.
  • Get an English paraphrase of the justifications of why OpenCyc term1 is a sub class of OpenCyc term2.

getWhyGenlParaphrase("Dog", "Animal") -->

"a dog is a kind of canine"

"a canine is a kind of non-human animal"

"a non-human animal is a kind of animal"

  • Get a list of the justifications of why OpenCyc class1 and a OpenCyc class2 intersect.
  • Get an English paraphrase of the justifications of why OpenCyc class1 and a OpenCyc class2 intersect.
  • Get a list of the class leaves (most specific of the all-sub classes) for the OpenCyc class.
  • Get a list of the classes asserted to be disjoint with a OpenCyc class.
  • Return true if OpenCyc class1 and OpenCyc class2 are disjoint.
  • Get a list of the most specific classes (having no subsets) which contain a OpenCyc term term.
  • Get a list of the instances (who are individuals) of a OpenCyc class.
  • Get a list of the instance siblings of a OpenCyc term, for all classes of which it is an instance.
  • Get a list of the classes of which the OpenCyc term is directly and indirectly an instance.
  • Get a list of all the direct and indirect instances (individuals) for the OpenCyc class.
  • Return true if the OpenCyc term is a instance of OpenCyc class.
  • Get a list of the justifications of why the OpenCyc term is an instance of the OpenCyc class.
  • Get an English paraphrase of the justifications of why the OpenCyc term is an instance of OpenCyc class.

getWhyGenlParaphase("Brazil", "Country") -->

"Brazil is an independent country"

"an independent country is a kind of country"

  • Get a list of the super properties for the OpenCyc property.
  • Get a list of the domain types for the OpenCyc property.
  • Get a list of the range type for the OpenCyc property.
  • Return true if the OpenCyc property is Unique.
  • Return true if the OpenCyc property is Unambiguous.
  • Get a list of the disjoint classes for the OpenCyc class
  • Get a list of the coExtensionals for the OpenCyc class.
  • Return true if the OpenCyc term is a Class.
  • Return true if the OpenCyc term is an Individual.
  • Return true if the OpenCyc term is a Property.
  • Return true if the candidate name is a valid OpenCyc term name.