| English | 意味 |
|---|---|
| fact/fækt/ | 事実 |
| declarative programming/dɪˈklærətɪv ˈprəʊɡræmɪŋ/ | 宣言的プログラミング |
| rule/ruːl/ | ルール |
| goal/ɡəʊl/ | ゴール |
| backtrack/ˈbæktræk/ | バックトラック |
| unification/ˌjuːnɪfɪˈkeɪʃn/ | 統一 |
誰がカメラを借りられるかを問う
- メディアクラブはメンバーに関する事実と完了したトレーニングを管理しています。新しいループを毎回書かずに、誰がカメラを借りられるかを問いたいと考えています。
- 宣言的プログラミング は事実、ルール、そして goal を記述します。論理エンジンは goal が真となる値を検索します。プログラマーはまだ正しいルールを書く必要がありますが、エンジンは心を読んだり、クラブの掲示板を見たりしません。
事実は何分か示す
- Fact は知識ベースにおける主張です。
member(aya).において、predicatememberは一人の人々とクラブ membership を関連付けます。trained(aya, camera).は人々と機器を関連付けます。 - この授業では Prolog-style 表記法を使用します:小文字の名前は定数または predicates、大文字の名前は変数です。各 fact や rule の末尾にはピリオドをつけます。
member(aya).
member(ben).
member(chen).
trained(aya, camera).
trained(chen, camera).
trained(ben, audio).
Given the facts member(ben). and trained(ben, audio)., which statement below is a supplied fact?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
member(ben). is given directly. The knowledge base does not include camera training for Ben.
ルールは条件を組み合わせる
- Rule は結論が成り立つ時点を示します。
:-を「if」、コンマを AND と読み解きます:一人の人が member である かつ camera training を受けている場合、カメラを借りることができます。 Personは3つの場所すべてで同じ変数を指します。エンジンは一人の member と別の trained person をそれぞれ見つけるのではなく、両方の条件を満たす一つの値を見つける必要があります。
can_borrow(Person, camera) :- member(Person), trained(Person, camera).
In the rule can_borrow(Person, camera) :- member(Person), trained(Person, camera)., the comma between the two conditions means ____.
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
Both membership and camera training must hold for the same Person.
Goal は質問をする
- goal
?- can_borrow(aya, camera).は yes/no の結果を求めています。エンジンはルールに一致させ、member(aya)とtrained(aya, camera)を確認します:両方の fact が存在するため、goal は成功します。 - goal
?- can_borrow(Person, camera).は変数のバインディングを求めています。この knowledge base において、答えはPerson = ayaとPerson = chenです。これらは推論のための goal ですが、表示されるブロックは記法であり、実行可能な playground ではありません。
Club members are aya, ben and chen. Aya and Chen are camera-trained; Ben is audio-trained only. The rule can_borrow(Person, camera) requires both membership and camera training. Who satisfies can_borrow(Person, camera)?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
Aya and Chen have both required facts. Ben has audio training only.
The Person variable in member(Person) may have a different value from Person in trained(Person, camera) during one proof.
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
All occurrences of the same variable must keep the same binding in that proof.
実演例:失敗した候補者のトレース
Person = benで開始する。member(ben)は成功する。trained(ben, camera)は失敗する:利用可能な訓練の事実は音声用であり、カメラとは一致しないからである。- エンジンはバックトラックして別の候補である
Person = chenを試みる。両方の条件が成功する。追加の回答が求められれば検索を続け、候補が残っていなければそれ以上回答はない。
Trace the remaining search after Aya has already been returned.
難易度 3/5 · 200 コイン + 今日初回完了時に小ボーナス付与
Ben is a member but lacks a matching camera-training fact; the engine then tries Chen.
照合はルール間で値を共有する
- 統一は変数を一貫してバインディングしながら項を照合する。
trained(Person, camera)とtrained(chen, camera)を照合するとPersonがchenにバインディングされるが、trained(ben, audio)を照合すると機器が異なるため失敗する。 - 目的の失敗とは、これらの事実とルールから証明できないことを意味する。これが本が現実の生活で一度もカメラを使っていないことを証明するものではない;知識ベースが単純に不完全なだけかもしれない。
Matching trained(Person, camera) with trained(chen, camera) binds Person to ____.
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
The equipment matches and the first argument provides the binding chen.
計算例:新しいルールを書く
- 要件:メンターが誰かを助けるのは、メンターがカメラの訓練を持っており、かつ学習者がメンバーである場合に限る。以下のルールを追加し、
?- can_help(aya, ben).を質問する。 trained(aya, camera)とmember(ben)の両方が存在するため、目的は成功する。このルールによりアヤは自分自身を手伝うことも可能になる。自己援助を除外したい場合は、要件にもう一つの条件が必要であり、黙って発明してはならない。
can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner).
Given trained(aya, camera). and member(ben)., and the rule can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner)., does can_help(aya, ben) succeed?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
Aya has camera training and Ben is a member; Ben need not have camera training to be a learner.
見落としやすいポイント
- 事実は既知のことを示し、ルールはその条件が満たされたときに結論を導き出し、目的は結論が証明できるか、あるいはどの値が真にするかを問う。
- 繰り返される変数は一貫性を保つこと。
member(X), trained(Y, camera)では、訓練のないメンバーでも他の誰かが訓練を持っているために資格を得てしまう。変数名を変更するとルールの意味が変わる。
要件から証明へ
- 事実を書き、各要件をルールに翻訳し、目的を提示する。各変数のバインディングをすべての条件を通じてトレースし、候補が失敗した場合は代替を試す。
- ここではアヤとチェンだけがカメラを借りられる。本の音声訓練はカメラ訓練ではない。結果は提供された知識ベースに基づいて導かれるものであり、実在する人物についての推測ではない。
Club members are aya, ben and chen. Aya and Chen are camera-trained; Ben is audio-trained only. The rule can_borrow(Person, camera) requires both membership and camera training. How many people satisfy can_borrow(Person, camera)?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
Aya and Chen are the two solutions.
A failed goal proves the corresponding event never happened outside this knowledge base.
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
Failure means the goal cannot be proved from the available facts and rules.