L'analizzatore partizionerà l'insieme dei predicati del programma in base a condizioni sufficienti per la terminazione. Infatti, a causa della nota indecidibilità dell' halting problem, le tecniche effettive di decisione sulla terminazione dei programmi possono verificare solamente criteri sufficienti ma non necessari.
È auspicabile, per l'efficienza del metodo di negazione, che le tecnica usata identifichi una classe di programmi terminanti che approssimi il meglio possibile la classe dei programmi che effettivamente terminano.
Qui di seguito esporremo un criterio che verifica condizioni sufficienti per la terminazione di programmi normali stratificati nvi, left linear, i cui predicati non siano mutuamente ricorsivi (tale ultima ipotesi non è affatto restrittiva perchè con tecniche di unfolding ogni programma mutuamente ricorsivo può essere trasformato in un altro equivalente non mutuamente ricorsivo).
Dato un atomo e un modo , definiamo = { }.
Il criterio stabilisce se una query del tipo termina rispetto ad un modo . Per i nostri scopi, sarà necessario applicarlo a ogni query del tipo , , . In questo modo si otterrà la partizione di desiderata, in base alle proprietà di terminazione dei predicati in per goal totalmente non ground.
Il criterio testa la terminazione di una particolare query e non di un generico predicato essenzialmente per utilizzare le informazioni che si ottengono durante l'applicazione del criterio stesso.
Infatti, poiché la verifica di terminazione di una query richiederà in generale (cioè quando non si ha a che fare con clausole unitarie) l'applicazione ricorsiva del criterio, tale applicazione potrà essere più mirata nel senso di utilizzare le informazioni sugli argomenti della query, che saranno contenute nella sostituzione iniziale.
Dato il programma
l'applicazione del criterio alla query renderà sufficiente, una volta stabilito che la query termina per x=1, verificare la terminazione della query .
Il criterio consiste essenzialmente in una applicazione accorta della risoluzione SLDCNF, nel senso che si procede al passo successivo di risoluzione solo quando sono verificate condizioni sufficienti alla terminazione. In effetti i casi critici sono quelli di clausole ricorsive: in tal caso deve essere verificata una particolare condizione sulle norme degli argomenti del predicato che ricorre.
Una query del tipo termina, rispetto al modo , con risposte , dove è una sostituzione e è un insieme di vincoli (diseguaglianze soddisfacibili o primitive), nel caso in cui:
Una query del tipo termina senza risposta se è una diseguaglianza insoddisfacibile, altrimenti termina con risposte se termina con risposta e , , terminano con risposte .
Una clausola che unifica con se è della forma :
Dato un programma P e la query , il criterio applicato a tale query termina.
dim. (per induzione sulla lunghezza della query)
Il criterio applicato a termina perché è una disuguaglianza insoddisfacibile oppure perché termina applicato alle queries e .
Quindi è sufficiente dimostrare che il criterio termina se viene applicato alla query del tipo .
In questo caso termina:
Infatti se:
Dato un programma P, la query termina con risposte
tale query ha un albero di derivazione SLDCNF finito con sostituzioni di risposta e diseguaglianze primitive .
dim. (per induzione sulla struttura del programma e della query)
Consideriamo il caso in cui la query sia del tipo , con .
Se valgono le condizioni del criterio, si può avere che:
terminano, l'albero sarà
cioè finito.
Dimostriamo ora che una query del tipo termina, se valgono le condizioni del criterio;
e la risposta è .
con risposta .
e quindi le risposte saranno , .
Si ha che:
con risposte .
Procediamo per induzione sul valore della norma considerando separatamente il caso in cui vale
da quello in cui non vale. Per semplicità, consideriamo il caso di predicati con un solo argomento.
Nel primo caso se vale , con ground, si ha:
Nel secondo caso è utile la seguente osservazione:
se è non ground e vale , allora non è una variabile. Infatti se così fosse, non potrebbe valere la relazione , perché dovrebbe contenere un costruttore riflessivo, eventualità che contraddirebbe l'ipotesi che .
Quindi, può esser solo del tipo , con e i tale che e è non ground (altrimenti = ).
Quindi le variabili che compaiono in non influiscono sul valore della norma e perciò si può procedere come nel caso precedente, per induzione sul valore della norma.
La verifica della relazione sulle norme per tutti gli argomenti di una chiamata ricorsiva potrebbe sembrare una condizione troppo forte e si potrebbe pensare di limitarla solo alle posizioni di input. Il seguente esempio fa vedere che tale condizione è necessaria per mantenere la correttezza del criterio:
Considerando la definizione dei numeri pari data dalle clausole