Mathematica If-then vs.Implies

时间:2012-10-26 22:09:59

标签: if-statement wolfram-mathematica boolean-logic

我是Mathematica(第8版)的新手,并且正在使用它来编写命题逻辑。

我想知道IfImplies运营商之间的区别。例如,
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}} *)

导致这种差异的原因是什么?

2 个答案:

答案 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]