A component has an subpart if the subpart is given by a unary function, called a subpart-slot, that is defined for that component. The value of a subpart slots on a component is a subcomponent-of the component. There may still be other subcomponents that aren't identified by a named subpart slot. Every slot that is the value of has-subpart-slot of a component must have a value for that component.
(=> (Has-Subpart-Slot $X $Y) (Subpart-Slot $Y))
(=> (Has-Subpart-Slot $X $Y) (Component $X))
(=> (Has-Subpart-Slot ?Component ?Subpart-Slot)
(And (Value-Cardinality ?Component ?Subpart-Slot 1)
(Forall (?X)
(=> (Instance-Of ?X ?Component)
(Subcomponent-Of (Value ?Subpart-Slot ?X)
?Component)))))
(<=> (Subpart-Slot-Of $Arg1 $Arg2) (Has-Subpart-Slot $Arg2 $Arg1))
(Inverse Subpart-Slot-Of Has-Subpart-Slot)