правила 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)

Благодарность


person Koenig Lear    schedule 09.07.2018    source источник
comment
Базовые рассуждения обнаружат несоответствие :)   -  person Gilles-Antoine Nys    schedule 09.07.2018
comment
@ Gilles-AntoineNys Я пробовал это с Protege, и Hermit Reasoner, и Hermit не жалуется, когда я добавляю в правило противоречивые факты, есть ли какие-либо инструменты, где вы видели эту работу?   -  person Koenig Lear    schedule 09.07.2018
comment
<-> пока невозможно. Так что для выявления несоответствий в нашем случае рекомендую дополнительно к правилам указать Domain/Range. Но это только моя точка зрения.   -  person Gilles-Antoine Nys    schedule 09.07.2018


Ответы (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)
person Henriette Harmse    schedule 10.07.2018
comment
Очень интересная идея, и действительно, она охватывает ограниченные примеры, которые я предоставил, однако меня действительно интересует весь спектр, который подразумевается тогда и только тогда. Простой встречный пример — p3 человек. р4 человек. p3 дядя p4 . Никаких антецедентов, оправдывающих это, не существует. - person Koenig Lear; 10.07.2018
comment
Из-за предположения об открытом мире то, что вы хотите, не может быть достигнуто без явного указания информации - нет информации, из которой рассуждающий может сделать вывод, что p3 не является uncleOf p4. Если вы хотите, чтобы аргументатор выдал несоответствие, вы должны предоставить ему явную информацию. т.е. p3 parentOf p4. - person Henriette Harmse; 10.07.2018
comment
это не помогает в моем случае. Тем временем я использую SPARQL NOT EXISTS, но считаю, что должен быть более краткий способ добиться этого. - person Koenig Lear; 10.07.2018
comment
мои данные содержат явную информацию о BrotherOf и parentOf для каждого человека, но они не обязательно будут согласовываться с той, которая учитывает отношение uncleOf. - person Koenig Lear; 10.07.2018
comment
отношение parentOf можно легко ограничить одним человеком и, таким образом, легко проверить, присутствует ли он уже. Однако количество братьев не так просто ограничить, у кого-то может быть от 0 до неизвестного количества братьев. - person Koenig Lear; 10.07.2018