A relation R is a subrelation-of relation R' if, viewed as sets, R is a subset of R'. In other words, every tuple of R is also a tuple of R'. In some more words, if R holds for some arguments arg_1, arg_2, ... arg_n, then R' holds for the same arguments. Thus, a relation and its subrelation must have the same arity, which could be undefined.In CycL, subrelation-of is called #%genlSlots.
Notes:
- Do the arities of the relations have to match?
No. Used to be defined this way, but it was an unnecessary restriction. If the parent relation has a (fixed) arity, then the child's arity must be equal to it. However, the child could be of fixed arity and the parent undefined (variable) arity.
(=> (Subrelation-Of ?Child-Relation ?Parent-Relation) (=> (Defined (Arity ?Parent-Relation)) (= (Arity ?Child-Relation) (Arity ?Parent-Relation)))) (=> (Subrelation-Of ?Child-Relation ?Parent-Relation) (Forall (?Tuple) (=> (Member ?Tuple ?Child-Relation) (Member ?Tuple ?Parent-Relation))))
(<=> (Subrelation-Of ?Child-Relation ?Parent-Relation) (And (Relation ?Child-Relation) (Relation ?Parent-Relation) (Forall (?Tuple) (=> (Member ?Tuple ?Child-Relation) (Member ?Tuple ?Parent-Relation))))) (<=> (Subrelation-Of ?Child-Relation ?Parent-Relation) (=> (Holds ?Child-Relation @Arguments) (Holds ?Parent-Relation @Arguments)))
(Relation ?Parent-Relation) (Relation ?Child-Relation)
(<=> (Total-On ?Relation ?Domain-Relation) (Subrelation-Of (Exact-Domain ?Relation) ?Domain-Relation))