Datalog プログラムの再帰性を次のような SQL に変換する方法をまだ考えています。
P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).
はA/1
EDB 述語です。これは、 と の間に共依存関係がP
ありQ
ます。より長いクエリの場合、この問題を解決するにはどうすればよいですか?
また、翻訳を完全に実装するシステムはありますか? ある場合、どのシステムまたはどの論文を参照すればよいか教えていただけますか?
Datalog プログラムの再帰性を次のような SQL に変換する方法をまだ考えています。
P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).
はA/1
EDB 述語です。これは、 と の間に共依存関係がP
ありQ
ます。より長いクエリの場合、この問題を解決するにはどうすればよいですか?
また、翻訳を完全に実装するシステムはありますか? ある場合、どのシステムまたはどの論文を参照すればよいか教えていただけますか?
以前の結論を「表にする」アプローチと、これらにフォワードチェーン推論を採用して新しい結論を推測する場合、再帰的な「深さ」は必要ありません。
Datalogには、有限の終了、したがって有限の多くの結論を保証するルールと変数に対するいくつかの制限が必要であることに注意してください。たとえば、変数には有限の範囲の可能な値が必要です。
あなたの例が変数ではなく定数を参照していると仮定しましょう:
P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).
1つの問題はA/1
、拡張ストアドプロシージャまたは外部コードとして実装する必要があることです。A
そのために、私はすべての可能な議論(限りなく多く)を呼び出すことのすべての結果を表にすることを提案します。これらは、結局のところ、システムの結論(証明可能なステートメント)の1つです。
それが行われると、前向き連鎖推論は再帰的ではなく反復的に進行します。各ステップで各ルールを検討し、新しい結論が得られた場合は、以前に取得された(表にされた)結論である前提(右側)を適用します。現在のステップで新しい結論を生成するルールがない場合は、停止します。証明手順が完了しました。
A
あなたの例では、新しい結論を得るためにどちらのルールも適用するのに十分な結論がないため、すべての事実が提示された後に証明が停止します。