2017-02-25 31 views
1

私は1つの式∀X∃Yr(X、Y)、∃X∀Yr(X、Y)はどのように表現されますか?

  • &FORALLを表現する方法を知りたいのですが、X ∃ YのR(X、Y);そして
  • ∃ X∀ YはR(X、Y)プロローグで

。 (私の理解では、プロローグは、これらの式を表現することができるはずということです、私は私のPrologの教科書に彼らのような何かを見つけることができません。)


UPDATE

私がいることをj4n bur53の有益な答えから集まります私の質問に対する答えは、rの性質、より具体的には、rの引数が属するセットの性質に多少依存しています。

したがって、具体的には、私は現時点で興味を持っている2つのケースについて説明しています(かなり標準的です)。 (それが起こるように、FORALLケース&両方のために、X ∃ YのR(X、Y)が真であり、∃ X∀ YはR(X、Y)が偽である。)が挙げられる1はrレット

ケース明示的に次の二つの事実(そして何よりも)によって:

r(1, 2). 
r(2, 1). 

ケース2rが(正)の自然数について≤になりましょうN = {1、2、3、... }。したがってr(1, Y)は、Yのすべての許可可能なインスタンス化に当てはまりますが、r(X, Y)Yのすべてのインスタンス化に当てはまるようなXのインスタンス化はありません。

答えて

1

ドメイン関連の量指定子を使用するのが最も簡単なのは、XとYがドメインa(。)とb(。次のようにあなたはそれを表現します:

∀X (a(X) -> ∃Y (b(Y) & r(X, Y)))   (1) 
∃X (a(X) & ∀Y (b(Y) -> r(X, Y)))   (2) 

今接続詞(&)/ 2が直接連動(、)/ 2をプロローグです。そして含意( - >)/ 2のために、以下の論理的同値性A→B ==〜(A &〜B)を観察する。

私たちは私たちの否定のための失敗による否定(+)/ 1(〜)/ 1許可した場合、次のように我々は、多くのPrologのシステム(例えばSWI-Prolog)で事前定義されたメタ述語を定義することができます。

forall(F, G) :- \+ (F, \+ G). 

ここですべての変換を受け入れると、最後に2つのクエリは次のPrologクエリになります。

?- forall(a(X), (b(Y),r(X,Y))). 
?- a(X), forall(b(Y), r(X,Y)). 

アプローチ通常データログのために動作しますが、このような状況ではない:(。)(。)

  • 場合またはbは無限大です。
  • もしr(。)はさらなるパラメータを有し、すなわち、失敗の否定はバインディングを破棄する。
  • ここでは失敗の否定があまりにも弱い場合
  • 制約が関係する場合は、for/2の代わりにforeach/2が必要な場合があります。
  • 他に何か?
関連する問題