перевод из Datalog в SQL - PullRequest
       22

перевод из Datalog в SQL

4 голосов
/ 01 июля 2011

Я все еще думаю о том, как перевести рекурсивность программы Datalog в SQL, например

P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).

, где A/1 - предикат EDB.Это, есть взаимозависимость между P и Q.Для более длинных запросов, как решить эту проблему?

Более того, существует ли какая-либо система, полностью реализующая перевод?Если есть, могу ли я знать, на какую систему или какую бумагу я могу ссылаться?

1 Ответ

1 голос
/ 05 июля 2011

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

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

Предположим, что ваш пример относится к константам, а не к переменным:

P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).

Одна складка заключается в том, что вы хотите, чтобы A/1быть реализован как расширенная хранимая процедура или внешний код.Для этого я бы предложил табулировать все результаты вызова A по всем возможным аргументам (конечное число).В конце концов, они являются одними из выводов (доказуемых утверждений) вашей системы.

Как только это будет сделано, логический вывод в прямом направлении выполняется итеративно, а не рекурсивно.На каждом шаге рассматривайте каждое правило, применяя его с предпосылками (правыми сторонами), которые ранее получены (представлены в таблице), с выводами , если , то это дает новый вывод.Если никакое правило не дает нового заключения на текущем шаге, остановите.Процедура доказательства завершена.

В вашем примере доказательства прекращаются после того, как все A факты приведены, потому что нет никаких выводов, достаточных для применения любого из правил для получения новых выводов.

...