A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Elsa Carvalho 203 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com.

Apresentações semelhantes


Apresentação em tema: "Elsa Carvalho 203 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com."— Transcrição da apresentação:

1 Elsa Carvalho 203 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com variáveis) No caso da resolução com variáveis temos, de uma maneira mais formal, considerando as seguintes cláusulas: C1: A(arg1)  A 1  A 2  …  A n C2: B  A(arg2)  B 1  …  B m se existir um unificador mais geral  para A tal que A(arg1)  = A(arg2)  então estas duas cláusulas podem ser premissas do passo de resolução, em que o resolvente é: C3: (B  A 1  A 2  …  A n  B 1  …  B m ) 

2 Elsa Carvalho 204 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com variáveis) C1:gosta(ana, X)  gosta(X, logica) C2:gosta(luis, Y)  divertido(Y)  = {X/luis, Y/logica} Assim obtemos o resolvente C3:gosta(ana,luis)  divertido(logica)

3 Elsa Carvalho 205 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com variáveis) O motivo pelo qual temos de utilizar o unificador mais geral é para manter a propriedade de completude da refutação (‘refutation-complete’), quando são impostos critérios de selecção para as premissas dos passos da mesma. Ou seja, termos a garantia de que conseguimos inferir a cláusula vazia para qualquer conjunto que seja inconsistente. Mais adiante estudaremos esses critérios que são utilizados para tornar mais eficiente a resolução.

4 Elsa Carvalho 206 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com variáveis) Por exemplo sabemos que o conjunto de cláusulas C1:  p(X) C2:p(Y)  q(Y) C3:q(a) é inconsistente, logo, pela propriedade de completude da refutação (‘refutation-complete’), teremos de conseguir derivar a cláusula vazia.

5 Elsa Carvalho 207 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com variáveis) Em princípio é possível construir um sistema de prova de teoremas que investigue todas as possibilidades de ‘resolver’ as cláusulas de forma a obter. No entanto tal sistema seria muito ineficiente. Assim, esses sistemas têm critérios de selecção para escolher as premissas e literais de cada passo da refutação. Neste caso teríamos a árvore C1 C2 R1:  q(Y) C3 {X/Y} R2: {Y/a}

6 Elsa Carvalho 208 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com variáveis) Se tivéssemos decidido utilizar outro unificador menos geral no primeiro passo da refutação, por exemplo {X/b, Y/b}, não conseguiríamos obter a cláusula vazia... e perderíamos a propriedade de completude da refutação.

7 Elsa Carvalho 209 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação em Lógica e Resolução Dado um programa P, uma interrogação tem a forma ?A 1 ...  A n que é lida em lógica como  (A 1 ...  A n ) Para responder à interrogação usando o programa P, aplica-se resolução para testar se P  {  (A 1 ...  A n )}├ e assim P╞  (A 1 ...  A n ) A resolução é um mecanismo construtivo em que são retornados os valores para as variáveis presentes na interrogação. Estes valores são gerados pelo processo de unificação.

8 Elsa Carvalho 210 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exemplo C1: append([ ], W, W)  C2: append([U|X],Y, [U|Z])  append(X, Y, Z) Interrogação (query) inicial Q1: ?append([V|L], R, [V,a]) Q1 só pode ser resolvido com a cláusula de programa C2, usando o unificador mais geral  = {U1/V, X1/L, Y1/R, Z1/[a]} onde as novas variáveis são resultado de uma mudança de variáveis (ou renomeação) das variáveis originais de C2.

9 Elsa Carvalho 211 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação em Lógica e Resolução Quando se vai utilizar uma cláusula de programa como premissa de um passo da resolução é primeiro aplicada uma mudança de variáveis à cláusula. Motivos Evitar a confusão quando usos repetidos da mesma cláusula resultassem em substituições distintas para as suas variáveis. as premissas de algum passo de resolução tivessem variáveis em comum.

10 Elsa Carvalho 212 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exemplo (cont.) Os restantes passos podem ser resumidos no grafo seguinte: Q1 C2 C1Q2 C2 Q3: ?append(X2, L2, []) C1

11 Elsa Carvalho 213 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exemplo (cont.) Uma forma mais compacta de representar a execução de Q1 é através de uma árvore de resolução (a que vamos chamar árvore SLD ou de pesquisa). Aqui apenas aparecem os resolventes e os u.m.g..  append([V|L], R, [V,a])  append(L, R, [a])  1 = {U1/V, X1/L, Y1/R, Z1/[a] }  append(X2, R, [ ])  4 = {X2/[], R/[], W2/[] }  2 = {L/[], R/[a], W1/[a] }  3 = {Y2/R, U2/a, Z2/[], L/[a|X2]}

12 Elsa Carvalho 214 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação em Lógica e Resolução Uma computação pode ser vista como um ramo da árvore. O ramo pode terminar com: sucesso(representado por ) insucesso finito (representado por ) insucesso infinito (representado por ∞ ) A resposta derivada é um subconjunto relevante da composição dos unificadores mais gerais utilizados durante os passos de resolução dessa computação. Isto é, é um subconjunto de  * =  1 °  2 °...  n

13 Elsa Carvalho 215 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação em Lógica e Resolução Neste exemplo temos duas computações e como tal  * =  1 °  2 (ramo da esquerda) e  * =  1 °  3 °  4 (ramo da direita) no entanto utilizamos apenas o subconjunto relevante de  * -  - que contribui para os valores finais das variáveis da interrogação inicial. No caso deste exemplo as variáveis são V, L e R e por isso, se considerarmos o ramo da esquerda, o subconjunto de  1 °  2 = {U1/V, X1/[], Y1/[a], Z1 /[a], L/[], R/[ a] } que nos interessa é  = { L/[], R/[ a]} (resposta derivada para o ramo esquerdo). Como foi dito atrás temos que P╞  ((append ([V|L], R, [V, a])  ) e aplicando a substituição P ╞ (  V)append([ V], [a], [V,a])

14 Elsa Carvalho 216 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação em Lógica e Resolução Temos ainda outra resposta derivada, uma vez que também chegámos à cláusula vazia através do ramo direito. Ao considerarmos o ramo da direita, o subconjunto de  1 °  3 °  4 = {U1/V, X1/[a], Y1/[], Z1 /[a], Y2/[], U2/a, Z2/[], L/[a], X2/[], R/[ ], W2/[] } que nos interessa é  = { L/[a], R/[ ]} (resposta derivada para o ramo direito). E assim temos P╞  ((append ([V|L], R, [V, a])  ) e aplicando a substituição P ╞ (  V)append([ V,a], [], [V,a])

15 Elsa Carvalho 217 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação em Lógica e Resolução Em geral (A 1 ...  A n )  pode não ser chã, como no exemplo anterior. Nesse caso a resposta mais geral é o fecho universal da fórmula que também é implicada por P. Assim, a nossa resposta final seria (  V)append([V,a], [], [V,a]), que representa toda a classe de tuplos na relação de ‘append’ que são a solução para a interrogação inicial. Desenhe a árvore de pesquisa para a interrogação ?append ([a,X], [Y], Z)


Carregar ppt "Elsa Carvalho 203 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com."

Apresentações semelhantes


Anúncios Google