このページは、生成規則モデルにおける前向き推論と後ろ向き推論を、入力、処理、出力の観点で詳しく整理するノートです。
ざっくり比較
- 前向き推論: 手元の事実から結論を増やしていく(data-driven)
- 後ろ向き推論: 検証したい目標から必要条件を逆算する(goal-driven)
どちらもルール集合を使いますが、探索の始点が違います。
前向き推論(Forward Chaining)
ざっくりいうと
すでに分かっている事実を起点に、適用可能なルールを順に発火し、新しい事実を増やしていく方式です。
入力
- ルール集合(
if-then規則) - 初期事実(作業記憶に入っている既知情報)
- 停止条件(任意。目標到達、反復上限、時間上限など)
処理の流れ
- 現在の事実に一致するルール候補を集める(マッチ)
- 複数候補の実行順を決める(競合解決)
- ルールを発火し、事実を追加・更新する(実行)
- 停止条件を満たすまで繰り返す
出力
- 追加後の事実集合(到達した結論)
- ルール発火履歴(説明可能性のための証跡)
- 目標が設定されていれば到達可否
向いている場面
- 監視、アラート、イベント処理
- 業務規程の自動適用
- 事実が継続的に流入する処理
注意点
ルール数が多いと、毎サイクルの照合コストと競合解決コストが増えます。停止条件を明示しないと、無限ループや不要な発火の温床になります。
後ろ向き推論(Backward Chaining)
ざっくりいうと
「この結論は成り立つか」を出発点に、必要な前提を逆向きにたどって証明を試みる方式です。
入力
- ルール集合
- 既知事実
- 問い合わせ/目標(必須)
処理の流れ
- 目標を結論にもつルールを探す
- その条件部を下位目標に展開する
- 下位目標を既知事実または別ルールで検証する
- すべて成立すれば目標成立、どこかで失敗すれば不成立
出力
- 目標命題の成否(真/偽)
- 証明経路(どのルール連鎖で成立したか)
- 問い合わせ変数の束縛結果(ロジックプログラミング文脈)
向いている場面
- 診断支援(仮説検証)
- 問い合わせ応答(この条件で成立するか)
- ルール根拠の提示が重要な場面
注意点
目標が曖昧だと探索枝が増え、証明効率が落ちます。循環規則や深い依存がある場合は、再訪問管理や深さ制限が必要です。
入出力の最小セット
- 前向き推論の最小入力: ルール集合 + 初期事実
- 後ろ向き推論の最小入力: ルール集合 + 既知事実 + 問い合わせ/目標
比較しやすくするために三項目で並べることがありますが、前向き推論では目標は必須ではありません。
小さな例
ルール:
- R1: IF
発熱AND咳THEN呼吸器疑い - R2: IF
呼吸器疑いTHEN胸部検査推奨
初期事実:
発熱 = あり咳 = あり
前向き推論では R1, R2 の順に発火し、胸部検査推奨 が新事実として得られます。
後ろ向き推論では目標 胸部検査推奨 から逆算し、R2, R1 をたどって 発熱 と 咳 が事実なら成立と判定します。