|
|
|
The Basics |
|
Arity |
|
Argument Types |
|
Second-Order Predicates |
|
More on Functions |
|
|
|
|
|
Sometimes we want to make statements about
predicates themselves. |
|
|
|
This requires “second-order” predicates, which can
take predicates as arguments. |
|
Examples :
#$arg1Isa, #$arity, #$isa |
|
Thus
in (#$arity #$mother 2), |
|
#$arity
takes the predicate #$mother as its first argument. |
|
|
|
Some second-order predicates are used to relate
CycL predicates to one another within a predicate hierarchy . . . |
|
|
|
|
|
#$genlPreds |
|
(#$isa #$genlPreds #$BinaryPredicate) |
|
(#$arg1Isa
#$genlPreds #$Predicate) |
|
(#$arg2Isa
#$genlPreds #$Predicate) |
|
|
|
(#$genlPreds ?NARROW-PRED ?WIDE-PRED) means that
?NARROW-PRED is a restricted version of ?WIDE-PRED |
|
|
|
Any arguments of which ?NARROW-PRED is true are
also ones of which ?WIDE-PRED
is true. |
|
|
|
Predicates related by #$genlPreds can be any
arity, as
long as they both have the same arity. |
|
|
|
|
|
|
|
|
#$genlPreds
(continued) |
|
|
|
(#$genlPreds #$biologicalMother #$biologicalParents) |
|
is (#$implies |
|
(#$biologicalMother ?X ?Y) |
|
(#$biologicalParents ?X ?Y)) |
|
|
|
|
|
(#$genlPreds #$createdBy #$startsAfterStartingOf) |
|
is (#$implies |
|
(#$createdBy
?X ?Y) |
|
(#$startsAfterStartingOf ?X
?Y)) |
|
|
|
|
|
#$genlInverse |
|
|
|
(#$genlInverse
?NARROW-PRED ?WIDE-PRED-INV)
means that |
|
?NARROW-PRED
is a restricted version of ?WIDE-PRED-INV, |
|
with argument
order reversed. |
|
|
|
|
|
|
|
|
#$genlInverse |
|
|
|
(#$genlInverse
?NARROW-PRED ?WIDE-PRED-INV)
means that |
|
?NARROW-PRED
is a restricted version of ?WIDE-PRED-INV, |
|
with argument
order reversed. |
|
|
|
How would this be expressed in a rule ? |
|
|
|
|
|
|
|
#$genlInverse |
|
|
|
(#$genlInverse
?NARROW-PRED ?WIDE-PRED-INV)
means that ?NARROW-PRED is a restricted
version of ?WIDE-PRED-INV, with argument
order reversed. |
|
|
|
How would this be expressed in a rule ? |
|
(#$implies |
|
(?NARROW-PRED ?ARG1 ?ARG2) |
|
(?WIDE-PRED-INV ?ARG2 ?ARG1)) |
|
|
|
?NARROW-PRED and ?WIDE-INV-PRED must be binary predicates. |
|
Example
: (#$genlInverse #$customers #$suppliers) |
|
|
|
|
|
#$negationPreds |
|
|
|
(#$negationPreds ?PRED ?NEG-PRED) means that |
|
|
|
if (?PRED
?ARG1 … ?ARGN) |
|
then not (?NEG-PRED ?ARG1 … ?ARGN) |
|
|
|
?PRED
and ?NEG-PRED can be of any arity, as long as |
|
they
both have the same arity. |
|
|
|
Example
: (#$negationPreds #$owns
#$rents) |
|
|
|
|
|
#$negationInverse |
|
|
|
(#$negationInverse
?PRED ?NEG-PRED-INV) means that |
|
|
|
if (?PRED ?ARG1
?ARG2) |
|
then not (?NEG-PRED-INV ?ARG2 ?ARG1) |
|
|
|
?PRED
and ?NEG-PRED-INV must be binary predicates. |
|
|
|
Example: (#$negationInverse #$subordinates #$subordinates) |
|
|
|
|
|
Second-Order predicates can be used to express
relations between predicates |
|
The four predicates discussed were: |
|
#$genlPreds |
|
#$genlInverse |
|
#$negationPreds |
|
#$negationInverse |
|
|
|