Небезопасное выражение в журнале данных - PullRequest
0 голосов
/ 05 октября 2019

Почему эта цель не считается безопасной?

MANAGER(Name) :- WORKER(Name, Age, _ ), ¬ SUBORDINATE (_, Name), Age <= 40

Наш учитель говорит, что это потому, что SUBORDINATE - это отрицание, и поэтому у него не может быть неопределенных (_) пробелов, но это, кажется, логично длямне это выражение. Кто-нибудь, кто может мне помочь?

1 Ответ

1 голос
/ 06 октября 2019

Требования безопасности в Datalog предназначены для предотвращения бесконечных результатов. Если у вас есть переменная, которая встречается в голове и только отрицается в теле, то она может быть связана с бесконечным числом значений, что, очевидно, будет проблемой.

Конкретные требования безопасности трудно точно сформулироватьПоэтому обычно вы видите, что требования упрощены до «каждая переменная должна происходить положительно». Это немного более ограничительно, чем необходимо.

Наиболее информативным ответом на этот вопрос будет то, что правило технически небезопасно, но оно не имеет бесконечного результата. Некоторые движки Datalog допускают это правило и возвращают конечный результат.

...