La negazione intensionale, come visto in precedenza, sintetizza, a partire dalle definizioni di un predicato , la definizione di un nuovo predicato che può essere usato per calcolare l'insieme di fallimento finito di .
La procedura di refutazione, dimostrata completa e corretta, ha il vantaggio, rispetto alla negazione come fallimento finito, di poter calcolare goal negativi non ground. D'altro canto, si è visto sperimentalmente che, sintetizzando , in alcuni casi il numero di clausole prodotte è eccessivamente elevato. Ciò è vero in particolare quando si trattano data base deduttivi, come si vede nel semplice esempio seguente:
Considerando la segnatura
, la negazione intensionale del fatto
La negazione costruttiva, come proposta da [Chan88], è una tecnica che permette di trattare goal aventi come sottogoal anche letterali negativi. È detta costruttiva perchè, a differenza della regola di negazione come fallimento finito, tali sottogoal possono essere trattati non solo come test, ma anche per calcolare valori.
Di tale tecnica è dimostrata la correttezza e la completezza solo per alberi di derivazione finiti; chiaramente, essendo basata sul calcolo e negazione delle risposte ai corrispondenti sottogoal positivi, si hanno problemi nel caso di alberi di derivazione infiniti.
La nostra proposta si prefigge di integrare i due metodi visti, cercando di ovviare ai difetti appena esposti. L'obbiettivo è, dato un programma P, sintetizzare per ogni predicato di P un nuovo predicato inteso come il complemento di , da usare quando nelle interrogazioni si vogliono calcolare valori per cui vale .
Poichè in generale l'insieme complemento di è un insieme non effettivo, la definizione di calcolerà la porzione computabile del complemento di , ovvero il fallimento finito di .