Database Reference
In-Depth Information
Programm und Anfrage
Antwortsubstitutionen
P 1 :
Even(zero).
Even(succ(succ(y)))
σ 1 =
{
x/zero
}
Even(y).
σ 2 =
{
x/succ(succ(zero))
}
σ 3 =
{
x/succ(succ(succ(succ(zero))))
}
G 1 :
Even(x).
.
P 2 :
P(a).
P(y)
σ 1 =
{
x/a
}
P(y).
G 2 :
P(x).
P 3 :
P(a).
P(y)
σ 1 =
{
x/a
}
R(b).
σ 2 =
{
x/b
}
R(b).
σ 3 =
{}
σ 4 =
{
x/t
}
(fur jeden Term t )
G 3 :
P(x).
P 4 :
Kante(a,b).
Kante(b,c).
Kante(b,d).
Weg(v,w)
σ 1 =
{
x/b
}
σ 2 =
{
x/c
}
σ 3 =
{
x/d
}
Kante(v,w).
Weg(v,w)
Kante(v,z), Weg(z,w).
G 4 :
Weg(a,x).
Abbildung 9.1 Anwortsubstitutionen zu Beispiel 9.4
als einen Beweis des Gegenteils ansehen. Dies wird Negation als Fehlschlag ( nega-
tion as failure ) genannt. Entsprechend kann man das logische Programmieren um
einen Operator not erweitern, so dass not A als bewiesen gilt, wenn der Beweis von
A scheitert. Dieser Operator ist in Prolog vorhanden und begrundet ein nichtmo-
notones Inferenzverhalten: Fugt man z.B. in P 4 die Programmklauseln Kante(c,d)
und Kante(d,a) hinzu, gilt anschließend Weg(c,a) und ist beweisbar. Ab Abschnitt
9.5 werden wir ausfuhrlich auf die Rolle der Negation im logischen Programmieren
eingehen.
Selbsttestaufgabe 9.5 (Antwortsubstitution) Seien das Programm
P
und die
Anfrage G gegeben durch:
P(1)
P(2),P(3).
P(2)
P(4).
P(4).
P(x).
Wieviele korrekte Antwortsubstitutionen gibt es, und welche sind dies?
nicht nur Hornformeln, sondern
beliebige Formeln zulasst, so gibt es im Allgemeinen keine entsprechende korrekte
Antwortsubstitution, obwohl die betreffende Folgerung allgemeingultig ist.
Wenn man - wie im folgenden Beispiel - fur
P
Search WWH ::




Custom Search