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ę.
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 .