Prolog/Negação

Origem: Wikilivros, livros abertos por um mundo aberto.

Tipicamente, uma consulta é avaliada como falsa no caso de não estar presente nenhuma regra positiva ou fato que dê suporte ao termo proposto. Isso é chamado hipótese do mundo fechado; assume-se que tudo o que é importante saber está na base de dados, de modo que não existe um mundo exterior que pode possuir evidências desconhecidas. Em outras palavras, se um fato não é conhecido ser verdadeiro (ou falso), assume-se que ele é falso.

Uma regra como:

legal(X) :- \+ ilegal(X).

pode ser avaliada somente pela busca exaustiva de todas as coisas que são ilegais e comparando elas com X, e se nenhum fato ilegal for descoberto ser o mesmo que X, X é legal. Isso é chamado negação por falha. O operador prefixo \+/1 (muitos dialetos do Prolog possuem pré-definido o comando not/1) usado acima implementa a negação por falha em compiladores ISO Prolog.

Uma questão interessante é o que acontece se legal(X) for proposto como uma consulta:

  ?- legal(X).

Isto, em princípio, pegaria tudo que existe (e que não foi explicitamente declarado como ilegal) e mostraria. No entanto, esta consulta retorna No (ou seja: não sei).