2012-10-26 39 views
7

我是Mathematica(v8)的新手,正在使用它來編程命題邏輯。Mathematica If-then vs. Implies

我想知道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}} *) 

是什麼原因造成的產出這種差異?

回答

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,那麼它返回它的第三個參數。當它不存在時,它不返回任何內容。

+0

,你能告訴我一個很好的教程?我讀過Mathematica文檔,但並不知道可以給出'If'四個值(if-else只有三個)。 '如果[a,b,c,d]'沒有賦予任何真值,返回'd' - 爲什麼? @Dims – QuietThud

+0

@QuietThud'如果[條件,真子句,假子句,非真或假子句]' –

+0

謝謝@belisarius。 =)我會很感激推薦一個數學。程序設計學習資源 - 文檔可以更好地作爲參考。 – QuietThud

3

你可以試試:

SatisfiabilityInstances[If[p, q, Not[q]], {p, q}, All] 
+0

這確實解釋了錯誤信息,謝謝。 – QuietThud