7

私はMathematica(v8)を初めて使用し、命題論理をプログラムするためにそれを使用しています。

IfImplies演算子の違いは何だろうと思います。たとえば、とは両方
とも(予想どおり)If[p,q]Implies[p,q]戻ります。qp=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より正確には、の最初の引数がの場合、If[]3False番目の引数を返します。存在しない場合は何も返しません。

于 2012-10-26T22:25:45.217 に答える
3

あなたは試すことができます:

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