RESOLUÇÃO GERAL Com o objetivo de aplicar resolução a cláusulas contendo variáveis, é necessário encontrar uma substituição que possa ser aplicada à cláusulas pais que contenham literais complementares. Notação: representar uma cláusula por um conjunto de literais (com a disjunção entre as literais do conjunto subentendida). Sejam as cláusulas candidatas a serem pais dadas por {Li} e {Mi} e vamos assumir que as variáveis ocorrendo nessas duas cláusulas tenham sido "standardized apart". Suponhamos que {li} seja um subconjunto de {Li} e que {mi} seja um subconjunto de {Mi} tal que um "unificador mais geral" s existe para a união dos conjuntos {li} e {mi} (isto é {li} e {mi} unificam) Dizemos que as duas cláusulas {Li} e {Mi} resolvem que que a nova cláusula {{Li} {li}}s {{Mi} {mi}}s é o resolvente das duas cláusulas. Se duas cláusulas resolvem, elas podem ter mais do que um resolvente, porque pode existir mais de uma maneira de escolher {li} e {mi}. Em qualquer caso, pode existir no máximo um número finito de resolventes. C1: p(X,f(a)) p(X,f(Y)) q(Y) C2: p(Z,f(a)) q(Z) com {li} = {p(X,f(a))} e {mi} = {p(Z,f(a))} obtemos o resolvente: p(Z,f(Y)) q(Y) q(Z) com {li} = {p(X,f(a)),p(X,f(Y))} e {mi} = {p(Z,f(a))} obtemos o resolvente: q(a) q(Z) 1 C1 C2 R1 R2 R3 R4 p(X,f(a)) p(X,f(Y)) q(Y) p(Z,f(a)) q(Z) p(Z,f(Y)) q(Y) q(Z) q(Z) q(a) p(X,f(a)) p(X,f(Z)) p(Z,f(a)) p(Z,f(a)) q(a) q(Z) p(X,f(a)) p(Z,f(a)) p(X,f(a)) p(X,f(Y)) p(Z,f(a)) q(Y) q(Z) p(X,f(Y)) p(Z,f(a)) USANDO RESOLUÇÃO O interesse em prova de teorema não é limitado a aplicações matemáticas. Investigação de aplicações em recuperação da informação, raciocínio de senso comum e programação automática. Em um problema típico de prova de teorema, tem-se: S: conjunto de wffs a partir do qual deseja-se provar alguma meta W(wff). Sistemas baseados em resolução são projetados para a produção de provas por contradição ou refutação. Numa resolução por refutação, primeiro nega-se a wff meta e então adiciona-se a negação ao conjunto S. Esse conjunto expandido é então convertido em um conjunto de cláusuas e a resolução é usada para derivar a contradição, representada pela cláusula nil. Justificativa: Seja W uma wff que segue logicamente de um conjunto S de wffs. Por definição, toda interpretação que satisfaz S satisfaz W também. Nenhuma interpretação que satisfaz S pode satisfazer W e portanto, nenhuma interpretação pode satisfazer a união de S e {W}. Um conjunto de wffs que não pode ser satisfeito por nenhuma interpretação é chamado insatisfatível. Assim, se W segue logicamente de S, o conjunto S {W} é insatisfatível. Pode ser mostrado que se resolução for repetidamente aplicada a um conjunto de cláusulas insatisfatíveis, eventualmente a cláusula vazia, nil, será produzida. Assim, se W segue logicamente de S, então resolução erá eventualmente, produzir a cláusula vazia, a partir da representação clausal de S {W}. De maneira análoga, pode ser mostrado que, se a cláusula vazia é produzida a partir da representação clausal de S {W}, então W segue logicamente de S. 2 Exemplo: (1) (X)(r(X) l(X)) (2) (X)(d(X) l(X)) (3) (X)(d(X) i(X)) e que se queira provar (4) (X)(i(X) r(X)). O conjunto de cláusulas correspondente às expressões de (1) a (3) é: (1)r(X) l(X) (2)d(Y) l(Y) (3a) d(a) (3b) i(a) onde as variáveis foram padronizadas à parte e a é uma constante de Skolem. A negação do teorema a ser provado, convertido à forma clausal é: (4) i(Z) r(Y) A prova do teorema usando resolução por refutação envolve a geração de resolventes a partir do conjunto de cláusulas 13 e 4, adicionando esses resolventes ao conjunto e continuar até que a cláusula vazia seja produzida. Uma possível prova (existe mais do que uma) produz a seguinte seqüência de resolventes: (5) (6) (7) (8) r(a) l(a) d(a) nil (3b) & 4 5&1 6&2 7 & (3a) Lembrar que: usualmente existirão várias resoluções aplicadas. Isso, entretanto, não previne a aplicação da resolução apropriada, mesmo após a aplicação de algumas irrelevante. Suponha que se inicie com o conjunto S de cláusulas, chamado de conjunto base. O algoritmo básico para sistemas de produção por refutação pode então ser escrito como: 3 procedure resolution 1. CLAUSES S 2. until nil CLAUSES do begin 3.selecionar 2 cláusulas distintas de CLAUSES, Ci e Cj, que sejam resolvíveis 4. calcular um resolvente rij de ci e cj 5. CLAUSES conjunto obtido via adição de rij a CLAUSES end ESTRATÉGIAS DE CONTROLE PARA MÉTODOS DE RESOLUÇÃO A decisão de quais 2 cláusulas em CLAUSES resolver (3.) e qual resolução dessas cláusulas realizar (4.) são feitas pela estratégia de controle. Várias estratégias de controle para a seleção de cláusulas foram desenvolvidas para resolução. Com o objetivo de manter o controle de quais resoluções foram selecionadas e evitar duplicar esforços, é conveniente para a estratégia de controle usar uma estrutura chamada "grafo de derivação". Os nós de tal grafo são rotulados com cláusulas. Inicialmente existe um nó para cada uma das cláusulas do conjunto base. Quando duas cláusulas ci e cj produzem o resolvente rij, um novo nó é criado, rotulado rij, com arcos unindo-o aos nós ci e cj. Usando a terminologia de árvores, dizemos que ci e cj são os "pais"de rij e que rij é descendente de ci e cj. Uma resolução por refutação pode ser representada como uma árvore de refutação (dentro do grafo de derivação) tendo um nó raiz rotulado nil. A estratégia de controle busca pela refutação através do crescimento do grafo de derivação, até que a árvore seja produzida com o nó raiz rotulado pela cláusula nil. Uma estratégia de controle para um sistema de refutação é completa se o seu uso resulta em um procedimento que irá encontrar uma contradição (eventualmente) sempre onde existir uma. Em aplicações de AI, estratégias completas não são tão importantes quanto aquelas que encontram refutações eficientemente. 4 ESTRATÉGIA BREADTH-FIRST (LARGURA PRIMEIRO) Na estratégia breadth-first, todos os resolventes do primeiro nível são calculados primeiro, então os do segundo nível e assim por diante. Um resolvente do primeiro nível é obtido entre duas cláusulas do conjunto base; um resolvendo no i-ésimo nível é aquele cujo pai em nível mais profundo é um resolvente do nível (i-1). A estratégia breadth-first é completa mas grosseiramente ineficiente. i(Z) r(Z) i(a) i(Z) l(Z) r(a) l(a) r(X) l(X) d(a) l(a) i(Z) r(Z) d(Y) l(Y) l(a) r(Y) d(Y) i(Z) d(Z) d(a) r(a) i(a) nil ESTRATÉGIA CONJUNTO SUPORTE A refutação via conjunto suporte é aquela onde pelo menos um pai de cada resolvente é selecionado dentre as cláusulas que resultam da negação da wff meta ou de seus descendentes (o conjunto suporte). Pode ser mostrado que a refutação conjunto suporte existe sempre que qualquer refutação exsite e que, portanto, o conjunto suporte pode ser constituído como base de uma estratégia completa. Estratégias conjunto suporte são, usualmente, mais eficientes que aquelas "breadth-first". Comparando ambas figuras dá para verificar que o conjunto suporte produz menos cláusulas a cada nível, do que a resolução breadth-first irrestrita. 5 A estratégia do conjunto suporte resulta em crescimento mais demorado do conjunto de cláusulas e, assim, ajuda na moderação da explosão combinatória. Usualmente essa contenção de crescimento do conjunto de cláusulas mais do que compensa o fato que uma estratégia restritiva, tal como a do conjunto suporte, frequentemente aumenta a profundidade na qual a cláusula vazia é produzida primeiro. negação do goal i(Z) r(Z) i(a) r(X) l(X) r(a) i(Z) l(Z) l(a) i(Z) l(Z) d(a) i(a) d(Y) l(Y) d(a) l(a) d(a) d(a) nil árvore de resolução-refutação 6 ESTRATÉGIA DO INPUT LINEAR É aquela onde cada resolvente tem pelo menos um dos pais pertencentes ao conjunto básico (base set). i(a) r(a) l(a) i(Z) r(Z) r(X) l(X) i(Z) l(Z) l(a) d(Y) l(Y) i(Z) l(Z) i(Z) d(Z) d(a) l(a) i(Y) d(Y) r(a) i(a) nil Em níveis subsequentes, a estratégia do input linear reduz o número de cláusulas produzidas. A estratégia do input linear não é completa. Existem casos em que a refutação existe mas a estratégia não a encontra. Por exemplo , no seguinte caso: q(U) p(a) q(W) p(W) q(X) p(X) q(Y) p(Y) que é um conjunto claramente insatisfatível, como mostra a árvore de refutação a seguir (que poderia ter sido obtida via estratégia ancestralfiltrado - próxima estratégia). A forma de refutação input-linear exige que um dos pais de nil deve ser um elemento do conjunto base. No exemplo seguinte a cláusula nil nunca conseguirá ser obtida se essa exigência for satisfeita. Apesar da falta de completeza, a estratégia do input linesr é frequentemente usada devido à sua simplicidade e eficiência. 7 q(Y) p(Y) q(X) p(X) q(W) p(W) p(X) q(W) q(U) p(a) p(a) nil na estratégia linear um dos pais de nil deve estar no conjunto base cláusula da base Árvore de Refutação ESTRATÉGIA DO ANCESTRAL FILTRADO A forma de refutação do ancestral filtrado é aquela na qual cada resolvente tem um pai que está ou no conjunto base ou é um ancestral do outro pai. Essa estratégia é completa. Na figura anterior, a cláusula p(X) é usada como um "ancestral". Pode ser mostrado que a completeza da estratégia é preservada se os ancestrais que são usados são limitados a merges (merge é um resolvente que herda uma literal de cada pai, de tal maneira que esta literal é 'mergeada' em uma única, pelo mgu). ESTRATÉGIA DA PREFERÊNCIA POR UNITS Esta é uma modificação da estgratégia do conjunto-suporte, na qual, ao invés de preencher cada nível de maneira breadth-first, tenta-se selecionar 8 uma cláusula com uma única literal (chamada unit), como um dos pais na resolução. Toda a vez que "units" são usadas em resolução, os resolventes têm menos literais do que seus pais. Esse processo ajuda a focalizar a busca na direção da produção de uma cláusula vazia e, assim, aumenta a eficiência. A árvore de refutação a seguir é uma que pode ter sido produzida por uma estratégia de preferência por units. i(Z) r(X) i(a) r(X) l(X) r(a) d(Y) l(Y) l(a) d(a) d(a) nil COMBINAÇÃO DE ESTRATÉGIAS É possível combinar estratégias de controle. As estratégias não dizem sobre a ordem na qual as resoluções são realizadas. Uma ordem inapropriada não previne que se encontre a refutação. Este fato não significa, entretanto, que a ordem na resolução, não tenha efeito na eficiência do processo. Pelo contrário, uma ordem apropriada na realização das resoluções pode prevenir a geração de um grande número de cláusulas não necessárias. A estratégia de preferência por units é um exemplo de estratégia de ordenação. Outras estratégias baseadas no número de literais em uma cláusula e na complexidade dos termos em uma cláusula são também consideradas. A ordem na qual resoluções são realizadas é crucial à eficiência de sistemas de resolução 9