Достаточно ли односторонней унификации для Datalog?

Datalog легко идентифицировать с подмножеством Prolog, в котором не используются функциональные символы, а только константы и переменные. Но чистый журнал данных, который не использует отрицание, имеет дополнительное ограничение (*):

  1. Каждый факт обоснован.
  2. Каждая переменная в заголовке правила также встречается в теле правила.

Можем ли мы заключить, что односторонней унификации достаточно для ответа на иерархические запросы Datalog? Или есть примеры, демонстрируемые в SWI-Prolog 8.3.19, которые имеют (=>)/2 для одностороннего

unfication, которые представляют собой чистый Datalog, но не работают с односторонней унификацией?

(*)
Что вы всегда хотели знать о журнале данных
Ceri et. др. - 1989 г.
https://www.researchgate.net/publication/3296132


person Mostowski Collapse    schedule 22.02.2021    source источник


Ответы (1)


Ответ отрицательный. Прямой перевод в одностороннюю унификацию уже не работает для простейших фактов и запросов Datalog:

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)

Даже Пикат был прослушан этой проблемой, и у него изначально была специальная обработка фактов. В недавнем выпуске версии 3 Picat даже вновь были введены оговорки Horn.

person Mostowski Collapse    schedule 23.02.2021