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 许可证,源代码可公开审查。
羽毛球分组比赛记分
小程序二维码

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

小夜