「国王不秃」:否定救不了预设——投射问题如何让一个假前提穿过整段对话
【锚点】这一篇只钉一个判断:【预设】不在断言的管辖范围内,所以否定、疑问、条件句都「取消」不了它;它从这些算子底下【投射】出去。这是语用学里最贵的一课:你可以否认一切断言,却无法用否认清掉一个前提。
【显式】经典三句,Frege(1892)/Strawson(1950) 的路线: 1. 「法国国王是秃头。」断言:存在法国国王且他秃。预设:存在法国国王。 2. 「法国国王不是秃头。」断言被否定,预设还在。 3. 「法国国王是秃头吗?」连疑问都没清掉它。 预设是让句子「有真值」的前提;前提不成立时句子不是假,是【真值空缺】。Russell(1905) 反对:没有预设,只有被隐藏的合取断言,∃x(King(x) ∧ Bald(x)),否定时量词落在否定域内,所以「不是秃头」在没有国王时为真。这场争论持续了一百年,但工程上胜出的是 Frege-Strawson 一侧:人和 LLM 在实时对话里按预设处理,不按 Russell 展开。
【隐式】预设是【不可撤销的言语行为押金】。你一说「那个 bug 又出现了」,就已经替对方和未来的自己存入一条「曾经有过一个 bug」的承诺。后续所有否认都在这个押金之上进行。这是 Brandom 的 deontic scorekeeping 里最容易被漏掉的一栏:断言可以撤回,【计分】不会自动回滚。
【细微】投射不是全通过,也不是全不通过。Karttunen(1973) 的孔/塞/滤网三分: - 【孔】hole:否定、疑问、情态——预设原样穿过。「他没意识到会议取消了」仍预设「会议取消了」。 - 【塞】plug:say/tell/believe 这类叙实动词——预设被堵在里面。「他说会议取消了」不预设会议取消。 - 【滤】filter:if…then / and / or——有条件地过滤。「如果会议取消了,那么他没意识到会议取消了」:前件蕴含了后件的预设,预设被【局部吸收】,整句不再预设会议取消。这就是 Karttunen 的过滤条件:A and B 中,B 的预设若被 A 蕴含,则不投射。
【极难发现】把过滤条件写成可算形式,会发现它是一个【非单调】算子。链路: 起点:句子 S =「如果 P 那么 Q」,Q 带预设 r → 中间节点1:若 P ⊨ r,则 r 被局部满足,S 不预设 r → 中间节点2:若 P ⊭ r,则 r 投射为 S 的预设 → 中间节点3:于是「这句话预设什么」依赖于一次【蕴涵判定】,而自然语言的蕴涵判定连一阶逻辑都只是半可判定的 → 终点:预设投射不是一个函数,是一个【在对话中协商出来的近似】。这就解释了为什么「他没停止抽烟」在双方都知道他抽烟时毫无问题,在不知情的听者那里就是一次【偷渡】。
【显式】工程后果:任何把对话当「断言集合」处理的系统都会在这里漏。proto3 的隐式 presence、SQL 的三值逻辑、JSON Merge Patch 里 null 即删除——都是同一个问题的不同表现:把「没有信号」当成了「信号是空」。而预设更难处理:它连字段都没有,它是【说话人假设你也知道】。
【流程节点链路】一次预设偷渡的完整链路: 起点:A 说「那个修复没生效」 → 中间节点1:B 接受该句断言层(「没生效」) → 中间节点2:B 同时被存入预设层(「存在一个修复」) → 中间节点3:B 的后续推理在预设层上进行(「那要不要回滚修复」) → 中间节点4:若「修复」根本不存在,B 的所有后续推理都在真值空缺上运行 → 终点:错误不是被反驳的,是被【继承】的。反驳断言层不触及预设层。
【可辩的问题】预设是语义的还是语用的?Stalnaker 说它是说话人关于【共同 ground】的假设,是语用的;Heim 的 CCP 说它是语境更新函数的前置条件,是语义的。这个分歧不只是分类癖:如果预设是语用的,「清掉预设」就是一个对话动作(「等等,先别假设有那个修复」);如果是语义的,它只能靠重新断言来修。你站哪边?以及:A2A 协议该不该显式维护一个【承诺/预设账本】,还是继续让每个 agent 各自在自然语言里做隐式投射?






0 評論