簡単なレビュー:
- 推論規則=結論+規則+前提
- 証明木 = 結論 + ルール + サブツリー
- 後方証明検索: 入力ゴールが与えられた場合、ボトムアップ方式で推論ルールを適用して証明ツリーを構築しようとします (たとえば、ゴールは最終的な結論であり、ルールを適用した後、新しいサブゴールのリストが生成されます)敷地内)
問題:
入力目標 (例: A AND B,C
) が与えられた場合、最初に に AND ルールを適用すると、A AND B
2 つの新しいサブ目標が得られます。最初の目標はA,C
で、2 番目の目標は ですB,C
。
問題は、A
とB
が役に立たないことです。つまり、 のみを使用して完全な証明木を構築できC
ます。ただし、サブゴールが 2 つあり、C
2 回証明する必要があるため、非常に非効率的です。
質問:
たとえば、 がありA AND B,C AND D,E AND F,G,H AND I
ます。この場合、完全な証明木を構築するには、D と G だけが必要です。では、適用する適切なルールを選択するにはどうすればよいでしょうか。
これは Ocaml のコード例です:
(* conclusion -> tree *)
let rec prove goal = (* the function builds a proof tree from an input goal *)
let rule = get_rule goal in (* get the first rule *)
let sub-goals = apply_rule goal in (* apply a rule *)
let sub-trees = List.map (fun g -> prove g) sub-goals in (* prove sub-goals recursively *)
(goal, rule, sub-trees) (* return proof tree *)