A first-order logic (FOL) sentence, using the "isFood" predicate:
isFood(chocolate)
Here "isFood" is a "logic function" (not a predicate):
says(Alice, isFood(chocolate))
Logicians use different symbols for predicates (P, Q, R, ...) and functions (f, g, h, ...) to avoid this problem.
"and" is and(bool, bool): bool and isFood is isFood(Object): CustomBoolean. The reasoner uses "bool" and can't tell that CustomBoolean is supposed to be the same thing.
FOL syntax disallows the situtation; this is illegal syntax:
says(Alice, isFood(chocolcate) ∧ isFood(coffee))You can say
says(Alice, myAnd(isFood(chocolcate), isFood(coffee)))but logical inference will not be performed. (You could provide axioms defining myAnd, solving the problem with another layer of indirection.)
4 of 23 |