前言¶
DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在模型推理的開發過程中,開發者經常需要處理邏輯表達式的展開、真值表枚舉、規範形式轉換以及邏輯函數的最小化等問題。手動計算容易產生 De Morgan 定律應用錯誤或 Karnaugh 圖繪圖錯誤。dsh-boolean 是一個爲 DSH 設計的布爾代數工具箱,它解析命題邏輯表達式並提供完整的真值表、最小化積之和以及規範形式轉換,無需依賴外部運行時環境。
安裝與啓用¶
安裝此插件需要確保系統 pnpm 已在 PATH 中。在終端執行以下命令:
dsh plugin --profile web add github:TYEclipse/dsh-boolean
安裝完成後,重啓配置文件會話(或啓動一個新的會話),插件提供的五個工具將註冊爲 tools,可供 Agent 調用。
核心功能¶
該插件包含以下核心能力:
- 真值表枚舉:支持最多 8 個變量(256 行)的完整真值表,包含結果、最小項/最大項索引、是否爲永真/永假/可滿足等標誌,以及規範 DNF 和 CNF 字符串。
- 邏輯求值:在給定的賦值下評估表達式。如果變量未在
trueVars或falseVars中列出,會報錯提示,不會靜默默認。 - 等價性檢查:比較兩個表達式在所有行上的結果。若不等價,會報告差異行數並提供一個具體的反例。
- 規範轉換:將表達式轉換爲 NNF(否定規範形式)、DNF(析取範式)、CNF(合取範式)、僅 NAND 或僅 NOR 的門網絡。
- 最小化:使用 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])
注意事項¶
- 變量限制:真值表工具上限爲 8 個變量(256 行)。NNF/NAND/NOR 轉換是結構重寫,無變量限制。
- 求值要求:
logic_eval需要表達式中的每個變量都出現在trueVars或falseVars中,不能遺漏。 - 門網絡輸出語法:輸出使用函數調用語法,如
NAND(a,b)或NOR(a,b)。NOT(x)寫爲NAND(x,x)或NOR(x,x)。輸入語法不接受門名稱,需先轉換。 - 特殊結果:
logic_minimize對於全假函數返回空字符串,對於恆真函數返回1。 - 許可證:該插件遵循 MIT 許可證,源代碼可公開審查。