dsh-boolean:DSH 的布爾代數工具箱

前言

DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在模型推理的開發過程中,開發者經常需要處理邏輯表達式的展開、真值表枚舉、規範形式轉換以及邏輯函數的最小化等問題。手動計算容易產生 De Morgan 定律應用錯誤或 Karnaugh 圖繪圖錯誤。dsh-boolean 是一個爲 DSH 設計的布爾代數工具箱,它解析命題邏輯表達式並提供完整的真值表、最小化積之和以及規範形式轉換,無需依賴外部運行時環境。

安裝與啓用

安裝此插件需要確保系統 pnpm 已在 PATH 中。在終端執行以下命令:

dsh plugin --profile web add github:TYEclipse/dsh-boolean

安裝完成後,重啓配置文件會話(或啓動一個新的會話),插件提供的五個工具將註冊爲 tools,可供 Agent 調用。

核心功能

該插件包含以下核心能力:

  1. 真值表枚舉:支持最多 8 個變量(256 行)的完整真值表,包含結果、最小項/最大項索引、是否爲永真/永假/可滿足等標誌,以及規範 DNF 和 CNF 字符串。
  2. 邏輯求值:在給定的賦值下評估表達式。如果變量未在 trueVars 或 falseVars 中列出,會報錯提示,不會靜默默認。
  3. 等價性檢查:比較兩個表達式在所有行上的結果。若不等價,會報告差異行數並提供一個具體的反例。
  4. 規範轉換:將表達式轉換爲 NNF(否定規範形式)、DNF(析取範式)、CNF(合取範式)、僅 NAND 或僅 NOR 的門網絡。
  5. 最小化:使用 Quine-McCluskey 算法將表達式最小化爲最簡積之和,支持可選的“don’t-care”項。

表達式語法

插件支持以下運算符:

含義 符號 單詞 Unicode
NOT (前綴) ! not ¬
AND & and ∧
XOR ^ xor ⊕
OR \| or ∨
IMPLIES -> => implies →
IFF <-> <=> iff ↔
  • 變量必須是單字母 a–z(大寫會被標準化爲小寫)。
  • 運算優先級:NOT > AND > XOR > OR > IMPLIES > IFF。
  • 二元運算符左結合。XOR、IMPLIES 和 IFF 在解析時會轉換爲 NOT/AND/OR 的標準形式。

典型用法

以下示例展示瞭如何調用這些工具:

1. 生成真值表

查看 a ^ b 的真值表及其規範形式:

truth_table { expr: "a ^ b" }

輸出示例:

rows: m0(00)=0, m1(01)=1, m2(10)=1, m3(11)=0
minterms [1,2]  DNF = (!a & b) | (a & !b)
maxterms [0,3]  CNF = (a | b) & (!a | !b)

2. 邏輯求值

評估 a -> (b | c) 在特定賦值下的結果:

logic_eval { expr: "a -> (b | c)", trueVars: ["a"], falseVars: ["b","c"] }

輸出示例:

a -> (b | c) with a=true, b=false, c=false = false

3. 等價性檢查

驗證 De Morgan 律 !(a | b) == !a & !b:

logic_equiv { exprA: "!(a | b)", exprB: "!a & !b" }

輸出示例:

equivalent: !(a | b) == !a & !b (all 4 rows agree)

4. 規範形式轉換

將 !(a & b) 轉換爲 NNF,將 a & b 轉換爲僅 NAND 網絡形式:

logic_convert { expr: "!(a & b)", operation: "nnf" }  # 結果: !a | !b
logic_convert { expr: "a & b",   operation: "nand" }  # 結果: NAND(NAND(a,b),NAND(a,b))

5. 邏輯最小化

對 ((a & b) | (a & c)) | (b & c) 進行最小化,並使用 don’t-care 優化:

logic_minimize { expr: "((a & b) | (a & c)) | (b & c)" }
# 結果: a & b | a & c | b & c (3 terms, 6 literals, proven minimum, unique)

logic_minimize { expr: "a & !b & c | a & !b & !c", dontCare: [6, 7] }
# 結果: a (1 term, 1 literal; the prime implicant covers m[4,5] and the don't-cares dc[6,7])

注意事項

  1. 變量限制:真值表工具上限爲 8 個變量(256 行)。NNF/NAND/NOR 轉換是結構重寫,無變量限制。
  2. 求值要求:logic_eval 需要表達式中的每個變量都出現在 trueVars 或 falseVars 中,不能遺漏。
  3. 門網絡輸出語法:輸出使用函數調用語法,如 NAND(a,b) 或 NOR(a,b)。NOT(x) 寫爲 NAND(x,x) 或 NOR(x,x)。輸入語法不接受門名稱,需先轉換。
  4. 特殊結果:logic_minimize 對於全假函數返回空字符串,對於恆真函數返回 1。
  5. 許可證:該插件遵循 MIT 許可證,源代碼可公開審查。
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