语言是人类思想的运行时环境。但和任何运行时一样,它会被错误的「语法」悄悄注入 bug——一段论证看起来跑得很顺,结论却是脏数据。逻辑谬误就是这类 bug:它们往往不在前提真假的层面报错,而是在从前提到结论的推导链路上失效(这类叫形式谬误与非形式谬误的交集)。本节要装的,是一套语言层的 linter:让你在听到一句话时,先于情绪反应,定位推理结构里那个不该闭合的回路。

为什么需要它?因为大脑的默认编译器为了省算力,大量使用「看起来对就放行」的启发式捷径。谬误正寄生在这些捷径上:它们利用认知带宽不足,让一段无效推理冒充有效推理通过审查。

偷换输入:篡改前提的谬误

这一类 bug 的共同点是替换了被讨论的对象,于是后续推导即便形式正确,处理的也已是另一份数据。

  • 稻草人(Straw Man):把对方观点替换成更弱、更荒谬的扭曲版本再击倒。「你主张减军费?所以你要让国家不设防、任人入侵?」反驳很机械——把被攻击的命题与原命题做 diff:「我说的是削减 5%,不是裁撤军队。」
  • 虚假两难(False Dilemma):把连续、多值的选项空间压成布尔型。「不支持这项法案,就是支持混乱。」反驳即扩展枚举:补出第三、第四个选项,证明这不是 if-else
  • 滑坡谬误(Slippery Slope):断言 A 必然触发 B、B 必然触发 C……直到灾难,却不为每一步给出转移概率,把「可能」偷换成「必然」。反驳:要求为链条上每个箭头提供独立证据——只要有一环的条件概率明显小于 1,整条乘积就坍缩。

伪造来源:信号与噪声的混淆

这一类不动前提,而是用与论证无关的信号伪装成证据。

  • 人身攻击(Ad Hominem):攻击论证者而非论证。「他自己都离过婚,凭什么谈婚姻?」——论证有效性独立于论证者的人品,这是基本的关注点分离。
  • 诉诸权威(Appeal to Authority):用「某名人说」替代「证据表明」。引用相关领域专家本身是合理的概率线索;构成谬误的是把权威当作结论的充分证明。压力测试:该权威是否在专业领域内发言?是否存在反对的同级权威?
  • 诉诸无知(Appeal to Ignorance):「没人能证明它不存在,所以它存在。」这是把举证责任非法转移给对方。逻辑上「未被证伪」$\neq$「已被证实」。

思想实验——罗素的茶壶:我宣称火星与地球之间漂浮着一只小到望远镜也看不见的瓷茶壶,你无法证明它不存在。但举证责任在主张者,而非怀疑者。诉诸无知的全部花招,都是想把这只茶壶塞进你口袋。

结构性死循环:自指与错误聚合

最隐蔽的一类,bug 藏在论证的拓扑结构里。

  • 循环论证(Begging the Question):把结论偷偷塞进前提。「圣经无误,因为它是神的话;我们知道它是神的话,因为圣经这么说。」这是没有外部锚点的死循环,A 因为 B,B 因为 A,永远不返回新信息。识别只需追问:前提里是否已预设了待证结论?
  • 合成谬误(Composition):把部分的性质非法上推到整体。「每个位置都是最佳球员,所以这是最佳球队。」——整体会涌现出部分没有的属性(配合、化学反应),加和不等于系统。
  • 分解谬误(Division):反向操作,把整体性质强加给部分。「这家公司很赚钱,所以你这个员工肯定也很赚。」
  • 相关当因果(Cum Hoc / Post Hoc):观测到 $X$ 与 $Y$ 共变就断定 $X \to Y$。但相关可能源于反向因果($Y \to X$)、共同的混杂变量 $Z$,或纯属巧合。反驳的黄金标准是对照实验:随机干预 $X$,看 $Y$ 是否随动——这正是统计学为这个千年 bug 打的补丁。

边界条件:linter 自身也会过载

警惕**「诉诸谬误」(argument from fallacy)**:一段论证含有谬误,并不意味着它的结论必然为假——它只说明「这条推导路径无效」,结论仍可能因别的理由成立。把「论证无效」直接当成「结论错误」,本身又是一次误报。同理,给一切观点贴谬误标签、用「这是稻草人」逃避实质回应,会让 linter 沦为新的诡辩工具。识别谬误是为了让讨论继续,而非终结讨论。

东西方的同一份补丁

谬误学最初是为「智者派」(Sophists)这个时代 bug 打的补丁——他们以「把弱论证说成强论证」为业;亚里士多德在《辨谬篇》中列出十三种谬误,构成西方第一份系统的谬误清单。

有趣的是,东方独立打过同一个补丁。先秦墨家在《墨经》《小取》中拆解论证(「以说出故」),并警惕「援」「推」等类比推论中的误用;古印度因明学的「似能立」「似因」分类,几乎是一份逐项对应的谬误目录。三个文明在大致同期、互不通信的条件下,识别出语言这套运行时的同一批漏洞——这强烈暗示:

逻辑谬误不是某种文化的产物,而是人类认知架构的系统性缺陷。

它们更像硬件层的 bug,无法删除,只能靠这套终身运行的 linter 持续拦截。