“大展鸿图”的不变式君子不贪杯这一题,貌似C选项也可以

小树 2025-7-28 18:26

君子不贪杯这题,您给的答案是B,貌似C也可以,要么贪杯,要么君子,我的理解对吗?

UMLChina潘加宇

C不对。你的理解也不对,“要么A,要么B”不是or(或)的意思,而是xor(异或)。

我们设定:

P: 某个人是君子,即oclIsKindOf(君子)

Q: 某个人不贪杯,即24小时内摄入酒精克数<=20

把四个选项用P和Q替换,如下图:

君子不贪杯,意思是:如果一个人是君子,那么他不贪杯,即P→Q。

P→Q 等价于 (not P) or Q,这是逻辑学的基本定义。

也就是B选项。

not oclIsKindOf(君子) or 24小时内摄入酒精克数<=20

C选项

24小时内摄入酒精克数>20 or oclIsKindOf(君子)

相当于(not Q) or P,等价于Q→P,意思是,如果一个人不贪杯,那么他是君子。

这个意思就变掉了,原来的意思,贪杯只是君子的必要条件,现在变成了充分条件。

还可以比较一下真值表,特别注意结果为假的(P,Q)结合

本来我们给类加约束是防止“贪杯的君子”出现,如果改成下面,则变成防止“不贪杯的非君子”出现了。

用无间道的话来说,一个是警察抓内鬼,一个是腐蚀黑帮里的好人。

贪杯不贪杯的可能只是小事情,最近空难较多,我们换成飞机事故看看。

P: 发动机故障

Q: 警报响

真值表如下:

从“杜绝漏报”变成了“杜绝假警报”。

**********

再看你说的“要么贪杯,要么君子”。

根据前面的定义:

P:君子

Q:不贪杯

“要么贪杯,要么君子”相当于 (not Q) xor P。

(not Q) xor P

=((not Q) or P) and not((not Q) and P)

=((not Q) or P) and (Q or (not P))

=((not Q) or P) and ((not P) or Q)

=(Q→P) and (P→Q)

=Q↔P

相当于“君子”和“不贪杯”是双重蕴含的,这个就更严格,既杜绝了“贪杯的君子”,也杜绝了“不贪杯的非君子”。 


weixinpanjiayu2