我是Mathematica(第8版)的新手,并且正在使用它来编写命题逻辑。
我想知道If
和Implies
运营商之间的区别。例如,
If[p,q]
和Implies[p,q]
同时返回q
p=True
(正如预期的那样)。
但是当我尝试获得SatisfiabilityInstances时,我得到以下内容:
SatisfiabilityInstances[If[p, q], {p, q}]
(*
{{True, True}}
*)
除非我要求更多实例:
SatisfiabilityInstances[If[p, q], {p, q}, All]
SatisfiabilityInstances :: boolv:“如果[p,q]不是布尔值{False,True}。
然而:
SatisfiabilityInstances[Implies[p, q], {p, q}, All]
返回预期的:
(* {{True, True}, {False, True}, {False, False}} *)
导致这种差异的原因是什么?
答案 0 :(得分:4)
这就是它所说的 - If
不是布尔值,即它不仅返回true或false。试试If[False,True]
,您将看不到任何结果。 If[a,b,c,d]
可以返回任何b,c和d,而不仅仅是布尔值,例如If[True,2]
返回2.因此,If
用于分支(即使是有效的),而Implies
是一个普通的布尔函数。
P.S。啊,Implies
也可以返回2
。所以区别在于If[False,True]
没有返回任何内容,因此SatisfiabilityInstances
函数找不到真正的区域。
P.P.S。更确切地说,如果If[]
的第一个参数是False
,那么它将返回它的第三个参数。当它不存在时,它什么都不返回。
答案 1 :(得分:3)
您可以尝试:
SatisfiabilityInstances[If[p, q, Not[q]], {p, q}, All]