![]() | Sets and Individuals in CYC® |
![]() | Mutually Disjoint Collections |
![]() | Sibling-Disjoint Collections |
Collections of collections have many uses; a common use is to constrain the domain of some predicate which applies to collections. For example,
(#$concentration #$PortionOfLemonade001 #$Sucrose (#$GramsPerMilliliter 0.1))
states that in the particular instance of lemonade, #$PortionOfLemonade001, the concentration of #$Sucrose is 0.1 g/ml. The second argument in an assertion involving #$concentration is a collection, not an individual. But clearly, not just any collection could make sense in that role. For example,
(#$concentration #$PortionOfLemonade001 #$Integer (#$GramsPerMilliliter 0.1))
is an assertion which the KB should reject as meaningless. This can be accomplished using the collection of collections #$TangibleStuffCompositionType, which has #$Sucrose as one of its many instances. The assertion
(#$arg2Isa #$concentration #$TangibleStuffCompositionType)
enforces the minimal constraint that #$concentration can only refer to kinds of tangible stuff in its second argument.
If you examine #$Sucrose, you may notice that not only is it an instance of #$TangibleStuffCompositionType, it is also a subset of #$TangibleThing. Why do we have both #$TangibleThing and #$TangibleStuffCompositionType? The answer is that not all collections which are subsets of #$TangibleThing are instances of #$TangibleStuffCompositionType. This reflects the fact that there are distinctions between things which are more "stuff-like" in some aspects and more "object-like" in others. We use type collections to express these distinctions.
For example, although #$Automobile is a subset of #$TangibleThing, (any automobile is also a tangible thing), it would be unreasonable to assert:
(#$concentration #$PortionOfLemonade001 #$Automobile (#$GramsPerMilliliter 0.1))
This is enforced because #$Automobile is not an instance of #$TangibleStuffCompositionType.
(Although one might use the English phrase, "the concentration of automobiles in the city...", the word "concentration" in that phrase is being used with a different (though analogous) meaning and would not be translated to an expression involving #$concentration.)
We'll return to the issue of constraining the arguments of predicates in the "Argument Types of Predicates" section.
Another use of collections of collections is to provide additional structure to the genls hierarchy. For example, there are many ways we could divide #$TangibleThing up into subsets (that is, "subcollections"). One way is to identify subsets which are characterized by some intrinsic material composition shared by their elements. These are subsets of #$TangibleThing, and elements of #$TangibleStuffCompositionType. Another way is to identify subsets which are characterized by some physical state of matter shared by their elements. These are subsets of #$TangibleThing, and elements of #$TangibleStuffStateType.