按 care 集合选择 DNF 或 CNF
比较 OR-of-AND 与 AND-of-OR 的成本,区分 dont-care、全域等价和电路门数,保留可复核的完整交付。
范式选择改变你比较的成本
DNF 是 AND 项的 OR,适合检查哪些输入组合让函数为 true;CNF 是 OR 子句的 AND,适合检查 false 集合所对应的限制。both 请求两个独立完成的 cover,不另建工具,也不先用一个形态的成本替另一个。
三变量合成小例 (A & B) | (A & C) 在 dontCare=False 时:DNF 两项四字面量,CNF (B | C) & A 两子句三字面量。CNF 的字面量更少,不能据此把它称为最少门数电路。
| 请求 | 结构 | 精确目标 |
|---|---|---|
| DNF | OR-of-AND 项 | 先最少项,再最少字面量 |
| CNF | AND-of-OR 子句 | 先最少子句,再最少字面量 |
| Both | 分别完成两种形态 | 共享输入、care 集合与整次预算 |
Dont-care 不是“输出 true”
dontCare 条件为 true 时,该行输出可以改变;它不是新函数的输出值。约束集合是 dontCare=false 的全部 care 行,完整真值表仍显示每行原函数和各输出。
把小例 dontCare 改为 ~A 后,只在 A=1 时核验:DNF B | C,CNF (B | C)。A=0 的四行是 dont-care,原来为 false 的行可以变为 true;因此这并非八行全域等价,A 也不能从原变量身份记录中消失。
空 care 与常量应明示
所有行都是 dont-care 时,确定策略返回 DNF False、CNF True,两者成本都是(0 项/子句,0 字面量)。没有 care 约束时两者都允许,原件、参数和完整表必须让读者看见这个原因。
非空目标由一个 mask-0 全域 cube 覆盖时,成本为(1 项/子句,0 字面量):DNF True 或 CNF False。报告 constant 表示最终函数值。不能用“表达式看起来短”或“找到更低成本候选”替代完成的精确搜索。
门图只表达所选 cover
逻辑门图保留每个变量的名字、bit/mask 和每个 selected cube 到项或子句的关系;所有字面量和常量都在图中。它是表达式的可审图示,不优化多级逻辑、延迟、扇出或最少门数。
实用交付顺序是先固定完整 JSON 与 care 条件,再运行并核对真值/成本,最后把所有 requested-form SVG、完整 CSV、报告、settings、表达式文本与原件一起交出。
- 保存 form、dontCare 与变量/bit/mask,不只保存图。
- 按相同范式比较项/子句数,然后比较字面量数。
- 核验全部 care 行,并保留允许改变的 dont-care 行。
- 下载完整映射与全部图;有限预览不能证明全任务。
来源和有限预算的边界
真实提问讨论 dont-care 路径产生不一致的化简,并附了 notebook。作者后来指出建议 diff 与当时 master/1.14.0 不符;保存时间线经 PR 28842 以 COMPLETED 关闭。本工具未应用那份 diff、未评估发布修复,也未执行 notebook。
本工具采用自有有界 JavaScript 路线,不运行 SymPy、Pyodide 或 Espresso。64 KiB、8 变量、10,000,000 总工作量和整次 60 秒都必须满足;超过任一预算就完整拒绝。取消后相同原件/参数可恢复,主动缩减要记录;小例只说明所示函数;更大的请求仍须满足全部上限。
参考资料
- HaydenMcT:dont-care 处理不一致
已读完整保存的提问、两条评论和附件 notebook。作者纠正了与当时 master 或 1.14.0 不符的建议 diff;保存的时间线于 2025-12-31 经 PR 28842 以 COMPLETED 关闭。本次未评估该 PR 的实现或发布修复。notebook 仅读取、未执行;本页三变量小例为合成数据。
- SymPy 逻辑文档
保存的 SOPform、POSform 和 simplify_logic 文档用于理解范式与 dont-care 条件。本工具采用独立编写、有界的 JavaScript 路线,不运行 SymPy、Pyodide 或 Espresso,不声称完整库兼容或应用了上游补丁。
本分类工具使用说明
展开工具,查看操作步骤、可调选项和支持范围,再直接进入工作区。
布尔逻辑最小化按明确 dont-care 集合精确最小化 DNF、CNF 或两者,核验全部 care 行,并保留完整真值表、变量映射、成本与逻辑门 SVG。
先明确哪些输入允许改变,再按最少项或子句、随后最少字面量完成化简。完整真值表与逻辑门图帮助你核对每个必需输入。
操作步骤
- 选择粘贴或文件模式,提供完整 JSON;在其中明确 expression、dontCare 和 form。
- 使用 ~ 或 !、&、^、| 及括号写安全布尔表达式;核对 dontCare 为 true 的输入是否确实允许改变。
- 运行后核对完成状态、全部 care 行等价、项/子句数与字面量数,以及变量到 bit/mask 的映射。
- 下载每种请求范式的 SVG、完整真值 CSV、report、settings、表达式文本和原件;复制完整表达式或完整报告。
可调选项
- 输入模式
- 粘贴完整 JSON · 选择一个 JSON 原 File
只处理当前模式的完整源,不自动采用其他来源。
能力与限制
- 明确选择粘贴或文件模式。粘贴仅处理活动文本;文件模式仅处理一个原始 File,不自动采用另一来源。输入为最多 64 KiB 的完整严格 UTF-8 JSON,表单只选输入模式,form 写在 JSON 中。可接受一个开头的 UTF-8 BOM,原件保存时仍保留其字节;原 File 文件名最多 512 UTF-8 字节且不得含控制字符或 BOM。
- JSON 使用 expression 字符串、form(dnf、cnf 或 both)和可选 dontCare 字符串;省略 dontCare 默认为 False。只支持 ASCII 变量、True/False(也接受 true/false)、~ 或 !、&、^、| 和括号;不执行代码。变量名符合 [A-Za-z_][A-Za-z0-9_]*,区分大小写。
- 最多 8 个不同变量,每个名字最多 128 ASCII 字节;expression 与 dontCare 合计最多 4,096 个 token、1,000 个 AST 节点。parser 递归和括号各最多 64 层,冗余括号也计入。
- 变量由两个表达式的并集按 ASCII 排序。第 i 个变量绑定 bit i、mask 1<<i;完整枚举最多 256 行。dontCare 为 true 的行不约束结果,但仍保留原函数、dontCare 与化简后的数值。
- 每种请求范式必须完成精确 cover:先最少项数(CNF 为子句数),同项数再最少字面量数,并重新核验全部 care 行。最多 6,561 个候选 cube、整次总计 10,000,000 工作量;未完成搜索或超预算会整件拒绝。
- 下载完整真值 CSV、全部请求表达式、report、有效 settings、逐字节原 JSON,以及每种请求范式的完整逻辑门 SVG。报告保留全部变量/bit/mask、prime 与已选 cube 映射、成本和完成状态;SVG 反映选中的 cover,不承诺最少逻辑门数。
- 完整文件加全部复制文本最多 8 MiB,typed compact JSON 另为 8 MiB,两者合计 16 MiB,二进制加完整传递元数据最多 32 MiB;内存预留预算 256 MiB。这些资源守卫不代表实测浏览器 heap,预览有限但导出不得截短。
- 整次一个 60 秒时限,从来源预检、原生 File 元数据/读取、加载与 Worker 创建,一直到完整结果校验、清理和 await 后首次发布;不重置。取消、超时或输入改变撤销旧成功,不发布部分或迟到结果,可用相同原件与参数重新尝试。