| パラダイム | 論理、宣言的 |
|---|---|
| 家族 | プロローグ |
| 初登場 | 1977年 |
| タイピングの規律 | 弱い |
| 方言 | |
| Datomic、.QL、Soufflé、XTDB など。 | |
| 影響を受けた | |
| プロローグ | |
| 影響を受けた | |
| 構文 | |
| ファイル名拡張子 |
.dl |
|---|---|
| インターネットメディアの種類 |
テキスト/vnd.datalog |
| Webサイト | データログ仕様情報 |
Datalog は宣言型 論理プログラミング言語です。構文的にはPrologのサブセットですが、Datalog は一般にトップダウンではなくボトムアップの評価モデルを使用します。この違いにより、Prologとは大きく異なる動作と特性が生まれます。Datalog は、演繹データベースのクエリ言語としてよく使用されます。Datalog は、データ統合、ネットワーク、プログラム分析など の問題に適用されてきました。
例
Datalog プログラムは、真実であるとされるステートメントである事実と、既知の事実から新しい事実を推論する方法を示すルールで構成されます。たとえば、 xerces が brooke の親であり、brooke が damocles の親であることを意味する 2 つの事実を次に示します。
親( xerces 、 brooke )。
親( brooke 、 damocles )。
大文字で始まる文字列は変数を表すため、名前は小文字で記述されます。次の 2 つのルールがあります。
祖先( X , Y ) :- 親( X , Y )。
祖先( X , Y ) :- 親( X , Z )、 祖先( Z , Y )。
記号:-は「if」と読み、コンマは「and」と読みます。したがって、これらの規則の意味は次のようになります。
- X が Y の親である場合、X は Y の祖先です。
- X が何らかの Z の親であり、Z が Y の祖先である場合、X は Y の祖先です。
プログラムの意味は、最初の事実とルールを使用して推測できるすべての事実の集合として定義されます。このプログラムの意味は、次の事実によって与えられます。
親( xerces 、 brooke )。
親( brooke 、 damocles )。
祖先( xerces 、 brooke )。
祖先( brooke 、 damocles )。
祖先( xerces 、 damocles )。
一部の Datalog 実装では、すべての可能性のある事実を推測するのではなく、クエリに回答します。
?- 祖先( xerces 、 X )。
このクエリは、「xerces の祖先である X は誰ですか?」と尋ねます。この例では、 brookeとdamoclesが返されます。
リレーショナルデータベースとの比較
Datalog の非再帰サブセットは、SQLなどのリレーショナル データベースのクエリ言語と密接に関連しています。次の表は、Datalog、リレーショナル代数、およびSQL の概念間のマッピングを示しています。
より正式には、非再帰的 Datalog は、結合クエリの和集合、つまり否定のないリレーショナル代数に正確に対応します。
構文
Datalogプログラムはルールのリスト(ホーン節)で構成されています。[1] constantとvariableがそれぞれ定数と変数の2つの可算なセットであり、 relationが述語記号の可算なセットである場合、次のBNF文法はDatalogプログラムの構造を表します。
<プログラム> ::= <ルール> <プログラム> | ""
<ルール> ::= <アトム> ":-" <アトムリスト> "."
<アトム> ::= <関係> "(" <用語リスト> ")"
<アトムリスト> ::= <アトム> | <アトム> "," <アトムリスト> | ""
<用語> ::= <定数> | <変数>
<用語リスト> ::= <用語> | <用語> "," <用語リスト> | ""
アトムはリテラルとも呼ばれます。シンボルの左側のアトムはルールのヘッド:-と呼ばれ、右側のアトムはボディと呼ばれます。すべてのDatalogプログラムは、ルールのヘッドに現れるすべての変数がボディにも現れるという条件を満たす必要があります(この条件は範囲制限と呼ばれることもあります)。[1] [2]
変数名には2つの一般的な規則があります。変数名を大文字にするか、先頭に疑問符を付けることです?。[3]
この定義では、Datalog には否定や集約が含まれていないことに注意してください。これらの構成要素の詳細については、§ 拡張を参照してください。
本体が空のルールはファクトと呼ばれます。たとえば、次のルールはファクトです。
r ( x ) :- .
事実の集合は、Datalog プログラムの拡張データベースまたはEDBと呼ばれます。Datalog プログラムを評価することによって計算されるタプルの集合は、内包データベースまたはIDBと呼ばれます。
糖衣構文
論理プログラミングの多くの実装では、上記の文法を拡張して、:-次のように なしで事実を記述できるようにします。
r ( x ) です。
次のように、括弧なしで 0 項関係を記述できるものもあります。
p :- q .
これらは単なる略語 (構文糖) であり、プログラムの意味には影響しません。
セマンティクス
Datalogプログラムのセマンティクスには、モデル理論的、固定小数点的、証明理論的の3つのアプローチが広く使用されています。これら3つのアプローチは同等であることが証明されています。[4]
アトムは、そのサブタームのいずれも変数でない場合、グラウンドと呼ばれます。直感的に、各セマンティクスは、プログラムの意味を、事実から始めて、プログラムのルールから推測できるすべてのグラウンド アトムの集合として定義します。
モデル理論的
ルールのアトム(ヘッドとボディ)がすべてグラウンドである場合、そのルールはグラウンドと呼ばれます。グラウンドルールR 1は、別のルールR 2のグラウンドインスタンスである場合、R 1は、 R 2内のすべての変数を定数に置き換えた結果です。Datalogプログラムのエルブラン基底は、プログラムに現れる定数で作成できるすべてのグラウンドアトムの集合です。Datalog プログラムのエルブランモデルは、プログラム内の各ルールの各グラウンドインスタンスについて、ルールのボディ内のアトムが集合内に存在する場合、ヘッドも集合内に存在するようなエルブラン基底の最小のサブセットです。[5]モデル理論的意味論は、最小のエルブランモデルをプログラムの意味として定義します。
固定小数点
I をプログラムPのエルブラン基底のべき集合とする。Pの即時結果演算子は、 IからIへの写像Tであり、これはプログラムの規則から単一のステップで導出できるすべての新しい基底原子を追加する。最小固定点意味論は、Tの最小固定点をプログラムの意味として定義する。これは最小エルブランモデルと一致する。[6]
固定点セマンティクスは、最小モデルを計算するためのアルゴリズムを提案します。プログラムの基本事実のセットから始めて、固定点に到達するまでルールの結果を繰り返し追加します。このアルゴリズムはナイーブ評価と呼ばれます。
証明理論的

