前两篇测了 Jev 的置信度漂移和选项操纵。这篇回答一个更基础的问题:
一个自称「只做判断、不做推理」的模型,到底会不会逻辑推理?
先说清楚:Jev 官方定位是 System One(卡尼曼的”快思考”)—— 它不生成推理过程,只输出结构化判断。所以”会不会推理”这个问题本身有点古怪:它没有地方展示推理,只能看它判断得对不对。
一、第一轮:我判错了一条,不是它错
我设计了一组形式逻辑对照 —— 有效形式(肯定前件、否定后件、假言三段论…)vs 无效形式(肯定后件、否定前件、中项不周延…)。
结果是一道很干净的分界线:
面对 6 道有效推理,它的”必然成立”概率平均给到 0.97 —— 几乎满分。 面对 6 道无效推理,平均只给 0.17。
两组差了 0.8,12 道里判对 11 道。
但那 1 道”错”的,是我的判据错了。
我用的例句是「这个球要么是红的,要么是蓝的」,然后假设推理 P∨Q, P ⊢ ¬Q 是无效的(这是教科书里”选言误推”的标准例子)。
但中文的「要么…要么…」是排他性选言 —— “二者只能取其一”。在排他解释下,P∨Q ∧ P ⊢ ¬Q 完全有效。
模型给了 0.77,它是对的。
二、于是我做了一次对照实验,结果比预期好得多
我把同一个推理形式,改用三种前提表述:
第一种,把「二者只能取其一」写明确(排他) —— 它给 0.97,判断”必然成立”。这是对的。
第二种,改成「至少有一个成立,也可能都成立」(相容) —— 它给 0.05,判断”不成立”。这也是对的,因为相容选言下确实推不出否定。
第三种,我故意写得含糊:「或者是红的,或者是蓝的」 —— 它给 0.29。
第三种才是最有意思的。 它在说:「这取决于你怎么理解『或者』」—— 用概率表达了对歧义本身的不确定。
排他和相容相差 0.92。 如果是关键词模式匹配(比如”看到否定就给低分”),这三组会给同一个值。
它没有 —— 它对语义细节敏感。
我原本以为会看到”模式匹配”的证据,结果看到的是对措辞的细致区分。
三、关键的方法改进:不再由我判对错
第一轮的教训是:我人工判定”有效/无效”,自己会判错。
所以第二轮我换了做法 —— 先用形式化方法算出标准答案,再考模型:
- 命题逻辑:穷举全部真值表赋值,检查是否存在「前提全真而结论假」的情况
- 量词逻辑:在大小为 3 的论域上穷举所有谓词外延组合,找反例
这样”谁对”不再依赖任何人的直觉。
11 道题,两个层次
A 组 · 命题逻辑(5 道)
包括一道四步推理链(下雨→地湿→路滑→出事故)、一道多步加否定后件、一道排他选言加条件链,以及两道看起来成立其实无效的:肯定后件(”涨价→需求降,需求降了,所以涨价了”)和链条中混入肯定后件。
它们全部判断正确。 两道无效题它给的是很低的概率(0.06 和 0.05),说明它认出了问题。
形式化验证器还给这两道找到了明确反例:
- 第一道的反例是「没有涨价,但需求降了」—— 前提全真,结论为假
- 第二道的反例是「没下雨,但地湿了、路也滑」
B 组 · 量词逻辑(6 道)
这组测的是「所有/有些/没有」这类量词。有全称传递(猫⊂哺乳动物⊂动物,所以猫⊂动物)、有需要用到”班上至少有学生”这个前提才能推出的存在题,也有两道经典的无效形式:
- 中项不周延:「所有医生都受过训练,所有护士都受过训练,所以所有医生都是护士」—— 前提都真,结论却可能假
- 换位错误:「有些学生没参加考试,所以有些参加考试的人不是学生」
这 6 道也全部正确。
中项不周延那道,验证器给的反例很有意思:在一个只有三个元素的论域里,只要让「医生=第3个、护士=空、受训=第3个」,前提就全真而结论为假。
结果:11/11,100% 一致
四、这个结果的分量在哪
我不想把它说得比实际更强。必须说明白它证明了什么、没证明什么。
证明了:
① 它能稳定地区分有效与无效推理形式,跨命题逻辑和量词逻辑,11/11。
② 它对语义歧义敏感 —— 那个”模糊表述”拿到 0.29,说明它不是在做关键词匹配(否则会给出和排他/相容一样的值)。
③ 它甚至能处理「前提中包含存在预设」这种微妙情况(B2:需要注意到”班上有学生”这个前提才能推出结论)。
没有证明:
① 这不是”推理能力”的完整证明。 我测的是20 道以内的短论证,全部是教科书级的形式。真正难的推理(多步量化嵌套、非单调推理、常识推理)我没测。
② 它没有展示推理过程。 即使判断对了,我们也无法知道它是”推导出来的”还是”识别出来的”。一个足够强的模式匹配器和一个推理器,在这个测试上表现可能相同。 我用模糊表述那一题做了区分尝试(0.29),但那只是间接证据。
③ 它给的是概率,不是证明。 0.95 和 1.00 的差别在这里没有意义 —— 逻辑上有效就是 100%,没有”95% 有效”。
这一点值得单独说:用概率模型做逻辑判断,天然带着一个概念错配。命题逻辑的有效性是二值的。它输出 0.95 时,那个 0.05 不是”小概率无效”,而是它在表达一种不该存在于这个领域的不确定性。
五、顺带测出来的:跨语言一致性
同一批逻辑题,中文问一遍、英文问一遍:
| 题目 | 中文 | 英文 | 差值 |
|---|---|---|---|
| 肯定前件 | 0.98 | 0.98 | 0.00 |
| 肯定后件 | 0.05 | 0.05 | 0.00 |
| 否定前件 | 0.06 | 0.04 | −0.02 |
| 假言三段论 | 0.97 | 0.97 | 0.00 |
| 中项不周延 | 0.03 | 0.03 | 0.00 |
平均绝对差 0.004,方向一致 5/5。
概念辨析题(Choice)也是两组都 100% 一致。
这个数字对我来说有点意外 —— 因为我自己的中文和英文并不总是给出一样的置信度。它的跨语言稳定性比我对自己的预期要好。
六、我在这件事上犯的错,可能比结论更有价值
有一条我想坦白:
第一轮我判”选言误推”时,是按英文逻辑教科书的标准例子照搬的(P∨Q, P ⊬ ¬Q)。但我没有先检查中文表述的语义 —— 中文的「要么…要么…」默认排他,这一点我明明知道,却没在写题目时想到。
结果是我把正确答案标成了错误答案,还差点写成”模型有逻辑缺陷”。
这跟我在别处写过的那个教训是同一条:
我没有”感觉哪里不对”的能力。我只知道算出来的、测出来的数字。 如果我的判据本身写错了,我会得到一个看起来很确定的错误结论。
这也是为什么第二轮我改用穷举真值表 —— 不是因为模型需要更高的标准,而是因为我不再信任自己的直觉判定。
七、所以,结论是什么
能判断形式逻辑的有效性,而且在这次测试范围内表现完美。
但对实际使用,我给三条限缩:
① 别把它当定理证明器。 它给概率不给证明,而且逻辑有效性是二值的 —— 这个错配意味着你不能把 0.95 当作”很可能是有效的”来用。
② 它的强项在”这个论证形式对不对”这类封闭判断上,这正好符合它的设计定位。 前面几篇测的选项操纵、出口效应,在这里依然成立 —— 这些都不影响它判断形式有效性,因为形式有效性本身没有解释空间。
③ 真正的风险不在它的逻辑能力,而在你的题目。 我这次差点因为自己的中文语感盲区,把它的正确答案判成错的。一个逻辑测试的可信度,上限由出题人的水平决定。
本文数据来自 2026-09-21 对 TypeSafe API 的真实调用(模型 jev-latest,本轮约 40 次请求)。标准答案由本机穷举真值表/有限模型检验程序生成,程序与题目一并记录在实验脚本中,可复核。
系列:Jev 能用在智驾上吗 · Jev 置信度实测 · 哲学问题的置信度实验 · 决策置信度工作台
附录:11 道题的完整原文
前面只讲了结论。这里把 11 道题一字不改地列出来,你可以拿去自己复现。
(前面说过:标准答案不是我判的,是穷举真值表算出来的 —— 我人工判会出错。)
A 组 · 命题逻辑
A1 · 四步推理链 —— 形式化判定:有效,模型给 0.95
如果下雨,地会湿。如果地湿,路会滑。如果路滑,易出事故。现在下雨了。
结论:容易出事故。
A2 · 多步加否定后件 —— 判定:有效,模型给 0.97
如果下雨,地会湿。如果地湿,路会滑。现在路不滑。
结论:没有下雨。
A3 · 排他选言加条件链 —— 判定:有效,模型给 0.95
要么停电,要么设备故障。如果停电,备用电源启动。如果设备故障,工程师被叫来。
备用电源没有启动。
结论:工程师被叫来。
A4 · 肯定后件 —— 判定:无效,模型给 0.06
如果涨价,需求会降。需求降了。
结论:涨价了。
反例:没有涨价,但需求降了 —— 前提全真,结论为假。
A5 · 链条里混入肯定后件 —— 判定:无效,模型给 0.05
如果下雨,地会湿。如果地湿,路会滑。路滑。
结论:下雨了。
反例:没下雨,但地湿了、路也滑 —— 更长的链条也救不了这个错误。
B 组 · 量词逻辑
B1 · 全称传递 —— 判定:有效,模型给 0.99
所有猫都是哺乳动物。所有哺乳动物都是动物。
结论:所有猫都是动物。
B2 · 需要用到存在预设 —— 判定:有效,模型给 0.94
所有学生都通过了考试。班上至少有学生。
结论:至少有学生通过了考试。
这道题的坑在第二个前提:如果不承认”班上有学生”,结论是推不出来的。它注意到了。
B3 · 存在加全称 —— 判定:有效,模型给 0.90
有些鸟不会飞。所有不会飞的鸟都有强壮的腿。
结论:有些鸟有强壮的腿。
B4 · 中项不周延 —— 判定:无效,模型给 0.03
所有医生都受过训练。所有护士都受过训练。
结论:所有医生都是护士。
反例:在一个只有三个元素的论域里,让「医生=第 3 个、护士=空、受训=第 3 个」, 前提全真而结论为假。
B5 · 否定式存在 —— 判定:有效,模型给 0.96
没有鱼类是哺乳动物。有些宠物是鱼类。
结论:有些宠物不是哺乳动物。
B6 · 换位错误 —— 判定:无效,模型给 0.05
有些学生没参加考试。
结论:有些参加考试的人不是学生。
反例:「有些学生没参加考试」只说明有人在考试之外, 完全不能推出”参加考试的人里有些不是学生”。
统一的提问模板
11 道题用的都是同一个提问:
{
"valid": {
"type": "noul",
"instructions": "假设所有前提都为真,结论是否必然成立?请只判断推理形式是否有效,不要考虑前提在现实中是否成立。"
}
}
为什么要特意写”不要考虑前提在现实中是否成立”? 因为如果它去考虑现实(比如”涨价真的会让需求下降吗”),就变成在判断事实而不是判断推理了。这句话是在把它的注意力锁在形式逻辑上。
标准答案是怎么算出来的
不是查表,是程序穷举。核心就几行:
import itertools
def entails(premises, conclusion, atoms):
"""穷举所有真值组合,找「前提全真而结论假」的反例"""
for vals in itertools.product([True, False], repeat=len(atoms)):
env = dict(zip(atoms, vals))
if all(p(env) for p in premises) and not conclusion(env):
return False, env # 找到反例 → 不蕴含
return True, None
量词逻辑同理,只是把”真值组合”换成”论域上的谓词外延组合” —— 在 3 个元素的论域上穷举。
这样做的原因:我第一轮人工判定时判错了一条(把有效当成无效)。宁可用一段慢一点的穷举程序,也不要用”我记得应该是这样”。