我有以下三个前提:
P or Q
P => R
Q => R
符号=>表示“暗示”操作。我知道这些前提构成了一个困境,但是如何将它们组合成一个逻辑表达式?
由于列表中的每个命题同时为真,因此and
它们之间存在隐含。
(P v Q) ^ (P => R) ^ (Q => R)
但我们知道这(P v Q)
是True
:
True ^ (P => R) ^ (Q => R)
这给我们留下了:
(P => R) ^ (Q => R)
类似的含义P => R
转化为:
~(P ^ ~R)
并且可以转换为:
(~P v R)
使用它,我们有:
(~P v R) ^ (~Q v R)
如果我们分解我们得到:
(~P ^ ~Q) v R
自从:
(~P ^ ~Q) == ~(P v Q)
我们有:
~(P v Q) v R
但我们知道这(P v Q)
是True
:
~True v R
或者:
False v R
这导致了最终答案:
R
最初的问题展示只是自然演绎中的或消除。这是直觉逻辑的原则,这里不需要关于布尔代数的经典论证。
直观地说,P v Q 类似于 P 或 Q 的不相交和的类型(类似于某些编程语言中的联合类型)。如果您有一条从 P => R 出发的方法,另一条从 Q => R 出发——换句话说,分别是该类型的函数——您可以将它们放在一起以消除析取并获得结果 R两种情况。
这有时表现为像这样的高阶函数组合器:
case: P v Q => (P => R) => (Q => R) => R
您实际上可以将 P v Q定义 为允许对任意 R 进行这种推理的逻辑运算符。
进一步注意,这是逻辑和编程的 Curry-Howard 对应关系的关键方面之一。
对于布尔代数,蕴涵 A=>B 应读作“如果 A 为真 B 不能为假”,它有一个等效公式:蕴涵 A=>B 是 (!A || B) 。
在你的情况下 P=>R ~ !P || R , Q=>R ~ !Q||R 所以我们有 !(P || Q) && R
更新:复杂表达式通常由 &-ing 简单表达式组成。很可能你应该证明一些表达式 X (假设 P == “下雨了”,Q == “下雪了”,R == “我会带一把雨伞”。你应该证明像 X = =“如果下雨下雪我会带伞”)
所以你这样做 ((P || Q) && (P=>R) && (Q => R) ) => X. 当简单表达式为真时,你应该检查它是否适用于所有情况。左边部分正好等于 P||Q && R