path(x, z)プログラムから 基底原子を導出する証明木エッジ( x 、 y )。
エッジ( y 、 z )。
パス( A 、 B ) :-
エッジ( A 、 B )。
パス( A 、 C ) :-
パス( A 、 B )、
エッジ( B 、 C )。
証明理論的意味論は、Datalog プログラムの意味を、対応する証明ツリーを持つ事実の集合として定義します。直感的に言えば、証明ツリーは、事実とプログラムのルールから事実を導き出す方法を示します。
モデルの残りの部分についてはあまり気にしないかもしれませんが、特定の基底原子が Datalog プログラムの最小 Herbrand モデルに現れるかどうかを知ることに興味があるかもしれません。上記の証明ツリーをトップダウンで読み取ると、そのようなクエリの結果を計算するアルゴリズムが示唆されます。この読み取りは、Prologの評価の基礎となるSLD 解決アルゴリズムに情報を提供します。
評価
Datalog プログラムを評価する方法は多数あり、それぞれパフォーマンス特性が異なります。
ボトムアップ評価戦略
ボトムアップ評価戦略は、プログラム内の事実から開始し、何らかの目標またはクエリが確立されるまで、またはプログラムの完全な最小モデルが生成されるまで、ルールを繰り返し適用します。
素朴な評価
ナイーブ評価は、 Datalog プログラムの固定点セマンティクスを反映しています。ナイーブ評価では、プログラム内の事実に初期化される「既知の事実」のセットを使用します。プログラム内の各ルールのすべての基本インスタンスを繰り返し列挙することで、評価が進められます。基本インスタンスの本体の各アトムが既知の事実のセットに含まれている場合、ヘッド アトムが既知の事実のセットに追加されます。このプロセスは、固定点に到達し、それ以上の事実を推測できなくなるまで繰り返されます。ナイーブ評価は、プログラムの最小モデル全体を生成します。[7]
半ナイーブな評価
セミナイーブ評価は、ナイーブ評価よりも漸近的に高速化できるボトムアップ評価戦略です。[8]
パフォーマンスに関する考慮事項
.jpg/500px-Theta_supercomputer_-_389_071_002_(36954713450).jpg)
ナイーブ評価とセミナイーブ評価はどちらも、固定点に達するまで既知の事実のセットに繰り返し適用することで、再帰的な Datalog ルールを評価します。各反復では、ルールは「1 ステップ」のみ、つまり非再帰的に実行されます。前述のように、各非再帰的な Datalog ルールは、結合クエリに正確に対応しています。したがって、結合クエリを高速化するために使用されるデータベース理論の多くの手法は、Datalog のボトムアップ評価に適用できます。たとえば、
- インデックスの選択[10]
- クエリの最適化、特に結合順序[11] [12]
- 結合アルゴリズム
- 関係を格納するために使用されるデータ構造の選択。一般的な選択肢にはハッシュテーブルとBツリーが含まれますが、他の可能性としては、分離集合データ構造(同値関係を格納するため)、[13]ブリー(トライの変形)、[14] 二分決定図、[15] 、さらにはSMT式[16]などがあります。
このような技術の多くは、 Souffléなどの現代のボトムアップDatalogエンジンに実装されています。一部のDatalogエンジンはSQLデータベースを直接統合します。[17]
Datalog のボトムアップ評価も並列化に適しています。並列 Datalog エンジンは、一般的に 2 つのパラダイムに分けられます。
- 共有メモリ、マルチコア設定では、Datalog エンジンは単一のノードで実行されます。スレッド間の調整は、ロックまたはロックフリー データ構造を使用して実現できます。共有メモリ設定は、さらに、単一命令、複数データと複数命令、複数データのパラダイムに分けられます。
- グラフィックス処理装置上で実行されるデータログエンジンはSIMDパラダイムに分類されます。[18]
- OpenMP [19]を使用したデータログエンジンはMIMDパラダイムのインスタンスである。
- シェアードナッシング設定では、Datalogエンジンはノードのクラスタ上で実行されます。このようなエンジンは通常、ハッシュ関数に基づいて関係を分離したサブセットに分割し、各ノードで計算(結合)を実行し、新しく生成されたタプルをネットワーク経由で交換することによって動作します。[20]例としては、 MPI、[9] Hadoop、[21] Sparkに基づくDatalogエンジンがあります。[22]
トップダウン評価戦略
SLD 解像度は、データログ プログラムにとって健全かつ完全です。
マジックセット
トップダウン評価戦略は、クエリまたは目標から始まります。ボトムアップ評価戦略は、最小限のモデル全体を計算してクエリを照合することでクエリに答えることができますが、答えがモデル全体の小さなサブセットにのみ依存する場合は非効率的です。マジックセットアルゴリズムは、Datalogプログラムとクエリを受け取り、ボトムアップ評価を使用しながらクエリに対して同じ答えを計算する、より効率的なプログラムを生成します。[23]マジックセットアルゴリズムのバリアントは、半ナイーブ評価を使用して評価された場合、トップダウン評価と同じくらい効率的なプログラムを生成することが示されています。[24]
複雑
Datalog評価の決定問題の定式化は次のようになります。DatalogプログラムPが事実の集合(EDB)Eとルールの集合Rに分割され、基底原子Aが与えられたとき、AはPの最小モデルに含まれるでしょうか?この定式化では、Datalogプログラムを評価する計算の複雑さには3つのバリエーションがあります。[25]
- データの複雑さは、 AとEが入力で、Rが固定されている場合の決定問題の複雑さです。
- プログラムの複雑さは、 AとRが入力でEが固定されている場合の決定問題の複雑さです。
- 複合複雑度は、 A、E、およびRが入力である場合の意思決定問題の複雑度です。
データの複雑さに関しては、Datalog の決定問題はP 完全です。プログラムの複雑さに関しては、決定問題はEXPTIME 完全です。特に、Datalog プログラムの評価は常に終了します。Datalog はチューリング完全ではありません。
Datalog の一部の拡張機能では、これらの複雑度の境界が保持されません。代数データ型などの一部の Datalog エンジンに実装された拡張機能により、結果の言語がチューリング完全になることもあります。
拡張機能
Datalog には、否定、集約関数、不等式をサポートしたり、オブジェクト指向プログラミングを可能にしたり、節の先頭として選言を許可したりするなど、いくつかの拡張機能が加えられています。これらの拡張機能は、言語のセマンティクスと対応するインタープリターの実装に大きな影響を与えます。
DatalogはProlog、disjunctive Datalog、answer set programming、DatalogZ、およびconstraint logic programmingの構文サブセットです。答えセットプログラムとして評価されると、Datalogプログラムは単一の答えセットを生成し、それがまさにその最小モデルです。[26]
Datalog の多くの実装では、追加機能によって Datalog が拡張されます。詳細については、§ Datalog エンジンを参照してください。
集約
Datalogは集計関数をサポートするように拡張することができます。[27]
集計を実装する注目すべき Datalog エンジンには次のものがあります。
否定
Datalog に否定を追加するとセマンティクスが複雑になり、評価のためのまったく新しい言語と戦略が必要になります。たとえば、安定したモデルのセマンティクスに否定を追加した結果の言語は、まさに答えセットプログラミングです。
モデル理論的および固定小数点セマンティクスを維持しながら、 階層化否定を Datalog に追加できます。階層化否定を実装する注目すべき Datalog エンジンには、次のものがあります。
Prologとの比較
Prologとは異なり、Datalog プログラムのステートメントは任意の順序で記述できます。Datalog には Prolog のカット演算子がありません。これにより、Datalog は完全に宣言的な言語になります。
Prologとは対照的に、Datalog
- 述語の引数として複合項を許可しません。例えば、
p(x, y)は許可されますが、は許可されませんp(f(x), y)。 - 否定を禁止する、
- 節の先頭に現れるすべての変数が、節の本体のリテラルにも現れる必要があります。
この記事では、主に否定のない Datalog について扱います (論理プログラミングの構文と意味論 § 否定による Datalog の拡張も参照)。ただし、階層化否定は Datalog によく追加される機能です。次のリストは、 Prologと階層化否定のある Datalog を対比したものです。階層化否定のある Datalog
- また、述語の引数として複合項を使用することはできない。
- 節の先頭に現れるすべての変数は、節の本体の肯定的な(つまり否定されていない)アトムにも現れる必要がある。
- 節本体の否定リテラルに現れるすべての変数は、節本体の何らかの肯定リテラルにも現れる必要がある。[30] [信頼できない情報源? ]
表現力
Datalog は他の多くのクエリ言語を一般化します。たとえば、結合クエリと結合クエリの結合はDatalog で表現できます。Datalog は通常のパス クエリも表現できます。
順序付きデータベース、つまりアクティブドメイン上に順序関係を持つデータベースを考えると、 Immerman-Vardiの定理は、 Datalogの表現力がまさにPTIMEクラスの表現力であることを意味します。つまり、プロパティがDatalogで表現できるのは、多項式時間で計算できる場合のみです。[31]
Datalogの有界性問題は、Datalogプログラムが与えられたときに、それが有界であるかどうか、つまり、入力データベース上でプログラムを評価するときに到達する最大再帰深度が、ある定数によって制限されるかどうかを問うものです。言い換えれば、この質問は、Datalogプログラムを非再帰的なDatalogプログラムとして書き直すことができるかどうか、または同等に、連言クエリの和集合として書き直すことができるかどうかを問うものです。任意のDatalogプログラム上で有界性問題を解決することは決定不可能ですが、[32] Datalogの一部のフラグメントに制限することで決定可能にすることができます。
データログエンジン
コンパイラ、インタープリタ、ライブラリ、または組み込み DSLなど、 Datalog にヒントを得た言語を実装するシステムは、Datalog エンジンと呼ばれます。Datalog エンジンは、多くの場合、Datalog の拡張機能を実装し、追加のデータ型、外部関数インターフェイス、またはユーザー定義のラティスのサポートで拡張します。このような拡張機能により、終了しないプログラムや定義が不十分なプログラムを作成できるようになります。 [引用が必要]
以下は、Datalog をベースにしているか、Datalog インタープリターを提供しているシステムの短いリストです。
フリーソフトウェア/オープンソース
非フリーソフトウェア
- FoundationDBはpyDatalog用のデータベースバインディングを無料で提供しており、その使用方法に関するチュートリアルも提供しています。[37]
- Leapsightセマンティックデータスペース(LSD)は、高可用性、フォールトトレランス、操作のシンプルさ、スケーラビリティを備えた分散推論データベースです。LSDは、クエリと推論にLeaplog(Datalog実装)を使用しており、Leapsightによって作成されました。[38]
- LogicBlox は、Web ベースの小売計画および保険アプリケーションに使用される Datalog の商用実装です。
- Profium Sense は、Java で記述されたネイティブ RDF 準拠のグラフ データベースです。ユーザー定義ルールの Datalog 評価サポートを提供します。
- .QLは、Semmleがソースコードを解析してセキュリティの脆弱性を検出するために作成した、Datalogの商用オブジェクト指向版です。[39]
- SecPALはマイクロソフトリサーチが開発したセキュリティポリシー言語である。[40]
- Stardog は、 Javaで実装されたグラフ データベースです。RDFとすべてのOWL 2プロファイルをサポートし、データログ評価を含む広範な推論機能を提供します。
- StrixDB: 商用 RDF グラフ ストア、Lua API および Datalog 推論機能に準拠したSPARQL。httpd ( Apache HTTP Server ) モジュールまたはスタンドアロンとして使用できます(ただし、ベータ バージョンは Perl Artistic License 2.0 に基づいています)。
用途と影響
Datalog の表現力はかなり限られています。チューリング完全ではなく、整数や文字列などの基本的なデータ型は含まれていません。この簡素さは理論的な観点からは魅力的ですが、Datalog自体がプログラミング言語や知識表現言語として使用されることはほとんどないことを意味します。[41]ほとんどの Datalog エンジンは、Datalog の大幅な拡張を実装しています。ただし、Datalog はそのような実装に強い影響を与えており、多くの著者は、この記事で紹介されているように、それらを Datalog と区別しようとしません。したがって、このセクションで説明するアプリケーションには、Datalog ベースの言語の現実的な実装のアプリケーションが含まれます。
Datalogは、データ統合、情報抽出、ネットワーキング、セキュリティ、クラウドコンピューティング、機械学習などの問題に適用されています。[42] [43] Googleはビッグデータ処理用にDatalogの拡張機能を開発しました。[44]
Datalogは静的プログラム解析に応用されています。[45] Soufflé方言はJavaのポインタ解析やSchemeの制御フロー解析を書くために使われてきました。[46] [47] DatalogはSMTソルバーと統合されており、特定の静的解析の記述を容易にしています。[48] Flix方言も静的プログラム解析の記述に適しています。[49]
広く使用されているデータベースシステムの中には、Datalog用に開発されたアイデアやアルゴリズムが含まれているものがあります。たとえば、SQL:1999標準には再帰クエリが含まれており、Magic Setsアルゴリズム(当初はDatalogクエリの高速評価のために開発されました)はIBMのDB2に実装されています。[50]
歴史
Datalogの起源は論理プログラミングの始まりにまで遡りますが、1977年頃にHervé GallaireとJack Minkerが論理とデータベースに関するワークショップを開催した際に独立した分野として注目されるようになりました。[51] Datalogという用語を作ったのはDavid Maierと言われています。 [52]
参照
- 回答セットプログラミング
- 結合クエリ
- データログZ
- 分離データログ
- フリックス
- スウェル
- タプル生成依存関係(TGD) は、 Datalog に似た構文を持つリレーショナル データベースの整合性制約用の言語です。
注記
- ^ ab Ceri、Gottlob & Tanca 1989、p. 146.
- ^ Eisner, Jason; Filardo, Nathaniel W. (2011). 「Dyna: 現代の AI 向けに Datalog を拡張する」。de Moor, Oege; Gottlob, Georg; Furche, Tim; Sellers, Andrew (編)。Datalog Reloaded 。Lecture Notes in Computer Science。Vol. 6702。ベルリン、ハイデルベルク: Springer。pp. 181–220。doi :10.1007/978-3-642-24206-9_11。ISBN 978-3-642-24206-9。
- ^ Maier, David; Tekle, K. Tuncay; Kifer, Michael; Warren, David S. (2018-09-01)、「Datalog: 概念、歴史、および展望」、宣言型論理プログラミング: 理論、システム、およびアプリケーション、第 20 巻、Association for Computing Machinery および Morgan & Claypool、pp. 3–100、doi :10.1145/3191315.3191317、ISBN 978-1-970001-99-0, S2CID 69379310 , 2023-03-02取得
- ^ Van Emden, MH; Kowalski, RA (1976-10-01). 「プログラミング言語としての述語論理の意味論」Journal of the ACM . 23 (4): 733–742. doi : 10.1145/321978.321991 . ISSN 0004-5411. S2CID 11048276.
- ^ チェリ、ゴットロブ、タンカ 1989、p. 149.
- ^ チェリ、ゴットロブ、タンカ 1989、p. 150。
- ^ チェリ、ゴットロブ、タンカ 1989、p. 154.
- ^ Alvarez-Picallo, Mario; Eyers-Taylor, Alex; Peyton Jones, Michael; Ong, C.-H. Luke (2019). 「増分計算の修正: 固定点の導関数と Datalog の再帰的セマンティクス」。Caires, Luís (編)。プログラミング言語とシステム。コンピュータサイエンスの講義ノート。第 11423 巻。Cham: Springer International Publishing。pp. 525–552。doi : 10.1007 / 978-3-030-17184-1_19。ISBN 978-3-030-17184-1. S2CID 53430789。
- ^ ab Gilray, Thomas; Sahebolamri, Arash; Kumar, Sidharth; Micinski, Kristopher (2022-11-21). 「高階、データ並列構造化演繹」. arXiv : 2211.11573 [cs.PL].
- ^ Subotić, Pavle; Jordan, Herbert; Chang, Lijun; Fekete, Alan ; Scholz, Bernhard (2018-10-01). 「大規模データログ計算のための自動インデックス選択」。VLDB Endowment の議事録。12 (2): 141–153。doi : 10.14778 /3282495.3282500。ISSN 2150-8097。S2CID 53569679 。
- ^ Antoniadis, Tony; Triantafyllou, Konstantinos; Smaragdakis, Yannis (2017-06-18). 「doop の Soufflé への移植」。プログラム分析の最新技術に関する第 6 回 ACM SIGPLAN 国際ワークショップの議事録。SOAP 2017。ニューヨーク、ニューヨーク州、米国: Association for Computing Machinery。pp. 25–30。doi : 10.1145 /3088515.3088522。ISBN 978-1-4503-5072-3. S2CID 3074689。「LogicBlox エンジンは完全なクエリ最適化を実行します。」
- ^ Arch, Samuel; Hu, Xiaowen; Zhao, David; Subotić, Pavle; Scholz, Bernhard (2022). 「Soufflé の結合オプティマイザーの構築」。Villanueva, Alicia (編)。ロジックベースのプログラム合成と変換。コンピュータサイエンスの講義ノート。第 13474 巻。Cham: Springer International Publishing。pp. 83–102。doi :10.1007/ 978-3-031-16767-6_5。ISBN 978-3-031-16767-6。
- ^ Nappa, Patrick; Zhao, David; Subotic, Pavle; Scholz, Bernhard (2019)。「データログコンパイラにおける高速並列同値関係」。2019第 28 回国際並列アーキテクチャおよびコンパイル技術会議 (PACT)。pp. 82–96。doi : 10.1109 / PACT.2019.00015。ISBN 978-1-7281-3613-4. S2CID 204827819 . 2023年11月28日閲覧。
- ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2019-02-17). 「Brie: 並行データログ用の特殊トライ」。マルチコアとメニーコアのプログラミングモデルとアプリケーションに関する第 10 回国際ワークショップの議事録。米国ニューヨーク州ニューヨーク: Association for Computing Machinery。pp. 31–40。doi : 10.1145 /3303084.3309490。ISBN 978-1-4503-6290-0. S2CID 239258588。
- ^ Whaley, John; Avots, Dzintars; Carbin, Michael; Lam, Monica S. (2005). 「プログラム分析のためのバイナリ決定図によるデータログの使用」 Yi, Kwangkeun (編)。プログラミング言語とシステム。コンピュータサイエンスの講義ノート。第 3780 巻。ベルリン、ハイデルベルク: Springer。pp. 97–118。doi : 10.1007 / 11575467_8。ISBN 978-3-540-32247-4. S2CID 5223577。
- ^ Hoder, Kryštof; Bjørner, Nikolaj; de Moura, Leonardo (2011)。「μZ – 制約付き固定点の効率的なエンジン」。Gopalakrishnan, Ganesh、Qadeer, Shaz (編)。コンピュータ支援検証。コンピュータサイエンスの講義ノート。第 6806 巻。ベルリン、ハイデルベルク: Springer。pp. 457–462。doi : 10.1007 /978-3-642-22110-1_36。ISBN 978-3-642-22110-1。
- ^ Fan, Zhiwei; Zhu, Jianqiao; Zhang, Zuyu; Albarghouthi, Aws; Koutris, Paraschos; Patel, Jignesh (2018-12-10). 「インメモリデータログ処理のスケールアップ:観察とテクニック」。arXiv :1812.03975 [cs.DB]。
- ^ Shovon, Ahmedur Rahman; Dyken, Landon Richard; Green, Oded; Gilray, Thomas; Kumar, Sidharth (2022 年 11 月)。「cuDF によるデータログ アプリケーションの高速化」。2022 IEEE /ACM ワークショップ「不規則アプリケーション: アーキテクチャとアルゴリズム」(IA3)。IEEE。pp. 41–45。doi :10.1109 / IA356718.2022.00012。ISBN 978-1-6654-7506-8. S2CID 256565728。
- ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2019-02-16). 「同時データログ評価のための特殊な B ツリー」。第 24 回並列プログラミングの原理と実践に関するシンポジウムの議事録。PPoPP '19。ニューヨーク、ニューヨーク州、米国: Association for Computing Machinery。pp. 327–339。doi : 10.1145 / 3293883.3295719。ISBN 978-1-4503-6225-2. S2CID 59617209。
- ^ Wu, Jiacheng; Wang, Jin; Zaniolo, Carlo (2022-06-11). 「マルチコアマシンでの並列再帰データログ評価の最適化」。2022年国際データ管理会議の議事録。SIGMOD '22。ニューヨーク、ニューヨーク州、米国: Association for Computing Machinery。pp. 1433–1446。doi :10.1145/3514221.3517853。ISBN 978-1-4503-9249-5. S2CID 249578825。「これらのアプローチは、ハッシュなどの識別機能を使用してテーブルを分離したパーティションに分割し、各パーティションを並列ワーカーの 1 つにマップすることで、並列ボトムアップ評価の考え方を実装します。各反復の後、ワーカーは相互に調整し、必要に応じて新しく生成されたタプルを交換します。
- ^ Shaw, Marianne; Koutris, Paraschos; Howe, Bill; Suciu, Dan (2012)。「Hadoop での大規模半ナイーブ データログ評価の最適化」。Barceló, Pablo、Pichler, Reinhard (編)。学術界と産業界のデータログ。コンピュータ サイエンスの講義ノート。第 7494 巻。ベルリン、ハイデルベルク: Springer。pp. 165–176。doi : 10.1007 / 978-3-642-32925-8_17。ISBN 978-3-642-32925-8。
- ^ Shkapsky, Alexander; Yang, Mohan; Interlandi, Matteo; Chiu, Hsuan; Condie, Tyson; Zaniolo, Carlo (2016-06-14)。「Spark でのデータログ クエリによるビッグ データ分析」。2016年国際データ管理会議の議事録。SIGMOD '16。Vol. 2016。ニューヨーク、ニューヨーク、米国: Association for Computing Machinery。pp. 1135–1149。doi : 10.1145 / 2882903.2915229。ISBN 978-1-4503-3531-7. PMC 5470845 . PMID 28626296.
- ^ Balbin, I.; Port, GS; Ramamohanarao, K.; Meenakshi, K. (1991-10-01). 「階層化データベースでのクエリの効率的なボトムアップ計算」. The Journal of Logic Programming . 11 (3): 295–344. doi : 10.1016/0743-1066(91)90030-S . ISSN 0743-1066.
- ^ Ullman, JD (1989-03-29). 「データログではボトムアップがトップダウンに勝る」。第 8 回 ACM SIGACT-SIGMOD-SIGART シンポジウム「データベース システムの原理 - PODS '89」の議事録。米国ニューヨーク州: Association for Computing Machinery。pp. 140–149。doi :10.1145/ 73721.73736。ISBN 978-0-89791-308-9. S2CID 13269547。
- ^ Dantsin, Evgeny; Eiter, Thomas; Gottlob, Georg; Voronkov, Andrei (2001-09-01). 「論理プログラミングの複雑性と表現力」. ACM Computing Surveys . 33 (3): 374–425. doi :10.1145/502807.502810. ISSN 0360-0300.
- ^ Bembenek, Aaron; Greenberg, Michael; Chong, Stephen (2023-01-11). 「SMT から ASP へ: データログ合成ルール選択問題の解決に対するソルバーベースのアプローチ」ACMプログラミング 言語に関する議事録。7 (POPL): 7:185–7:217。doi : 10.1145/3571200。S2CID 253525805。
- ^ Zaniolo, Carlo; Yang, Mohan; Das, Ariyam; Shkapsky, Alexander; Condie, Tyson; Interlandi, Matteo (2017 年 9 月). 「Fixpoint セマンティクスと集約による再帰的 Datalog プログラムの最適化」.論理プログラミングの理論と実践. 17 (5–6): 1048–1065. arXiv : 1707.05681 . doi :10.1017/S1471068417000436. ISSN 1471-0684. S2CID 6272867.
- ^ 「第7章 ルール - LogicBlox 3.10 リファレンスマニュアル」。developer.logicblox.com 。2023年3月4日閲覧。
- ^ 「6.4. 否定 - LogicBlox 3.10 リファレンスマニュアル」。developer.logicblox.com 。2023年3月4日閲覧。「さらに、否定は、プラットフォームが否定を使用するすべてのルールと制約を階層化する方法を決定することができる場合にのみ許可されます。」
- ^ Michael Lam、Sin Min Lee博士。「Datalog」。コース CS 157A。サンノゼ州立大学、コンピューターサイエンス学部。2017年3月25日時点のオリジナルよりアーカイブ。
- ^ Kolaitis, Phokion G.; Vardi, Moshe Y. (1990-04-02). 「データログの表現力について: ツールとケーススタディ」。データベースシステムの原理に関する第 9 回 ACM SIGACT-SIGMOD-SIGART シンポジウムの議事録。ACM。pp. 61–71。doi : 10.1145 / 298514.298542。ISBN 978-0-89791-352-2。
{{cite book}}:|journal=無視されました (ヘルプ) - ^ Hillebrand, Gerd G; Kanellakis, Paris C; Mairson, Harry G; Vardi, Moshe Y (1995-11-01). 「データログプログラムの決定不能な境界問題」. The Journal of Logic Programming . 25 (2): 163–190. doi : 10.1016/0743-1066(95)00051-K . ISSN 0743-1066.
- ^ Saenz-Perez (2011)、「DES: 演繹データベースシステム」、電子理論計算機科学ノート、271、ES :63–78、doi : 10.1016/j.entcs.2011.02.011。
- ^ 差分データフロー、2022年7月
- ^ Kenny, Kevin B (2014 年 11 月 12 ~ 14 日)。二分決定図、リレーショナル代数、および Datalog: Tcl の演繹的推論(PDF)。第 21 回 Tcl/Tk カンファレンス。オレゴン州ポートランド。2015 年12 月 29 日閲覧。
- ^ XSB システム、バージョン 3.7.x、第 1 巻: プログラマーズ マニュアル(PDF)。
- ^ FoundationDB Datalog チュートリアル、2013-08-09 にオリジナルからアーカイブ。
- ^ 「Leapsight」。2018年11月11日時点のオリジナルよりアーカイブ。
- ^ Semmle QL、2019 年 9 月 18 日。
- ^ 「SecPAL」。Microsoft Research。2007年2月23日時点のオリジナルよりアーカイブ。
- ^ Lifschitz, Vladimir. 「論理プログラミングの基礎」。知識表現の原則3 (1996): 69-127。「[Datalog] の表現の可能性は、知識表現への有意義な応用にはあまりにも限られています。」
- ^ Huang、Green、Loo、「データログと新興アプリケーション」、SIGMOD 2011 (PDF)、カリフォルニア大学デービス校
{{citation}}: CS1 maint: multiple names: authors list (link)。 - ^ Mei, Hongyuan; Qin, Guanghui; Xu, Minjie; Eisner, Jason (2020). 「Neural Datalog Through Time: Informed Temporal Modeling via Logical Specification」ICML 2020 の議事録。arXiv : 2006.16723。
- ^ Chin, Brian; Dincklage, Daniel von; Ercegovac, Vuk; Hawkins, Peter; Miller, Mark S.; Och, Franz; Olston, Christopher; Pereira, Fernando (2015). Ball, Thomas; Bodik, Rastislav; Krishnamurthi, Shriram; Lerner, Benjamin S.; Morrisett, Greg (eds.). Yedalog: 大規模な知識の探索。プログラミング言語の進歩に関する第 1 回サミット (SNAPL 2015). Leibniz International Proceedings in Informatics (LIPIcs). Vol. 32. Dagstuhl、ドイツ: Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik. pp. 63–78. doi : 10.4230/LIPIcs.SNAPL.2015.63 . ISBN 978-3-939897-80-4。
- ^ Whaley, John; Avots, Dzintars; Carbin, Michael; Lam, Monica S. (2005). 「プログラム分析のためのバイナリ決定図によるデータログの使用」 Yi, Kwangkeun (編)。プログラミング言語とシステム。コンピュータサイエンスの講義ノート。第 3780 巻。ベルリン、ハイデルベルク: Springer。pp. 97–118。doi : 10.1007 / 11575467_8。ISBN 978-3-540-32247-4. S2CID 5223577。
- ^ Scholz, Bernhard; Jordan, Herbert; Subotić, Pavle; Westmann, Till (2016-03-17). 「Datalog での高速大規模プログラム解析について」。第 25 回国際コンパイラ構築会議の議事録。CC 2016。ニューヨーク、ニューヨーク州、米国: Association for Computing Machinery。pp. 196–206。doi : 10.1145 /2892208.2892226。ISBN 978-1-4503-4241-4. S2CID 7531543。
- ^ Antoniadis, Tony; Triantafyllou, Konstantinos; Smaragdakis, Yannis (2017-06-18). 「doop の Soufflé への移植」。プログラム分析の最新技術に関する第 6 回 ACM SIGPLAN 国際ワークショップの議事録。SOAP 2017。ニューヨーク、ニューヨーク州、米国: Association for Computing Machinery。pp. 25–30。doi : 10.1145 /3088515.3088522。ISBN 978-1-4503-5072-3. S2CID 3074689。
- ^ Bembenek, Aaron; Greenberg, Michael; Chong, Stephen (2020-11-13). 「Formulog: SMT ベースの静的解析のためのデータログ」. Proceedings of the ACM on Programming Languages . 4 (OOPSLA): 141:1–141:31. doi : 10.1145/3428209 . S2CID 226961727.
- ^ マドセン、マグナス;そう、ミンホー。ロタク、オンドジェ (2016-06-02)。 「Datalog から flix へ: 格子上の固定点の宣言型言語」。ACM SIGPLAN の通知。51 (6): 194–208。土井:10.1145/2980983.2908096。ISSN 0362-1340。
- ^ Gryz、Guo、Liu、Zuzarte ( 2004 ) 。「DB2 Universal Database でのクエリ サンプリング」(PDF) 。2004 ACM SIGMOD 国際データ管理会議の議事録 - SIGMOD '04。p. 839。doi :10.1145 / 1007568.1007664。ISBN 978-1581138597.S2CID 7775190 。
- ^ ガレール、エルヴェ、ミンカー、ジョン 'ジャック' 編 (1978)、「論理とデータベース、論理とデータベースに関するシンポジウム、トゥールーズ研究センター、1977」、データベース理論の進歩、ニューヨーク: プレナム プレス、ISBN 978-0-306-40060-5。
- ^ アビテブール、セルジュ、ハル、リチャード、ヴィアヌ、ビクター(1995)、データベースの基礎、アディソン・ウェズリー、p. 305、ISBN 9780201537710。
参考文献
- Ceri, S.; Gottlob, G.; Tanca, L. (1989 年 3 月) 。「Datalog についていつも知りたかったこと (そして聞く勇気がなかったこと)」( PDF )。IEEE Transactions on Knowledge and Data Engineering。1 ( 1): 146–166。CiteSeerX 10.1.1.210.1118。doi : 10.1109 /69.43410。ISSN 1041-4347 。
- Abiteboul, S. (1995)。データベースの基礎。Richard Hull、Victor Vianu。マサチューセッツ州レディング:Addison- Wesley。ISBN 0-201-53771-0. OCLC 30546436。
