Правила owl swrl для проверки согласованности фактов, если и только если

Можно ли использовать правила swrl для проверки согласованности фактов?

если у нас есть:

parent(?x,?y) ∧ brother(?y,?z) ⇒ uncle(?x,?z)

новые факты получены из этого.

Но вместо этого у меня есть набор фактов (некоторые не соответствуют друг другу).

:p1 parent :c1 .
:p2 brother :p1 .

:p1 uncle :c1 .    # inconsistent
:p1 uncle :p1 .    # inconsistent
:p2 uncle :c1 .    # consistent.

Можно ли использовать swrl или альтернативную технологию для выделения этих несоответствий в моей таблице фактов?

parent(?x,?y) ∧ brother(?y,?z) <-> uncle(?x,?z)

Спасибо

1 ответ

Желаемого результата можно достичь, заявив, что uncleOf нерефлексивен и что parentOf не пересекается с uncleOf,

ObjectProperty: childOf
    Characteristics: Irreflexive

ObjectProperty: parentOf
    Characteristics: Irreflexive

ObjectProperty: brotherOf

ObjectProperty: uncleOf
    Characteristics: Irreflexive

ObjectProperty: owl:topObjectProperty

Individual: c1

Individual: p1
    Facts:  
     parentOf  c1,
     uncleOf  c1

Individual: p2
    Facts:  
     brotherOf  p1

DisjointProperties: 
    childOf,parentOf,brotherOf,uncleOf
Rule: 
    brotherOf(?x, ?y), parentOf(?y, ?z) - uncleOf(?x, ?z)
Другие вопросы по тегам