2012-10-26 14 views
7

私はMathematica(v8)を初めて使用しており、命題論理をプログラムするために使っています。Mathematica If-Then vs. Implies

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:「もし[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]は、ブール値だけでなく、If[True,2]が2を返すような任意のb、c、dを返すことができます。Ifはブランチング用です(機能している場合もあります)。Impliesは通常のブール関数です。

P.S.ああ、Implies2を返すことができます。違いはIf[False,True]は何も返さないので、SatisfiabilityInstances関数は真の領域を見つけることができません。

P.P.S.より正確には、If[]の最初の引数がFalseであれば、3番目の引数を返します。不在のときは何も返しません。

+0

あなたが良いのチュートリアルに私を指示することはできますか?私はMathematicaのドキュメントを読んだが、Ifなら4つの値を与えることは可能であることに気づいていなかった(if-elseに対しては3つしかない)。 '[a、b、c、d]が真理値が割り当てられていない' d 'を返す場合、それはなぜですか? @Dims – QuietThud

+0

@QuietThud '[条件、真句、偽句、真偽偽でない句] ' –

+0

ありがとうございます@belisarius。 =)私は数学までの推薦を感謝します。プログラミングの学習ソースが出てきます。ドキュメントはリファレンスとしてうまく機能します。 – QuietThud

3

あなたは試みることがあります。

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

これはエラーメッセージを説明してくれます。ありがとうございます。 – QuietThud