La tecnica della negazione intensionale (NI) [BaMPT90,Man88] si prefigge lo scopo di superare i limiti computazionali della negazione come fallimento finito. Abbiamo visto infatti che la n.a.f. può essere usata solo come test e non può calcolare sostituzioni di risposta a goal negativi. L'obbiettivo principale della NI è quindi quello di ottenere una rappresentazione simmetrica della conoscenza positiva e negativa presente in un programma logico attraverso una trasformazione che consenta di rappresentare direttamente in modo intensionale l'informazione negativa che un programma logico contiene implicitamente.
La negazione intensionale realizza la trasformazione del programma P definendo per ogni predicato un nuovo predicato , inteso come il complemento di , che verrà utilizzato all'interno di interrogazioni laddove si vogliano calcolare valori per cui vale .
La chiamata al predicato calcolerà l'insieme di fallimento finito di , visto che in generale non si può ottenere una definizione che consenta di calcolare l'intero complemento di , il quale in generale è un insieme non effettivo.
La manipolazione di programmi con variabili locali, cioè con variabili che compaiono in atomi del corpo ma non nella testa, comporta la generazione di teorie non di Horn. Ad esempio una clausola della forma determina per la definizione che richiede un trattamento adeguato mediante una nuova forma di risoluzione (risoluzione SLDN [BMPT90]).
Poiché per ottenere informazione negativa da un programma logico è necessario fare riferimento ad una teoria derivata dal programma logico stesso, per i nostri scopi illustreremo una teoria che è una estensione propria del completamento, nel senso che estende la teoria dell'uguaglianza con l'assioma del dominio chiuso (DCA).
L'assioma DCA, imponendo che il dominio di un modello di ( ) sia formato da oggetti costruiti con l'interpretazione di costanti e funzioni nel linguaggio di P, consente di ottenere l'insieme dei termini che rappresentano il complemento di un termine non ristretto.
Un termine non ristretto è un termine nel quale non compaiono variabili ripetute.
Data una segnatura , DCA rispetto a è espresso da
Considerando = , l'assioma DCA si esprime come:
Si ha che l'insieme N dei numeri naturali è un modello per , mentre l'insieme non può esserlo, perché non è costruibile attraverso e .
L'operatore Not, dato un termine non ristretto , restituisce un insieme di termini, inteso come il complemento di rispetto a .
= , se x è una variabile;
= se
=
e
se f
, .
L'ultima regola contiene implicitamente la definizione dell'estensione di in grado di operare su ennuple di termini, ovvero
= e .
Considerando la segnatura , calcoliamo il complemento di :
Poiché
e =
si ha che
Fondamentale è l'ipotesi che i termini da complementare siano non ristretti, come è evidente dal seguente esempio:
Data la segnatura = si ha
mentre il complemento di f(x,x) è l'insieme .
In generale non si può rappresentare il complemento di un termine ristretto mediante un insieme finito di termini.
Il seguente teorema [BMPT90] assicura la correttezza dell'operatore Not.
Per definire i predicati , si ricava l'informazione negativa dal completamento del programma, come esemplificato dal seguente
Sia P il programma su
che definisce i numeri naturali pari.
Il suo completamento è:
consideriamo la negazione logica di entrambe le parti della definizione completata di p
che è equivalente a
che è equivalente a
che è equivalente a
che è equivalente a
distribuendo rispetto a
.
Poiché vale , per il teorema 3.4 si ha che
è equivalente a , dal momento che
è equivalente a
Quindi si ottiene
Unificando la congiunzione di formule del tipo
si ottengono le seguenti formule
perché e non sono unificabili;
;
Quindi possiamo interpretare come un nuovo predicato così definito:
che come ci si aspettava definisce i numeri naturali dispari.
L'idea illustrata nell'esempio precedente può essere formalizzata definendo due operatori, NegC e @. Il primo opera su una singola clausola e ne esplicita i potenziali contributi alla negazione del predicato di testa , il secondo mette insieme i contributi di ciascuna clausola per la definizione di .
I programmi logici considerati sono quelli left linear, definiti come i programmi che non contengono termini ristretti nelle teste delle clausole.
Sia C una clausola del tipo
tale che t è non ristretto ed ogni eventuale variabile locale compare in al più un letterale del corpo. Allora NegC(C) è il seguente insieme di regole:
L'operatore binario di combinazione @ è il seguente:
Siano ed le regole
dove e sono congiunzioni (eventualmente vuote) di letterali universali. Allora @ è la regola
se esiste , altrimenti è la regola vuota.
Quindi la tecnica di negazione intensionale può essere definita per mezzo dell'operatore Neg che, dato un programma logico, costruisce le definizioni di un predicato per ogni
Sia P un programma logico sul linguaggio e sia CL(p) l'insieme delle clausole di P il cui predicato di testa è . Allora
Riferendoci al programma dell'esempio 3.6 abbiamo:
Poiché le uniche applicazioni di @ che hanno successo sono
otteniamo per le regole
come nell'esempio 3.6.
Come già accennato in precedenza, per trattare i letterali quantificati universalmente viene introdotta una estensione della procedura di risoluzione SLD, detta SLDN.
Un goal del tipo , dove sono le variabili locali, viene computato in due passi:
La correttezza e la completezza della SLDN sono state provate rispetto al completamento , che costituisce la teoria di riferimento per la tecnica di trasformazione. Tali risultati si possono estendere al completamento standard grazie al seguente teorema:
Sia P un programma logico e un atomo. Le seguenti affermazioni sono equivalenti: