152 KAPITEL 6. BERECHNUNG VON ANTWORTENAnfrage <strong>in</strong>itialisiert und kann als Konkatenation der noch abzuarbeitenden Unteranfragenverstanden werden.Während die e<strong>in</strong>zelne Ableitung von der Anfrage bis zur leeren Klausel also l<strong>in</strong>earist, gilt dies nicht für den Suchraum: Im allgeme<strong>in</strong>en können verschiedene Axiome alsSeitenklausel verwendet werden, die nache<strong>in</strong>ander ausprobiert werden müssen (z.B. mit” Backtrack<strong>in</strong>g“).Die wesentliche Struktur e<strong>in</strong>es l<strong>in</strong>earen Resolventenbeweisers ist also folgende:prove(Φ, ψ) :-refute(Φ, ψ, ¬ψ).refute(Φ, ψ, Γ) :-empty(Γ).refute(Φ, ψ, Γ) :-ϕ ∈ Φ ∪ {¬ψ},resolve(Γ, ϕ, Γ ′ , θ),refute(Φ, ψ, Γ ′ ).Es wird hier e<strong>in</strong>e Art Prolog-Pseudocode verwendet, um die Algorithmen zu notieren,weil dadurch das Backtrack<strong>in</strong>g nicht explizit programmiert werden muß.Dieses Programm dient im folgenden als Grundlage für die Entwicklung des topdown“-Verfahrenszur Anfrage-Auswertung. Der eigentliche Ableitungsschritt ist dabei ”<strong>in</strong> der Prozedur resolve verborgen, die aus der Zielklausel Γ und der Seitenklausel ϕdie neue Zielklausel Γ ′ ableitet (die dabei verwendete Substitution θ wird erst späterbenötigt). Die Prozedur resolve soll hier nur <strong>in</strong>formell erklärt werden. E<strong>in</strong>e formaleDef<strong>in</strong>ition f<strong>in</strong>det sich <strong>in</strong> [CL73].Tatsächlich gibt es verschiedene Arten von Ableitungsschritten, der wichtigste ist derResolutionsschritt. Er besteht <strong>in</strong> der Anwendung der Axiome als Regeln, d.h. ist dieaktuelle Zielklausel← λ 1 ∧ λ 2 ∧ · · · ∧ λ nund gibt es e<strong>in</strong> Axiom der Formλ ′ 1 ← λ ′ 2 ∧ · · · ∧ λ ′ m,so daß λ 1 θ = λ ′ 1θ für e<strong>in</strong>e Substitution θ gilt, so kann man zu folgender Zielklauselübergehen:← λ ′ 2θ ∧ · · · ∧ λ ′ mθ ∧ λ 2 θ ∧ · · · ∧ λ n θ.E<strong>in</strong>e Substitution θ mit dieser Eigenschaft heißt e<strong>in</strong> Vere<strong>in</strong>heitlicher ( unifier“) der beiden”Klauseln. Es reicht aus, nur allgeme<strong>in</strong>ste“ Vere<strong>in</strong>heitlicher zu betrachten, die ke<strong>in</strong>e”unnötigen Variablenb<strong>in</strong>dungen vornehmen.Die OL-Resolution ist sehr ähnlich zur SLD-Resolution [Llo87] von Prolog. Da es sichaber nicht um Hornklauseln handelt, kann e<strong>in</strong> Axiom auf verschiedene Arten als Regelgelesen werden, p ← q ∧ ¬r kann zum Beispiel auch <strong>in</strong> der Form r ← q ∧ ¬p angewendet
6.2. TOP-DOWN 153werden, und sogar <strong>in</strong> der Form ¬q ← ¬p ∧ ¬r, denn natürlich kann auch die Zielklauseljetzt negative Literale enthalten.E<strong>in</strong>e Spezialität der OL-Resolution s<strong>in</strong>d die sogenannten ”gerahmten Literale“ ( ”framedliterals“) <strong>in</strong> der Zielklausel. Sie enthalten Steuer<strong>in</strong>formation, durch die man es vermeidenkann, frühere Zielklauseln aufbewahren zu müssen. Der Grundgedanke ist dabei,daß die früheren Zielklauseln <strong>in</strong> e<strong>in</strong>em Suffix mit der aktuellen Zielklausel übere<strong>in</strong>stimmen,da immer nur vorne etwas geändert wird. Am <strong>in</strong>teressantesten s<strong>in</strong>d nun natürlichmöglichst kurze frühere Zielklauseln, die bis auf das wegresolvierte Literal noch <strong>in</strong> deraktuellen Klausel enthalten s<strong>in</strong>d. Dieses Literal bewahrt man nun <strong>in</strong> Form e<strong>in</strong>es gerahmtenLiterals auf, d.h. bei dem obigen Resolventenschritt erhält man eigentlich folgendeZielklausel:← λ ′ 2θ ∧ · · · ∧ λ ′ mθ ∧ [λ 1 θ] ∧ λ 2 θ ∧ · · · ∧ λ n θ.Natürlich gehören diese gerahmten Literale nicht zu dem logischen Inhalt der Zielklausel.Die gerahmten Literale werden <strong>in</strong> e<strong>in</strong>em sogenannten Reduktions-Schritt verwendet.Dabei wird e<strong>in</strong> Resolutionsschritt mit derjenigen Zielklausel simuliert, bei der das gerahmteLiteral e<strong>in</strong>geführt wurde. Enthält e<strong>in</strong>e Zielklausel← λ 1 ∧ λ 2 ∧ · · · ∧ λ ne<strong>in</strong> gerahmtes Literal [λ i ], für das λ 1 θ = ∼λ i θ gilt (d.h. die beiden Literale stimmen bisauf das Vorzeichen übere<strong>in</strong>), so kann man zu folgender Zielklausel übergehen:← λ 2 θ ∧ · · · ∧ λ n θ.Die frühere Zielklausel war dann ja← λ i ∧ λ i+1 ∧ · · · ∧ λ n(oder e<strong>in</strong>e noch allgeme<strong>in</strong>ere Klausel, weil <strong>in</strong> der Zwischenzeit eventuell Substitutionenangewendet wurden). Würde man den Resolutionsschritt wirklich ausführen, so würdennur Literale h<strong>in</strong>zukommen, die <strong>in</strong> der Zielklausel ohneh<strong>in</strong> schon enthalten s<strong>in</strong>d.Hierfür ist es wichtig, die Zielklausel bis auf die Anwendung der Substitutionen alsStack zu behandeln, also immer nur vorne etwas zu verändern. Kommt dabei e<strong>in</strong> gerahmtesLiteral nach vorne, so wird es gelöscht (Kontraktionsschritt). Für alle <strong>in</strong> der Zielklauselenthaltenen gerahmten Literale ist der Rest der entsprechenden früheren Zielklausel alsonoch vollständig erhalten (er liegt ja unter dem gerahmten Literal im Stack).Schließlich besteht auch noch die Möglichkeit der Faktorbildung, bei der man zweiLiterale der Zielklausel durch Anwendung e<strong>in</strong>er Substitution verschmilzt. Zusätzlich elim<strong>in</strong>iertman natürlich immer doppelte Literale. Dabei muß man beachten, daß mandas am weitesten rechts stehende Literal stehen läßt, so daß die Invariante bezüglich dergerahmten Literale erhalten bleibt. Auch bei den Seitenklauseln kann man e<strong>in</strong>e Faktorbildungdurchführen.Beispiel 6.2.1: Das folgende Beispiel ist e<strong>in</strong> beliebter Test für l<strong>in</strong>eare Resolventenmethoden,weil es e<strong>in</strong>en Resolutionsschritt mit e<strong>in</strong>er früheren Zielklausel erfordert:Φ := {p ∨ ¬q, ¬p ∨ q, ¬p ∨ ¬q},ψ = ¬p ∧ ¬q.