7

我是 Mathematica(v8) 的新手,正在用它来编程命题逻辑。

我想知道 theIfImplies运营商之间有什么区别。例如,
both If[p,q]and Implies[p,q]return qfor p=True(如预期的那样)。

但是当我尝试获取 SatisfiabilityInstances 时,我得到以下信息:

SatisfiabilityInstances[If[p, q], {p, q}]
(*
  {{True, True}}
*)  

除非我要求更多实例:

SatisfiabilityInstances[If[p, q], {p, q}, All]

SatisfiabilityInstances::boolv: "If[p,q] 不是布尔值 {False,True}。

然而:

SatisfiabilityInstances[Implies[p, q], {p, q}, All]   

返回预期的:

(* {{True, True}, {False, True}, {False, False}} *)

是什么导致输出出现这种差异?

4

2 回答 2

4

这就是它所说的——If不是布尔值,即它不仅返回真或假。试试看If[False,True],你不会看到任何结果。 If[a,b,c,d]可以返回任何 b、c 和 d,不仅是布尔值,例如If[True,2]返回 2。因此,If它是用于分支(甚至是功能性的),而Implies它是一个普通的布尔函数。

PS啊,Implies还可以退货2。所以不同的是If[False,True]什么都不返回,所以SatisfiabilityInstances函数找不到真正的区域。

PPS 更准确地说,如果 is 的第一个参数If[]False返回它的第三个参数。当它不存在时,它什么也不返回。

于 2012-10-26T22:25:45.217 回答
3

你可以试试:

SatisfiabilityInstances[If[p, q, Not[q]], {p, q}, All]
于 2012-10-26T22:31:16.967 回答