DIRECT-SUBCLASS-OF is the same thing as SUBCLASS-OF with an additional constraint: there is no other class `between' child and parent class in the subclass hierarchy of the current knowledge base. In other words, if (direct-subclass-of C P) then there is no other defined class P' in
the current knowledge base that is a superclass of C and also a subclass of P.Note that this relation is indexical -- its truth depends the contents of the current knowledge base rather than the world. There certaintly might be a set of tuples in the world that is a superset of C and a subset of P, but it can't have been defined as a class in the current knowledge base if (direct-subclass-of C P) is true for that knowledge base.
The direct-subclass-of of a class is not necessarily unique.
In systems with term classifiers, direct-subclass-of relations are usually inferred, rather than asserted.
(=> (Direct-Subclass-Of ?Child-Class ?Parent-Class)
(<= (Not (Exists (?Other-Class)
(And (Not (= ?Other-Class ?Child-Class))
(Not (= ?Other-Class ?Parent-Class))
(Subclass-Of ?Child-Class ?Other-Class)
(Subclass-Of ?Other-Class ?Parent-Class))))
(Not (Provable (Not (Not (Exists (?Other-Class)
(And (Not (= ?Other-Class
?Child-Class))
(Not (= ?Other-Class
?Parent-Class))
(Subclass-Of
?Child-Class
?Other-Class)
(Subclass-Of
?Other-Class
?Parent-Class)))))))))