HN 日本語サマリー

← 一覧へ戻る
プログラミング

Kb – Prologナレッジベース

Kb – Prolog Knowledge Base (github.com)

80 pointsby triska9 コメント

要約

「Kb – Prolog Knowledge Base」は、ローカルファーストでハイパーリレーショナルなナレッジベースで、コンテンツアドレス型ストレージ(CAS)を特徴としています。マスター論文のプロトタイプとして開発され、Prologを主要なランタイムとして使用し、SQLiteとRaylibをFFI経由で利用します。このシステムは、知識を「statement(Subject, Predicate, Object, Properties)」として格納し、主張に対する主張(reification)も可能にする柔軟なデータモデルを持っています。

全文翻訳

kb — Prolog Knowledge Base ローカルファーストで、ハイパーリレーショナルなナレッジベースであり、コンテンツアドレス型ストレージ (CAS) を備えています。修士論文のプロトタイプとして構築されました。 それは何か ハイパーリレーショナルグラフ: 知識は statement(Subject, Predicate, Object, Properties) として保存されます。Subject と Object はそれ自体がステートメント (reification) になり得るので、主張に対する主張を可能にします。 コンテンツアドレス型ストレージ: ファイルはステージングされ、SHA-256でハッシュ化され、グラフメタデータと共にアトミックにコミットされます。重複排除は自動的に行われます。 タイムトラベル: 更新は replaces_id を介してリンクされた新しいステートメントバージョンを作成します。pl history はバージョンチェーンをたどります。 Prologファースト: Trealla Prolog が主要なランタイムです。SQLite と Raylib は FFI を介してロードされる C 共有ライブラリを介してアクセスされます。 インタラクティブGUI: 画像プレビュー、クエリバー、ノード検索を備えたRaylibベースのグラフビューア。 ビルド 依存関係: Clang、X11 (Linux) または Xcode CLT (macOS)。Trealla Prolog、Raylib、raygui、SQLite はサブモジュールとして含まれています。 ```bash git clone --recurse-submodules <repo-url> cd kb make ``` これにより、プロジェクトルートに libcas.so、libgui.so、libsqlite3.so が構築されます。Raylib は make 時にソースからコンパイルされます。 Trealla をソースからビルドするには: ```bash cd vendor/trealla && make ``` 次に、tpl が $PATH にあることを確認してください。 使用法 ```bash # コンテキストをメモリにロードしてREPLを開く tpl -l main.pl -- pl load concept(mathematics) # 新しいステートメントをアサートする tpl -l main.pl -- pl assert \ "statement(concept(mathematics), foundation_of, concept(logic), [])" # 全文検索 tpl -l main.pl -- pl search mathematics # 項目のバージョン履歴を表示する tpl -l main.pl -- pl history concept(mathematics) # ファイルをCASに取り込む tpl -l main.pl -- cas add document.pdf # CASオブジェクトをリストする tpl -l main.pl -- cas list # GUIを起動する tpl -l main.pl -- gui # データベースの整合性をチェックする tpl -l main.pl -- pl verify # ガベージコレクションを実行する tpl -l main.pl -- pl gc ``` アーキテクチャ main.pl CLIルーターとREPL prolog/ sync.pl 2相コミット: Prolog用語 ↔ SQLite のマーシャリング cas.pl libcas.soへのFFIバインディング db.pl SQLiteクエリ gui.pl Raylibフロントエンド (yield-loopパターン) ontology.pl インメモリナレッジグラフ src/ cas.c / cas.h CAS: ステージ、SHA-256ハッシュ、アトミックコミット、検証 gui.c / gui.h Raylibレンダラーと入力ハンドラー graph.c / graph.h グラフレイアウト util.c / util.h SHA-256、MD5 sql/ schema.sql SQLiteスキーマ (WALモード、FTS5、reification) vendor/ Trealla、Raylib、raygui、SQLite (サブモジュール) データモデル すべての知識は statement/4 項です: ```prolog statement(Subject, Predicate, Object, Properties) ``` Subject と Object はProlog項または他のステートメントテーブルの行を指す整数IDであり、任意のネストを可能にします。SQLiteスキーマは、ANY型カラムとバージョン管理のためのreplaces_id外部キーでこれを反映しています。 例: ```prolog % アリスは(確信度0.9で)ボブがピザを好きだと主張する statement( person(alice), claims, statement(person(bob), likes, food(pizza), []), [certainty(0.9)] ) ``` コンテキストのロードは、シード項から到達可能なサブグラフのみをPrologのインメモリワーキングセットにプルするために、双方向再帰CTEを使用します。 Nix 再現可能なビルドのために、kb.nixシェルが提供されています: ```bash nix-shell kb.nix ``` ライセンス GPL-3.0 — LICENSE.md を参照してください。