假设我有以下陈述:
A p B, A p C, B p C ( p is a symmetric property, i.e. B p A, C p A and C p B)
A v 2, B v 1, C v 1,
我想使用规则来执行以下操作:
?a p all(?b)
if ?b v 1
than ?a q 'Yes'
这意味着您可以推断(A q 'Yes'),但 B 不能,因为 B p A 和 A v 2(尽管 B p C 和 C v 1)。
[rule: (?a eg:p ?b), (?b eg:v 1) -> (?a eg:q 'Yes')]
我在耶拿使用了上述规则,但我得到了 A,B,C eg:q 'Yes',这是错误的。任何帮助将不胜感激。
更新(最初作为答案发布)
(?ap all(?b)) 的意思是我喜欢得到一个集合,这个集合中的所有?mem 都满足(?ap?mem)。并且所有成员必须满足 (?mem v 1) 才能推断 (?aq 'Yes')。
例如,
A p B 和 A p C,所以我得到一个包含 (B, C) 的集合。因为 B 和 C v 1,所以 A q '是的。
B p A 和 B p C,所以我得到一个集合(A,C),但是 A v 2,所以不能推断 B q '是'。
问题解决了
感谢约书亚泰勒。
首先,这两个规则不能同时使用。rule2应该在rule1之后使用。
而且,rule2 应该是 [rule2: (?s ?p ?o) noValue(?s, connectedToNonOne) -> (?sq 'Yes')]。