Basicamente, o Teorema de Herbrand fornece a base teórica para as técnicas de prova automática de teoremas na lógica de primeira ordem. Encontrar um procedimento geral de decisão para verificar a validade (ou inconsistência) de uma fórmula estava sendo usado há muito tempo. A primeira tentativa foi feita por Leibniz (1646-1716), novamente por Peano na virada do século e pela escola de Hilbert na década de 20. Aconteceu até que Church [1936] e Turing[1936] provassem que isso era impossível. Church e Turing independentemente mostraram que não existe um procedimento geral de decisão para verificar a validade de fórmulas da lógica de primeira ordem. No entanto, existem métodos de prova que podem verificar se uma fórmula é válida se realmente ela for válida. Para fórmulas inválidas, esses procedimentos em geral nunca terminarão. Na visão do resultado de Church e Turing, isso é o melhor que se pode ter para se obter um método de prova. Uma abordagem muito importante para a prova mecânica de teoremas foi dada por Herbrand em 1930. Por definição, uma fórmula válida é uma fórmula que é verdadeira sob todas as suas interpretações. Herbrand desenvolveu um algoritmo para encontrar uma interpretação que pode invalidar uma fórmula dada. No entanto, se uma certa fórmula é realmente válida, nenhuma dessas interpretações podem existir e seu algoritmo termina após um número finito de tentativas. O método de Herbrand é a base para muitos métodos modernos de prova automática. Gilmore [1960] foi uma das primeiras pessoas a implementar o método de Herbrand em um computador. Desde que uma fórmula é válida se e somente se sua negação for inconsistente, seu programa foi feito para encontrar a inconsistência da negação de uma fórmula dada. Durante a execução do programa, são geradas fórmulas proposicionais que são testadas sobre sua inconsistência. Se a negação de uma certa fórmula é inconsistente, o programa detecta esta situação. O programa de Gilmore foi usado para provar fórmulas bem simples, porém encontrou sérias dificuldades com muitas outras fórmulas da lógica de primeira ordem. Estudos minuciosos de seu algoritmo revelaram que seu método de testar a inconsistência de uma fórmula proposicional era ineficiente. O método de Gilmore foi melhorado por Davis e Putnam [1960], meses depois de seu resultado ser publicado. Entretanto, tal melhoria não foi suficiente. Muitas fórmula válidas da lógica de primeira ordem não poderiam ser provadas pelos computadores em um tempo razoável. A maior modificação foi feita por Robinson [1965], que introduziu o tão famoso princípio de resolução. O método de Resolução é muito mais eficiente que os anteriores. Desde o início do princípio de resolução, muitas melhorias foram sugeridas para aumentar sua eficiência. Definição 1 Seja, S - Um conjunto de cláusulas H - O Universo de Herbrand de S I - Uma interpretação de S sobre H I é uma Interpretação de Herbrand de S se satisfaz às seguintes condições: 1. I mapeia todas as constantes de S nelas próprias 2. Seja f um símbolo funcional n-ário e sejam h1, h2, .., hn elementos de H. Em I, a f é atribuída uma função que mapeia (h1, h2, .., hn) um elemento de Hn - a f(h1,h2,..,hn) - um elemento de H. Não existe restrição como relação à atribuição a cada símbolo predicado em S, de maneira que diferentes Interpretações de Herbrand podem existir, dependendo de tais diferentes atribuições. Desde que para as Interpretações de Herbrand a atribuição a constantes e símbolos funcionais é fixa, é possível identificar uma Interpretação de Herbrand com um subconjunto da Base de Herbrand. Assim sendo, daqui para frente, Uma Interpretação de Herbrand I de um conjunto de cláusulas S é qualquer subconjunto de BS, a Base de Herbrand. entendendo que, sob a interpretação I, a qualquer átomo q em BS é atribuído o valor verdade true, se q I, caso contrário é atribuído false. Com o objetivo de avaliar um dado conjunto de cláusulas com relação a uma dada Interpretação de Herbrand (I), as seguintes regras devem ser aplicadas: 1. A fórmula atômica ground A é true em I iff A I 2. Uma literal negada ground A é true em I iff A I 3. Uma cláusula ground L1 L2 … Ln é true em I iff pelo menos um literal Li é true em I 4. Em geral, uma cláusula C é true em I iff toda instância ground C de C é true em I (C é obtida substituindo toda ocorrência de uma variável em C por um termo de H. Ocorrências diferentes da mesma variável são substituídas pelo mesmo termo). 5. Um conjunto de cláusulas S é true em I iff cada cláusula de S é true em I. Um literal, cláusula ou conjunto de cláusulas é false em I iff não for true. Uma Interpretação de Herbrand é pois uma livre atribuição de valores verdade (true ou false) a todos os átomos da BS. Uma tal interpretação deve, portanto, atribuir também true ou false a todos os átomos em GP. Assim, os valores verdades desses átomos determinam os valores-verdade de todas as cláusulas em GP. Definição 2 Seja, S um conjunto de cláusulas H o Universo de Herbrand de S I uma Interpretação de Herbrand de S sobre H Se S é true em I, então I é um Modelo de Herbrand de S. Exemplo 1.1 Seja S={p(X) q(X)} um conjunto de cláusulas. Desde que S tem BS = {p(a),q(a)}, as possíveis 2|BS| Interpretações de Herbrand de S são: I0: I1: {p(a)} I2: {q(a} I3:{p(a),q(a)} De acordo com as regras de avaliação mostradas anteriormente, as interpretações I0, I1 e I3 são Modelos de Herbrand de S e I2 é simplesmente uma Interpretação de Herbrand de S. Exemplo 1.2 Seja S={p(X) q(X), m(Y) g(a), q(Z)} um conjunto de cláusulas. Desde que S tem BS = {p(a),q(a),m(a),g(a)}, as possíveis 2|BS| = 16 Interpretações de Herbrand de S são: {g(a)} {q(a),m(a)} {p(a),q(a),g(a)} {p(a)} {p(a),q(a)} {q(a),g(a)} {p(a),m(a),g(a)} {q(a)} {p(a),m(a)} {m(a),g(a)} {q(a),m(a),g(a)} {m(a)} {p(a),g(a)} {p(a),q(a),m(a)} {p(a),q(a),m(a),g(a)} As interpretações que são Modelos estão em negrito. Exemplo 1.3 Considere o conjunto de cláusulas P: likes(chris,X) if likes(X,logic) likes(bob, logic) O Universo de Herbrand de P é o conjunto {chris, bob, logic} e a instanciação ground de P, ie, GP é: likes(chris,chris) if likes(chris,logic) likes(chris,bob) if likes(bob,logic) likes(chris,logic) if likes(logic,logic) likes(bob, logic) que pode ser escrita, para maior facilidade de leitura como: CC if CL CB if BL CL if LL BL A Base de Herbrand é BP = {CC,CL,CB,LC,LL,LB,BC,BL,BB}. O conjunto {BL,CB} BP é assim uma Interpretação de Herbrand. Para essa interpretação, GP é reproduzido abaixo, com os valores verdade associados escritos em lugar de seus átomos: false if false true if true false if false true Com essa atribuição, todas as cláusulas de GP são verdade. Esta interpretação é portanto um Modelo de Herbrand para GP e, portanto, um Modelo de Herbrand de P. Para testar se um conjunto S de cláusulas é insatisfatível, é apenas necessário considerar interpretações sobre o Universo de Herbrand de S. Se S for false sob todas as interpretações sob o Universo de Herbrand de S, então S é insatisfatível. Conclusão Um dos aspectos mais importantes da Interpretação de Herbrand é que não é mais necessário considerar o universo de todas possíveis interpretações e usar os objetos de cada universo de toda a forma possível, dado que as Interpretações de Herbrand representam todas as outras. Todas as Interpretações de Herbrand compartilham o mesmo universo o Universo de Herbrand. Isso significa que é apenas necessário considerar instâncias obtidas substituindo variáveis por elementos do Universo de Herbrand. Com um pouco de cuidado é possível garantir que nenhuma das possíveis conjunções de instâncias de cláusulas é omitida no teste. Neste caso, o teste eventualmente irá descobrir se uma meta G é consequência lógica de um conjunto de cláusulas. Entretanto, a busca por todas as possíveis instâncias pode continuar para sempre. Os seguintes casos podem acontecer: 1. G é uma consequência lógica de S. Neste caso a busca irá eventualmente terminar com sucesso, i.e, uma contradição será encontrada. 2. G não é uma consequência lógica de S. Existem dois possíveis subcasos a serem considerados: 2.1 Todas as possíveis instâncias foram geradas sem que tenha sido encontrada uma contradição. Neste caso G não é uma consequência lógica de S. 2.2 Instâncias são geradas continuamente e uma contradição nunca é encontrada. Neste caso não existe certeza com relação a G ser ou não uma consequência lógica de S. Composição André Cardoso Cleiton Fernando Filipe Albuquerque José Neto Silas Almeida