% enforce the relation between functions snf predicates p_arity('NullaryPredicate', 0). p_arity('UnaryPredicate', 1). p_arity('BinaryPredicate', 2). p_arity('TernaryPredicate', 3). p_arity('QuaternaryPredicate', 4). p_arity('QuinaryPredicate', 5). p_arity('SenaryPredicate', 6). p_arity('SeptenaryPredicate', 7). p_arity('OctaryPredicate', 8). p_arity('NonaryPredicate', 9). p_arity('DenaryPredicate', 10). f_arity('NullaryFunction', 0). f_arity('UnaryFunction', 1). f_arity('BinaryFunction', 2). f_arity('TernaryFunction', 3). f_arity('QuaternaryFunction', 4). f_arity('QuinaryFunction', 5). f_arity('SenaryFunction', 6). f_arity('SeptenaryFunction', 7). f_arity('OctaryFunction', 8). f_arity('NonaryFunction', 9). % Equivalent Types use this rule to spedifiy and enforce that they have the same instances as the other (equivalentTypes(PredType,FunctType) ==> (in(FunctorObject,PredType) <==> in(FunctorObject,FunctType))). % generate some equivalency rules ((p_arity(PredType,PA), plus(FA,1,PA), f_arity(FunctType,FA))) ==> equivalentTypes(PredType,FunctType).