Występuje sprawdź

W informatyce kontrola występowania jest częścią algorytmów unifikacji składni . Powoduje niepowodzenie unifikacji zmiennej V i struktury S , jeśli S zawiera V .

Zastosowanie w dowodzeniu twierdzeń

W dowodzeniu twierdzeń unifikacja bez sprawdzenia występowania może prowadzić do błędnego wnioskowania . Na przykład cel Prologu odniesie sukces, wiążąc X z odpowiednika we wszechświecie Jako inny przykład, bez sprawdzania występowania, można znaleźć dowód rozwiązania dla nie-twierdzenia : zaprzeczenie tego wzoru ma koniunkcyjną postać normalną , przy czym i oznaczają funkcję Skolema dla pierwszego i drugiego odpowiednio kwantyfikator egzystencjalny; i ( są unifikowalne bez sprawdzania, co daje odrzucającą pustą klauzulę.

Cykl po pominięciu występuje sprawdzanie

Racjonalne Ujednolicenie Drzewa

Implementacje Prologu zwykle pomijają sprawdzanie występowania ze względu na wydajność, co może prowadzić do kołowych struktur danych i pętli. występowania, złożoność najgorszego przypadku ujednolicenia terminu terminem zmniejszana z do ; w szczególnym, częstym przypadku unifikacji zmiennych terminów, czas wykonania kurczy się do .

Nowoczesne implementacje, oparte na Prologu II Colmerauera, wykorzystują racjonalne ujednolicenie drzewa, aby uniknąć pętli. Jednak trudno jest utrzymać liniowość czasu złożoności w obecności terminów cyklicznych. Przykłady, w których algorytm Colmerauersa staje się kwadratowy, można łatwo skonstruować, ale istnieją propozycje udoskonalenia.

Zobacz obraz przykładowego przebiegu algorytmu unifikacji podanego w Unification (informatyka)#A algorytm unifikacji , próbujący rozwiązać cel check ) ; zamiast tego zastosowanie reguły „wyeliminuj” prowadzi do wykresu cyklicznego (tj. składnika nieskończonego) w ostatnim kroku.

Ujednolicenie dźwięku

Implementacje ISO Prolog mają wbudowany predykat unify_with_occurs_check/2 dla ujednolicenia dźwięku, ale mogą swobodnie używać wadliwych lub nawet zapętlonych algorytmów, gdy ujednolicenie jest wywoływane w inny sposób, pod warunkiem, że algorytm działa poprawnie we wszystkich przypadkach, które „nie podlegają kontroli występowania” ( NSTO). Wbudowany acycle_term/1 służy do sprawdzania skończoności terminów.

Implementacje oferujące ujednolicenie dźwięku dla wszystkich unifikacji to Qu-Prolog i Strawberry Prolog oraz (opcjonalnie za pomocą flagi wykonawczej): XSB , SWI-Prolog , Tau Prolog i Scryer Prolog . Różnorodne optymalizacje mogą sprawić, że ujednolicenie dźwięku będzie wykonalne w typowych przypadkach.

Zobacz też

WP Weijland (1990). „Semantyka programów logicznych bez sprawdzania występowania” . Informatyka teoretyczna . 71 : 155–174. doi : 10.1016/0304-3975(90)90194-m .

Notatki