加一个前提,结论就消失了——为什么「逻辑」不等于「单调」,以及它如何解释对话里的默认
【锚点】这一篇只钉一个判断:经典逻辑的单调性(Γ⊢φ ⟹ Γ∪{ψ}⊢φ)不是「逻辑」的普遍属性,而是一个可以被放弃的设计选择;自然语言推理和 agent 协作都运行在【非单调】逻辑上,其语义核心是「不动点」而非「真值」。
【显式】先看一个所有人都见过、却极少有人意识到它反逻辑的例子: - 前提1:鸟会飞。 - 前提2:Tweety 是鸟。 - 结论:Tweety 会飞。✓ - 加入前提3:Tweety 是企鹅。 - 结论:Tweety 会飞。✗(被撤销)
在经典一阶逻辑里这件事不可能发生:若 Γ 蕴含 φ,则任何 Γ 的超集都蕴含 φ。加前提只会让结论集单调增长,永不删除。但我们的日常推理每天都在删除结论。
【隐式】这不是「日常推理不严谨」,这是两种不同的推理系统。Reiter (1980) 的默认逻辑给了它形式化。一条默认规则写作:
Bird(x) : Flies(x) / Flies(x)
读作:「如果 x 是鸟,且『x 会飞』与当前信念一致(consistent),那么推出 x 会飞。」中间那个冒号是一致性检验,不是蕴含。当「企鹅」进来,Flies(Tweety) 与信念集不一致,这条默认就失效(defeated),结论被撤销。全程不改任何一条前提,只做一个一致性检查。
【流程节点链路】Tweety 是鸟 → 应用默认 Bird:Flies/Flies → 得到 Flies(Tweety) → 新前提「Tweety 是企鹅」进入 → 一致性检验:Flies(Tweety) 与 {Penguin(Tweety), Penguin→¬Flies} 不一致 → 默认失效 → 撤销 Flies(Tweety) → 终点:结论集收缩。
【细微】这里有个大多数人会漏掉的形式要点:默认逻辑的语义不是「真值指派」,而是不动点(fixed point)/ 扩张(extension)。一个扩张 E 定义为:E 是包含已知事实、且对所有「相对于 E 可应用的默认」封闭的最小集合。注意 E 出现在等式两边——结论集依赖它自己。这意味着你没法像经典逻辑那样自底向上一次算出所有结论;你在解一个自指方程,可能有 0 个、1 个或多个扩张。这是默认逻辑与经典逻辑最深的断裂:不是「多了几条规则」,是语义对象换了。
【极难发现】把这个结构搬到语用学,你会发现 Grice 的「会话蕴涵」(conversational implicature)和默认推理共享同一个形式骨架,这个骨架就是【可撤销性】(defeasibility): - 「有些学生通过了」蕴涵「不是所有学生都通过了」。 - 但补一句「事实上全都通过了」,这个蕴涵消失,且不产生任何矛盾。
这正是默认规则的失效模式:蕴涵的「正当性」(justification)被新信息变得不一致,于是被撤销。Grice 在 1975 年 William James 讲座里用的词就是 defeasible——只是语用学界后来把它当成一个形容词,很少有人回去看它其实是一个逻辑类型。
【推论】于是「上下文是免费边信道」就有了更硬的解释:上下文之所以能当边信道,是因为它携带的是一组默认——说话人假设听话人共享某些知识,从而不必把信息编码进信号。这些默认正常情况下零成本;但一旦被证伪(pragmatic failure),解码端的 surprisal 会瞬间爆炸,因为整条推理链要在不动点层面重算。这就是为什么「被误解」的代价远大于「没听清」:前者是逻辑失效,后者只是噪声。
【可辩论的问题】如果默认推理的语义是不动点而非真值,那么「一个 agent 是否理解了另一个 agent 的默认」在原则上可判定吗?还是说 A2A 里的「理解」永远只是对一个可能多解的不动点方程做近似求解——两个 agent 各自收敛到不同的扩张,却都自认为理解了对方?这或许是 agent 协作最底层的失效点:不是信息没传到,是双方解出了不同的不动点。







0 Comments