Druga główna rodzina algorytmów wnioskowania logicznego używa łańcuchów wstecznych na określonych klauzulach. Algorytmy te działają wstecz od celu, łącząc reguły, aby znaleźć znane fakty, które wspierają dowód.
Algorytm wiązania wstecznego
Poniżej mamy algorytm tworzenia łańcucha wstecznego dla klauzul określonych. FOL-BC-ASK(KB,goal) zostanie udowodnione, jeśli baza wiedzy zawiera regułę postaci lhs=> cel , gdzie lhs (lewa strona) jest listą spójników. Fakt atomowy, taki jak American(West), jest uważany za klauzulę, której lhs jest pustą listą. Teraz zapytanie zawierające zmienne można udowodnić na wiele sposobów. Na przykład zapytanie Person(x) można udowodnić za pomocą podstawienia {x/John} oraz {x/Richard}. Dlatego implementujemy FOL-BC-ASK jako generator – funkcję, która zwraca wiele razy, za każdym razem dając jeden możliwy wynik
Tworzenie łańcuchów wstecznych jest rodzajem przeszukiwania AND/OR — część OR, ponieważ zapytanie o cel może być udowodnione przez dowolną regułę w bazie wiedzy, oraz część AND, ponieważ wszystkie spójniki w lhs klauzuli muszą zostać udowodnione. FOL-BC-OR działa, pobierając wszystkie klauzule, które mogą ujednolicić się z celem, standaryzując zmienne w klauzuli jako zupełnie nowe zmienne, a następnie, jeśli prawa strona klauzuli rzeczywiście ujednolicają się z celem, udowadniając każdą koniunkcję w lewą stronę, używając FOL-BC-AND. Ta funkcja działa, udowadniając każdą z koniunkcji po kolei, śledząc skumulowane podstawienie w miarę postępu. Rysunek to drzewo dowodowe dla wyprowadzenia Criominal(West) ze zdań (9.3) do (9.10).
Łańcuch wsteczny, jak to opisaliśmy, jest wyraźnie algorytmem wyszukiwania w głąb. Oznacza to, że jego wymagania przestrzenne są liniowe w rozmiarze dowodu. Oznacza to również, że łańcuch wsteczny (w przeciwieństwie do łańcucha do przodu) ma problemy z powtarzającymi się stanami i niekompletnością. Pomimo tych ograniczeń łączenie wsteczne okazało się popularne i skuteczne w językach programowania logicznego.