プログラミング
Kb – Prologナレッジベース
Kb – Prolog Knowledge Base (github.com)
要約
「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 を参照してください。