STEP 1349MCP CONNECTOR v0.1
D-FUMT₈ operator connectors — d8_apply / d8_table (rei-aios MCP)
1. 経緯 (chat-Claude 3-turn arc)
Turn 1 — 龍樹の空 / 空の空 は コネクタになるか
藤本さん問い: 「龍樹の空も、 空の空もコネクタになりますか?」 → chat-Claude 三分割応答:
- 空 (śūnyatā) 単独 → ✕: 空は値ではなく演算子。 適用先が定まらない (「x に自性なし」 を返した瞬間 空の適用ではなく 空についての命題になる)。 中論 13:8 の警告 (「空性を見解として掴む者は救いがたい」) の 直接該当。
- 空論テキスト (中論・明句論・漢訳ゆれ) → ◎: これは完全にデータ。 SAT / CBETA / GRETIL 経由で reference-typed connector 化可能。
- 空の空 (śūnyatā-śūnyatā = SELF⟲ = Fix(R)) → ○ ただし新規には作らない: Rei 体系では すでに 計算可能な対象 (D-FUMT₈ の SELF⟲ が 8 値真理値表に載っている)。 別立てすると 同じ実体に 二つの名前 = メタコネクタで検出しようとしている不整合を 自分で作る。
Turn 2 — 演算子はコネクタにできる (D-FUMT₈ は本命)
藤本さん問い: 「演算子をコネクタには出来ますか?」 → chat-Claude: 「できます。 というより、 演算子こそコネクタの本命」。 D-FUMT₈ 演算子は 4 条件を全て満たす:
- 適用先が確定している (8 値の 有限集合)
- 結果が一意 (192 bit 真理値表で 閉じている)
- 私 (LLM) の推論では間違う (非可換・非可逆で、 暗算すると必ず取り違える)
- 検証可能 (Lean 4 側と 突き合わせられる)
chat-Claude 提案 4 tool:
d8_apply(op, a, b) → 単一演算 (単発 lookup) d8_table(op) → 真理値表全体 (全 dump) d8_fixpoints(op) → Fix(R) の 列挙 d8_verify(claim) → Lean 4 突き合わせ
「四本目が肝」 (回答が 記憶からの再生か 表からの引き当てか の区別)、 「これは記憶コネクタや benchtop より、 実装が小さくて済むはず。 真理値表は静的で、 外部依存もない。 最初の一本として一番向いているかもしれません」。
Turn 3 — d8_apply と d8_table から実装 (本 STEP)
藤本さん指示: 「d8_apply と d8_table から実装してください」 → 本 STEP 1349 で 4 tool のうち 前 2 tool を実装。 残 2 tool (d8_fixpoints + d8_verify) は 別 STEP candidate として defer。
2. 実装内容
新規 file: src/mcp/d8-connectors.ts
MCP wrapper layer (pure functions、 side effect なし、 外部依存なし)。 src/axiom-os/seven-logic.ts の not() / and() / or() / EIGHT_VALUES / SYMBOL_MAP / SYMBOL_REVERSE / EIGHT_NUMERIC を import し、 payload builder として 集約。
| export | 役割 |
|---|---|
normalizeD8Op(input) | op 文字列 → 'not' | 'and' | 'or' | null。 aliases: ¬ ∧ ∨ ! & && | || (case-insensitive、 trim 済) |
normalizeD8Value(input) | value 文字列 → EightLogicValue | null。 name (TRUE/FALSE/BOTH/NEITHER/INFINITY/ZERO/FLOWING/SELF) + symbol (⊤ ⊥ B N ∞ 〇 ○ 〜 ~ ⟲) 両受入 |
d8Apply(op, a, b) | 単発適用。 {op, arity, inputs, result, source: 'static-truth-table', honestScope} または {error, detail} を返す |
d8Table(op) | 真理値表全体 dump。 arity=1 (not) は 8 entry、 arity=2 (and/or) は 8×8=64 entry の nested map |
edit: src/mcp/rei-mcp-server.ts
- import:
d8Apply, d8Tablefrom./d8-connectors - ListTools:
d8_apply+d8_tableの 2 tool 定義追加 (返却 field 全列挙 discipline 継承、 finding #30/#31 preventive design 継承) - CallTool:
case "d8_apply"+case "d8_table"handler 追加 (thin wrapper、 error 時はisError: true) - startup banner: v2.7.0 (36ツール、 実 count 35 との drift) → v2.8.0 (37ツール、 実 count と一致)。 副次 finding として banner off-by-one drift 訂正
新規 test: test/step1349-d8-operator-connectors-test.ts
82 assertion、 12 part 構成:
- normalizeD8Op (14 assertion: alias 認識 + 未知拒否)
- normalizeD8Value (18 assertion: name/symbol 両受入 + 未知拒否)
- d8Apply NOT (5 assertion、 chat-Claude 核心 example ⟲ の不動点確認)
- d8Apply AND (6 assertion: 冪等 + ZERO 吸収 + FALSE 零元 + SELF 伝播)
- d8Apply OR (6 assertion: 冪等 + ZERO 吸収 + TRUE 零元 + SELF 伝播)
- d8Apply error paths (5 assertion: unknown-op / unknown-a / unknown-b / missing-b)
- d8Table NOT (7 assertion: arity + entryCount + source + 個別 entry)
- d8Table AND (5 assertion + 64 entry exhaustive coverage 確認)
- d8Table OR (4 assertion + 64 entry exhaustive coverage 確認)
- d8Table error (2 assertion)
- d8Apply / d8Table 整合性 invariant (144 pair chain check: 全
(op, a, b)で apply 結果 = table 引き当て) - SELF⟲ 不動点特性 (chat-Claude 明示 offer):
¬⟲ = ⟲+⟲ ∧ ⟲ = ⟲+⟲ ∨ ⟲ = ⟲を 3 test で 明示 assert
3. verify 結果
| check | 手段 | 結果 |
|---|---|---|
| unit test | npm run test:step1349 |
82 / 82 PASS |
| MCP server end-to-end | stdio subprocess smoke (initialize + tools/list + tools/call × 2) | v2.8.0 起動、 tools/list count=37、 d8_apply=true、 d8_table=true |
| d8_apply(not, SELF) 実測 | MCP tools/call | result.name=SELF, symbol=⟲, source=static-truth-table |
| d8_table(and) 実測 | MCP tools/call | arity=2, entryCount=64, source=static-truth-table, SELF∧SELF=SELF, SELF∧ZERO=ZERO, TRUE∧FALSE=FALSE |
| tsc noEmit (d8-connectors.ts) | strict mode | error 0 |
| tsc noEmit (rei-mcp-server.ts) | strict mode | conway 3rd-party pre-existing のみ、 私の追加箇所 error 0 |
source: 'static-truth-table' を含む → callers は 「モデル記憶再生ではなく table lookup」 と 機械的判定可能。 「⟲▷SELF⟲=⟲ です」 と 答えた根拠が トークン生成でなく静的テーブル引き当てである事実が、 呼び手側で 検証できる。
4. 副次 finding — banner off-by-one drift 訂正
smoke test 実行時に 「banner 36 vs tools/list 37」 の 不整合を検出。 pre-existing の banner が 実 tool 数 35 (my +2 = 37) と drift していた (2026-08-20 メモリ index も 「rei-aios MCP tools 33 → 36」 と同じ drift 記載) → banner を v2.8.0 (37ツール) に訂正。 finding #30 (rei-aios) / #31 (rei-meta) と同型の description drift。
「開通した計器が最初に映したもの」 pattern が 本 STEP でも Rei stack を 「開けた」 途端に 現れた (STEP 1334 KA wiring / STEP 1336 Rei-Automator revival に続く 3 例目)。
5. Prior art / 出典
本 STEP は 新規発明ではない。 src/axiom-os/seven-logic.ts (STEP 406 で 8 値化完了) の 静的テーブルを MCP 経由で 引き当てるための wrapper 層のみ。
- D-FUMT₈ 定義本体:
seven-logic.ts行 82-120 のEIGHT_VALUES / EIGHT_NUMERIC / SYMBOL_MAP - NOT 演算: 同 file 行 158-169 (switch 文、 SELF 不動点性は 行 148-156 コメント根拠)
- AND 演算: 同 file 行 191-205 の
AND_TABLE(8×8=64 entry) - OR 演算: 同 file 行 224-238 の
OR_TABLE(8×8=64 entry) - 四価論理 (Catuṣkoṭi): Belnap 1977 + 龍樹・中論 (śūnyatā の四句論)
- SELF⟲ 演算根拠: ゲーデル自己言及 + Fix(R) 不動点意味論。
seven-logic.ts行 148-189 のコメント参照
6. Honest scope
collapse / lift / checkDeMorgan / checkIdempotent / fromNumeric / toNumeric 等の seven-logic.ts 補助関数は scope 外。 d8_fixpoints (Fix(R) 列挙) + d8_verify (Lean 4 突き合わせ) は 別 STEP candidate として defer。
feedback_world_uniqueness_claim_controllable.md 継承): D-FUMT₈ 本体は 既存資産 (STEP 406、 2 年以上前 実装)、 本 STEP は MCP コネクタ層追加のみ。 novelty 主張なし。
seven-logic.ts の 静的テーブルのみ参照、 SEED_KERNEL 1,677 理論 / 発明 pipeline / 藤本さん承認 layer には 一切触れない。 「⟲▷SELF⟲=⟲ の 意味論的正しさ」 は 参照範囲外、 値の等価性 のみ機械保証。
7. 関連 memory + 次 candidate
継承 memory
feedback_zero_sorry_floor_not_ceiling.md— 「床」 discipline (source='static-truth-table' が 引き当て床の 機械保証)feedback_one_reproduction_over_ten_unverified.md— 順序原則 (先に seven-logic.ts 既存資産を read → 次に wrapper 実装)feedback_all_research_site_reflection_default.md— 2026-08-06 全研究 site 反映 protocol (本 site page 化)feedback_no_rush_publication.md— 急がずゆっくりと (chat-Claude offer 直後 実装 → verify → 単日 close)feedback_chat_claude_hallucination_warning.md— Pattern 全 clean streak (Turn 1-3 全 verify pass、 chat-Claude self-audit 発言も明示保存)
次 candidate (別 STEP、 藤本さん stance 待ち)
d8_fixpoints(op): Fix(R) = { v ∈ EIGHT_VALUES | op(v) = v (unary) or op(v, v) = v (binary) } の 列挙。 SELF⟲ 非冗長性の分離証明を書く時に 他 演算子の 不動点分布を 網羅的に出せると 手で数える工程が消える (chat-Claude turn 2)d8_verify(claim): Lean 4 突き合わせ (chat-Claude 曰く 「四本目が肝」)。 CollatzRei 内の D-FUMT₈ 定理 (行 148-189 の SELF 不動点 3 性質) を 静的テーブル と 突き合わせて 定理 vs 実装 一致確認- d8-connectors.ts の 5 演算 (collapse / lift / DeMorgan / idempotent / self-fixpoint) 追加 (v0.2 scope)