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))