前言¶
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 许可证,源代码可公开审查。