Nei paragrafi precedenti abbiamo visto quali sono i limiti di un sistema di programmazione logica che fa uso della regola di negazione come fallimento finito e come si cerchino altre tecniche per risolvere i problemi legati alla manipolazione di sottogoal negativi non necessariamente ground.
La Negazione costruttiva di Chan [Chan88,Chan89] si propone come una possibile soluzione a questo problema.
La NC sussume la regola di negazione come fallimento finito. Entrambe le regole hanno infatti come fondamento teorico la teoria del completamento di un programma logico, ma la NC formalizza un metodo per trattare sottogoal negativi non ground in termini della risoluzione SLDCNF che è un'estensione della risoluzione SLDNF.
Con la risoluzione SLDCNF i sottogoal negativi possono essere usati non solo come test ma anche per calcolare risposte come avviene per i sottogoal positivi; da qui il nome di negazione costruttiva.
L'idea di base è che la risposta ad un goal del tipo è semplicemente la negazione della risposta di . Come nella n.a.f. si fa uso dell'idea della subrefutazione ; infatti per valutare si parte con una subrefutazione che ha come top query .
Vedremo in seguito che è proprio questo il punto debole della NC, infatti se la valutazione della query dà luogo ad un albero di derivazione infinito, la procedura che andremo a esporre non può dare alcuna risposta al corrispondente sottogoal negativo.
Se la refutazione di non coinvolge la selezione di alcun letterale negativo, detta una sostituzione di risposta calcolata e sono le variabili in , riferendoci alla teoria del completamento possiamo scrivere:
se in non ci sono variabili abbiamo .
Se sono tutte le risposte alla query possiamo scrivere, sempre per la teoria del completamento:
Se non esistono risposte la parte destra è una disgiunzione vuota che è equivalente a , e cioè permette di dedurre . Se esiste una sola risposta equivalente a , la parte destra è equivalente a e ciò vuol dire che possiamo dedurre che è falso. La regola di Negazione costruttiva a questo punto è semplicemente:
cioè la negazione delle risposte di sono le risposte di .
Tale regola può essere applicata anche quando la refutazione di coinvolge la selezione di letterali negativi.
A questo proposito vediamo i seguenti esempi:
Consideriamo le query:
è l'unica risposta a . Quindi possiamo concludere che è la risposta alla query .
sotto il vincolo , la valutazione di da la sola risposta .
ha successo con unica risposta , ciò implica che ha risposta . Ora la valutazione di sotto il vincolo dà la risposta , .
Se il goal è e le due risposte a sono , e , abbiamo
usando la NC può essere sostituito dalla negazione della risposta di e il goal derivato è:
Trattare questo goal è troppo complicato, allora si cerca di riportare il goal in una forma normale.
Lavorando sulla parte destra di 3.1 possiamo ottenere le seguenti formule per
Vedremo in seguito che la normalizzazione delle risposte non è sempre così immediata, per esempio nel caso in cui le risposte contengono funzioni e variabili.