私はProlog(swi-prolog)で私の最初のステップを実行しており、次の問題を解決することはできません。具体的には、「誰もが誰かの友である」という文章をどのように含めることができますか\forall x \exists y friend(x,y)
?これまでに私が見つけたすべての質問は、事実ではなく質問に関するものでした。ありがとうございました!Prologの事実における存在量の定量化
答えて
あなたが与えた例では、実際にはルールではなく変数を定量化しています。あなたがそのような論理式としてルールを記述することができるように、ルール内の変数は普遍的、定量化されている
friend_of(a,b).
friend(X) :-
friend_of(X,Y).
:
∀ X
∀ Y
(friend(X)
← friend_of(X,Y))
これを念頭に置いて、次の例を考えてみ
変数Y
はルールの先頭には存在しないため、その汎用的な量指定子を存在のqとして規則の本体に移動できますuantifier:friend_of(X,Y)
が真であるY
ように存在する場合も同様であるX
friend(X)
FORALL:
∀ X
(friend(X)
← ∃ Y
friend_of(X,Y))
は今、この式はとして読み出します。これはあなたが望むものにかなり近いようです。
一方、事実を考慮すると、事実が何かを示すために使用されます。上記の例では/ 2 friend_of実際には変数がここに存在しない、しかし
friend_of(a,b) :- true.
を書くだけの短い方法ですので、オーバー定量化するものは何もありません。 編集:あなたのコメントの場合については、述語は関係を構成することに注意してください。関係は必然的に対称的ではなく、それがfriend_of/2の関係に名前を付けた理由です。すなわち、friend_of(a,b)
は、必ずしもfriend_of(b,a)
を意味するものではありません。関係は必然的に反射的でもありません。友人関係が再帰的かどうかは議論の余地がある。しかし、それは確かに可能な読書です。このことを念頭に置いて、あなたのコメントで挙げた例では、あなたはそのようないくつかのa
を説明し、事実、人物などb
とc
を、持っていると仮定してみましょう:
person(a).
person(b).
person(c).
次にあなたが反射関係の友人/ 2などを記述することができますso:
friends(a,b) :- false. % example from your comment
friends(a,c) :- false. % example from your comment
friends(X,X) :- % the relation is reflexive
person(X). % among people
反射性を表現するルールは、基本的に誰もが少なくとも彼/彼女自身と友人であると述べています。この規則からあなたの必要条件誰もが誰かの友人ですの直後です。
?- friends(a,X).
X = a
二つの異なる人々の間には、実際の友情が述べられていませんが、最も一般的なクエリはまた、すべての人のための結果が得られます:
?- friends(X,Y).
X = Y = a ? ;
X = Y = b ? ;
X = Y = c
注意することをあなたがこの関係を照会する場合は、望ましい結果を得ます実際の人に答えを制限するには、fact/person/1が必要です。あなたは友人を照会する場合/いくつかの非人と2:あなたは、このような目標を持たずに反射性を定義しようとした場合
?- friends(cos(0),X).
no
:
friend(X,X).
あなたの定義があまりにも一般的になります。
?- friends(a,X). % desired result
X = a
?- friends(cos(0),X). % undesired result
X = cos(0)
最も一般的なクエリは実際の人物を生成しません:
- 1. 帰納的Coq定義における存在量と普遍的な量量子の関係
- 2. typeclass制約の存在量の定量化
- 3. OpenCVの:ラボカラー量子化事前に定義された色に
- 4. ハスケルの存在量を詳細に数値化する
- 5. 一次論理のユニバーサルおよび実在の数量器
- 6. 関数の戻り値の型で存在量の数量をシミュレートする
- 7. Prologにおけるツリープリオーダートラバーサル
- 8. Prologにおけるツリーポストオーバトラバーサル
- 9. Tensorflowの量子化
- 10. 普遍的な定量化変数の境界付け
- 11. 大量のデータをC++で大量に保存する方法
- 12. 量子化レベルメソッド
- 13. 半構造化データのおおよその量は、Hadoopクラスタを設定するのに十分ですか?
- 14. リストと数量の存在に基づく合計プロパティ
- 15. SWI-Prologで一連の事実を定義する
- 16. ボタン音量の変化?
- 17. HTMLの自動軽量化
- 18. クラウドファウンドリ量子状態 - 組織が同時に存在し、存在しない
- 19. YouTube APIおおよその量の結果を得るには?
- 20. 以前の数量に沿って在庫量を更新する
- 21. 細菌の存在量のスタック棒プロットを作成
- 22. Prolog - 事実上の小さな運動
- 23. イメージを量子化する
- 24. iOSで音量を設定してシステム音量ポップアップを避ける方法
- 25. スライドの現在および合計量を表示するには - Featherlight.js
- 26. ビット、バイト、およびメモリセルの量を決定する方法は?
- 27. 現在存在するSSH接続の量を確認してください
- 28. サブサンプリングと量子化の正規化R
- 29. Prolog Member Predicate 1個当たりの重量
- 30. 多変量症例(多変量正常)のMLEの実施R
あなたは正しいですが、私は少し専門用語を混ぜます。私はこの演習の目的はいくつかの事実を考慮して友情を推測することだと思います。例えば。私が知っているのは、a、b、cと〜の友人(a、b)と〜friend(a、c)です。私はまだそれがあなたの提案された解決策でうまくいくかどうかはまだ分かりません。 – huxley
@huxley: "〜friend(a、b)"とはどういう意味ですか?事実 'friend(a、b)'を与えたということですか?または、「a」と「b」は友人ではないことを明示しています。たとえば、「friend(a、b):false」です。 – tas
2番目のケースは私の意図です。だから、aとbとaとcが友達ではないことを考えれば、どのようにしてaとaはあなたの解を「誰もの友人ですか?」と与えられた友人(友人(a、a))でなければなりません。 – huxley