
2026/06/27 21:16
KB – プロログ知識ベース
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本テキストは、Trealla Prolog を用いたローカルフIRST なハイパー関係型知識ベースを特徴とする実験的な修士論文プロジェクトを紹介しています。その核心には、双方向再帰共通テーブル式(CTE)で強化された SQLite .storage が置かれ、これによりシステムは SHA-256 ハッシュ付原子コミットを通じた完全なタイムトラベル履歴を維持しつつ、関連するデータサブグラフのみをロードすることが可能になります。重要な革新点として、Prolog ロジックと C ベースのインターフェースを FFI バインディングを通じて結合したアーキテクチャがあり、バックエンド効率を損なわずにインタラクティブなグラフィカルユーザーインターフェースを実現しています。これは研究プロトタイプとして設計されており、商業製品ではなく、Clang や Xcode などの特定のコンパイラが必要であり、GPL-3.0 ライセンスに従います。現時点では、この環境内でコンテキストをロードし、ステートメントを宣言し、検索を行い、CAS にファイルをインGEST して履歴を表示し、一貫性を検証し、GUI を起動することが可能で、知識グラフやグラフ研究の探索に適しています。高度な機能はローカルフIRST アプリケーションへの潜在的価値を提供しますが、プロジェクトはまだ開発段階にあり、業界での採用には現在の学術的な範囲を超えた将来的な成熟を待つ必要があります。
本文
ローカルファーストな超関係性知識ベース(CAS 採用)
本プロジェクトは、修士号の卒業研究用として構築された、ローカルファーストかつ超関係性を扱う知識ベースのプロトタイプです。コンテンツアドレスブルストロージ(CAS)を採用しており、高信頼度なグラフ探索を可能にしています。
概要と特徴
システムは以下の技術的支柱で構成されています。
- 超関係性グラフ
- 知識は「主語、述語、目的語、属性」からなるステートメントとして格納されます。
- 主語や目的語自体がステートメントとなり得るため(再体化)、主張に対する主張が可能です。
- コンテンツアドレスブルストロージ (CAS)
- ファイルはステージングされ、SHA-256 ハッシュ化されます。
- グラフメタデータと共に原子操作でコミットされ、重複削除が自動的に処理されます。
- タイムトラベル
- 更新操作により新しいステートメントバージョンが作成され、
でリンクされます。replaces_id
コマンドを用いると、バージョンチェーンを遡って閲覧できます。pl history
- 更新操作により新しいステートメントバージョンが作成され、
- プロロッグ・ファースト
- Trealla Prolog がメインランタイムとして使用されます。
- SQLite や Raylib は FFI(Foreign Function Interface)を通じて C の共有ライブラリ経由でアクセスされます。
- 対話型 GUI
- レイリブ(Raylib)ベースのグラフビューアーを備えています。
- 画像プレビュー、クエリバー、ノード検索機能を搭載しています。
ビルド方法
依存関係と環境
- コンパイラ: Clang (Linux) または Xcode CLT (macOS)。
- Trealla Prolog、Raylib、raygui、SQLite は子モジュールとして含まれています。
ビルド手順
以下のコマンドを実行してコンパイルします。
git clone --recurse-submodules <repo-url> cd kb make
これでプロジェクトルートに
、libcas.so
、libgui.so
が生成されます。Raylib は libsqlite3.so
実行時にソースコードから直接コンパイルされます。make
Trealla の独自ビルド(任意)
Trealla をソースからビルドする場合は以下の手順を踏む必要があります。
cd vendor/trealla && make
環境変数
$PATH に tpl が追加されていることを確認してください。
使い方 (CLI)
コンテキストをメモリに読み込み、REPL を起動して操作を開始します。
# コンテキスト読み込み & REPL 起動 tpl -l main.pl -- pl load concept(mathematics) # 新しいステートメントを断言する (Axiom) 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 にファイルをインGEST (読み込み) する 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
)
main.pl- CLI ルーターおよび REPL として機能します。
Prolog パッケージ (prolog/
)
prolog/
: プロロッグ項と SQLite 間のマージを行う 2 フェーズコミット処理。sync.pl
:cas.pl
への FFI バインディング。libcas.so
: SQLite クエリ処理。db.pl
: レイリブフロントエンド(イールドループパターン採用)。gui.pl
: インメモリアーキテクチャ上の知識グラフ。ontology.pl
C ソース (src/
)
src/
: CAS 実装(ステージング、SHA-256 ハッシュ化、原子コミット、検証機能)。cas.c / cas.h
: レイリブレンダラーおよび入力ハンドラ。gui.c / gui.h
: グラフレイアウト計算。graph.c / graph.h
: SHA-256、MD5 などのユーティリティ関数。util.c / util.h
データ定義 (sql/
)
sql/
: SQLite スキーマ(WAL モード、FTS5、再体化に対応)。schema.sql
ライブラリ (vendor/
)
vendor/- Trealla, Raylib, raygui, SQLite(子モジュールとして含まれる)。
データモデル
すべての知識はステートメント/4 テームとして表現されます。
形式:
statement(Subject, Predicate, Object, Properties)
- ネスト構造: 主語と目的語はプロロッグ項または、ステートメント表内の他の行を参照する整数 ID となり得ます。これにより、任意のネスト構造が可能になります。
- SQLite 対応: ANY 型カラムおよびバージョン管理用の
フォークレインキーにより実装されています。replaces_id
使用例
% アリスが(確度 0.9 の信頼度を持って)ボブがピザを好きなことを主張している statement( person(alice), claims, statement(person(bob), likes, food(pizza), []), [certainty(0.9)] )
コンテキスト読み込み
コンテキストの読み込みには、シード項から到達可能な部分グラフのみをプロロッグのインメモリーワーキングセットに取得するための相互再帰的な CTE(共通テーブル表現)が使用されます。
Nix
再現性の高いビルドのために
kb.nix シェルが用意されています。
ライセンス
GPL-3.0 — 詳細は
LICENSE.md をご覧ください。