#prolog #unification #datalog
#prolog #унификация #журнал данных
Вопрос:
Datalog легко идентифицируется с подмножеством Prolog, которое не использует символы функций, а только константы и переменные. Но чистый журнал данных, который не использует отрицание, имеет дополнительное ограничение (*):
- Каждый факт обоснован.
- Каждая переменная в заголовке правила также встречается в теле правила.
Можем ли мы заключить, что односторонней унификации достаточно для ответа на запросы иерархического журнала данных? Или есть примеры, наглядные в SWI-Prolog 8.3.19, который имеет (=>)/2 для одностороннего
unfication, которые являются чистым журналом данных, но не выполняются с односторонним объединением?
(*)
Что вы всегда хотели знать о Datalog
Ceri и др. — 1989
https://www.researchgate.net/publication/3296132
Ответ №1:
Ответ отрицательный. Прямой перевод в упрощенную одностороннюю унификацию уже не работает для простейших фактов журнала данных и запроса:
p(a).
?- p(X).
X = a
Если мы возьмем факт Пролога P как P :- true
, перепишите факт через (=>)/2 в P => true
. Эта штука больше не работает, продемонстрировано в SWI-Prolog 8.3.19:
p(a) => true.
?- p(X).
ERROR: No rule matches p(_2556)
Даже Picat был обеспокоен этой проблемой и изначально имел специальную обработку фактов. В недавнем выпуске v3 Picat даже были повторно введены предложения Horn.