23
Elsa Carvalho Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) 1 Universidade da Madeira Departamento de Matemática Resolução SLD As refutações por resolução são ‘pesadas’ e ‘caras’, no caso geral. Com um conjunto inconsistente de cláusulas existirão, tipicamente, numerosas formas de derivar a cláusula vazia através da resolução. Podem existir muitas formas de escolher as premissas, enquanto que para cada escolha de premissas podem existir muitas maneiras de as ‘resolver’ de acordo com os vários literais disponíveis para um passo da resolução.

Resolução SLD

  • Upload
    dale

  • View
    95

  • Download
    2

Embed Size (px)

DESCRIPTION

Resolução SLD. As refutações por resolução são ‘pesadas’ e ‘caras’, no caso geral. Com um conjunto inconsistente de cláusulas existirão, tipicamente, numerosas formas de derivar a cláusula vazia através da resolução. - PowerPoint PPT Presentation

Citation preview

Page 1: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

1Universidade da Madeira

Departamento de Matemática

Resolução SLDAs refutações por resolução são ‘pesadas’ e ‘caras’, no caso geral.Com um conjunto inconsistente de cláusulas existirão, tipicamente, numerosas formas de derivar a cláusula vazia através da resolução.Podem existir muitas formas de escolher as premissas, enquanto que para cada escolha de premissas podem existir muitas maneiras de as ‘resolver’ de acordo com os vários literais disponíveis para um passo da resolução.

Page 2: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

2Universidade da Madeira

Departamento de Matemática

Resolução SLDNo entanto, em certos fragmentos, podemos definir procedimentos de refutação eficientes.

É o caso das cláusulas de Horn:

q p1, ..., pn cláusula de programa p1, ..., pn objectivo

em que

SLD: D de definidasPrograma é um conjunto (finito) de cláusulas definidas (cláusulas de programa).

Page 3: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

3Universidade da Madeira

Departamento de Matemática

Resolução SLDSLD: L de linearCada passo de resolução (aplicação da regra de inferência) usa como premissa (cláusula central) o resolvente mais recente.

Partindo de um objectivo e um programa, uma derivação (S)LD só gera objectivos como resolventes.ProvaNote-se que, em cada passo, sendo a resolução linear, uma das premissas é um objectivo (o resolvente anterior ou a interrogação inicial) e que os objectivos só admitem como segunda premissa uma cláusula de programa. Isto é, num passo de resolução (S)LD a cláusula central é um objectivo e a outra premissa (cláusula lateral) é uma das cláusulas do programa. Ora o resolvente de um objectivo e de uma cláusula de programa é ainda um objectivo.

Page 4: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

4Universidade da Madeira

Departamento de Matemática

Resolução SLDSLD: S de selecçãoRegra de computação: selecciona, em cada passo, a fórmula atómica, do objectivo, que vai ser eliminada.

Um objectivo diz-se derivável de um programa P e de um objectivo G via uma regra de computação S quando é o resolvente de um passo de resolução, tendo como premissas cP e G, e a fórmula eliminada é S(G).

Quer dizer, se G for p1, ..., pk, ..., pm, tal que pk=S(G), e c for q q1, ..., qn (o que exige que pk e q sejam unificáveis) o resolvente é

(p1, ..., pk-1,q1, ..., qn, pk+1, ..., pm )

em que é um U.M.G de {pk, q}.

Page 5: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

5Universidade da Madeira

Departamento de Matemática

Resolução SLDUma refutação SLD para P e G0 via S é uma derivação SLD para P e G0 via S que termina com (derivação bem sucedida).

A resolução mantém a propriedade de ‘refutation complete’ com a restrição SLD. Mais do que isso permite a derivação de todas as respostas distintas à interrogação inicial seja qual for a regra de computação escolhida. Esta propriedade é conhecida como a independência da regra de computação.

Page 6: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

6Universidade da Madeira

Departamento de Matemática

ExemploConside-se a seguinte interrogação e o programa finito

Q1:?avo(amelia, Z)

C1:avo(X,Z) progenitor(X, Y), progenitor(Y,Z)C2:progenitor(amelia, jose)C3:progenitor(jose, luis)C4:progenitor(jose, miguel)

Construa as árvores em que a) não utiliza regra de computaçãob) selecciona o literal mais à esquerda para efectuar resoluçãoc) selecciona o literal mais à direita para efectuar resolução

Page 7: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

7Universidade da Madeira

Departamento de Matemática

ExemploNote-se que o primeiro caso é redundante, pois a mesma resposta é computada mais do que uma vez. As outras duas árvores utilizam resolução SLD. Em ambos os casos obtemos o conjunto completo de respostas possíveis:

{avo(amelia, luis), avo(amelia,miguel)}de acordo com a independência da regra de computação.

Page 8: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

8Universidade da Madeira

Departamento de Matemática

Resolução SLDUma árvore SLD (computação) para um programa P e um objectivo G via uma regra de computação S define-se de seguinte modo:

a sua raiz é Gcada nó tem um filho para cada um dos objectivos deriváveis de P via S (um filho por cada uma das cláusulas do programa cuja cabeça pode ser unificada com a fórmula do objectivo seleccionada por S).

Assim temos que:cada ramo da árvore é uma derivação para P e G via S. um ramo finito com folha (sucesso) indica uma derivação bem sucedida (refutação).um ramo finito sem folha indica uma derivação falhada (completa-se com a folha de insucesso finito).podem existir ramos infinitos!

Page 9: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

9Universidade da Madeira

Departamento de Matemática

Resolução SLDPodemos voltar a enunciar a propriedade de independência da regra de computação em termos das árvores SLD:

duas árvores SLD para o mesmo programa e objectivo, mas via regras de computação diferentes, têm o mesmo número de ramos bem sucedidos e calculam as mesmas respostas.

As árvores podem ter formas muito distintas, diferindo em particular nos ramos falhados ou infinitos.

Page 10: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

10Universidade da Madeira

Departamento de Matemática

ExemploDinastia_1

C1: ante(X,Z) pai(X, Y), ante(Y,Z)C2: ante(X,Z) pai(X, Z)C3: pai(joaoII, afonsoV) C4: pai(afonsoV, duarte)

Q1: ante(joaoII, Q) (quem são os antecessores de joaoII?)

Page 11: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

11Universidade da Madeira

Departamento de Matemática

Exemplo (cont.)

Selecção do primeiro ante(joaoII, Q)

pai(joaoII, Y1), ante(Y1, Q) pai(joaoII, Q)

ante(afonsoV, Q)

pai(afonsoV, Y2), ante(Y2, Q) pai(afonsoV, Q)

{Q/afonsoV}

{Q/duarte}

pai(duarte, Y3), ante(Y3, Q) pai(duarte, Q)

ante(duarte, Q)

Page 12: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

12Universidade da Madeira

Departamento de Matemática

Exemplo (cont.)

Selecção do último ante(joaoII, Q)

pai(joaoII, Y1), ante(Y1, Q) pai(joaoII, Q)

pai(joaoII, Y1), pai(Y1, Y2), ante(Y2, Q) pai(joaoII, Y1), pai(Y1, Q){Q/afonsoV}

pai(joaoII, afonsoV) pai(joaoII, joaoII)

{Q/duarte}

pai(joaoII, Y1), pai(Y1, Y2), pai(Y2, Q)

pai(joaoII, Y1), pai(Y1, joaoII) pai(joaoII, Y1), pai(Y1, afonsoV)

pai(joaoII, joaoII)

Page 13: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

13Universidade da Madeira

Departamento de Matemática

Estratégia de PesquisaFinalidade:Determinar a existência de um ramo bem sucedido (refutação). Possivelmente, determinar todas as respostas calculáveis (uma por cada ramo bem sucedido).

Questão:Que estratégia usar para explorar a árvore? (Regra de Pesquisa)Como construir a árvore?

A necessidade de uma tal estratégia é característica do formalismos relacionais (existência de mais de uma resposta) em oposição aos formalismos funcionais.

Page 14: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

14Universidade da Madeira

Departamento de Matemática

Estratégia de PesquisaExecução Sequencial Descendente, em Profundidade, com Retrocesso

Relativamente a cada nó, atribui-se uma prioridade a cada um dos seus filhos (atribuir uma prioridade a cada uma das cláusulas do programa cuja cabeça pode ser unificada com a fórmula do objectivo seleccionada pela regra de computação).

A execução começa com a geração da raiz.

Encontrando-se o controlo num nó, gera-se o filho de maior prioridade entre os que ainda não foram gerados e passa-se-lhe o controlo.

Se não houver filhos, ou se já tiverem sido todos gerados, então o controlo é passado ao ascendente mais próximo que ainda tem filhos por gerar. Se tal ascendente não existe, é porque a árvore já foi totalmente gerada, terminando-se então a execução.

Page 15: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

15Universidade da Madeira

Departamento de Matemática

Estratégia de PesquisaEsta é a estratégia seguida pelo Prolog, sendo a prioridade determinada pela ordem das cláusulas no programa - estratégia padrão.

No nosso exemplo o Prolog teria gerado a primeira árvore (se seguirmos a convenção habitual de apresentar as computações da esquerda para a direita ao longo da página de acordo com a ordem cronológica com que são geradas).

Page 16: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

16Universidade da Madeira

Departamento de Matemática

Estratégia de PesquisaExecução Descendente, em LarguraTodos os nós de uma geração são gerados antes de passar à geração seguinte (sendo P finito, cada geração é finita).

Se a árvore é finita, a escolha da estratégia de pesquisa é inconsequente (apenas a ordem das respostas varia).A pesquisa em profundidade optimiza a utilização de memória. No entanto, se a árvore possui um ramo infinito, a execução nunca sai desse ramo, e as respostas calculáveis nos outros ramos não serão geradas (inadequação).A pesquisa em largura garante que cada resposta calculável é gerada em tempo finito (se bem que a pesquisa numa árvore infinita se prolongaria indefinidamente). No entanto exige demasiada utilização de memória.

Page 17: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

17Universidade da Madeira

Departamento de Matemática

Regra de Computação e Regra de PesquisaPROLOG - Regra de ComputaçãoEscolha do primeiro literal do objectivo.PROLOG - Regra de PesquisaDescendente, em profundidade, escolhendo as cláusulas do programa de acordo com a ordem pela qual ocorrem no programa.

Uma vez fixadas, as regras de computação e de pesquisa permitem escolher, entre programas logicamente equivalentes, os que têm uma execução mais eficiente fazendo variar a ordem dos predicados no corpo das cláusulas, e a das cláusulas no corpo do programa.É neste sentido que se programa em PROLOG (programação vs. representação).

Page 18: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

18Universidade da Madeira

Departamento de Matemática

Regra de Computação e Regra de PesquisaA Ordem das Cláusulas determina o percurso de construção.

Pode, por exemplo, comparar-se o percurso de construção da árvore de pesquisa para o objectivo

ante(joaoII, Q)

e o programa

Dinastia_2ante(X,Z) pai(X, Z)ante(X,Z) pai(X, Y), ante(Y,Z)pai(joaoII, afonsoV) pai(afonsoV, duarte)

com o caso anterior (Dinastia_1: ordem inversa das cláusulas para o procedimento ante)

Page 19: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

19Universidade da Madeira

Departamento de Matemática

ante(joaoII, Q)

pai(joaoII, Q)

{Q/afonsoV}

pai(joaoII, Y1), ante(Y1, Q)

ante(afonsoV, Q)

pai(afonsoV, Q)

{Q/duarte}

pai(afonsoV, Y2), ante(Y2, Q)

pai(duarte, Q)

ante(duarte, Q)

pai(duarte, Y3), ante(Y3, Q)

Regra de Computação e Regra de Pesquisa

Page 20: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

20Universidade da Madeira

Departamento de Matemática

Regra de Computação e Regra de PesquisaA Ordem dos Predicados determina a forma da árvore.

Pode, por exemplo, comparar-se o percurso de construção da árvore de pesquisa para o objectivo

ante(joaoII, Q)

e o programa

Dinastia_3ante(X,Z) pai(X, Z)ante(X,Z) ante(Y,Z), pai(X, Y)pai(joaoII, afonsoV) pai(afonsoV, duarte)

com o caso anterior (Dinastia_2: ordem inversa dos predicados para a cláusula recursiva)

Page 21: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

21Universidade da Madeira

Departamento de Matemática

Regra de Computação e Regra de Pesquisa

ante(joaoII, Q)

pai(joaoII, Q)

{Q/afonsoV}

ante(Y1, Q), pai(joaoII, Y1)

pai(Y1, Q), pai(joaoII, Y1)

pai(joaoII, afonsoV) pai(joaoII, joaoII)

{Q/duarte}

ante(Y2, Q), pai(Y1, Y2), pai(joaoII, Y1)

∞ pai(Y2, Q), pai(Y1, Y2), pai(joaoII, Y1)

pai(Y1, joaoII), pai(joaoII, Y1) pai(Y1, afonsoV), pai(joaoII, Y1)

pai(joaoII, joaoII)

Page 22: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

22Universidade da Madeira

Departamento de Matemática

Regra de Computação e Regra de Pesquisa

Que aconteceria se a ordem das cláusulas do procedimento ante fosse trocada? (Dinastia_4)

Num programa recursivo, a base deve estar antes do passo!

Podemos ainda concluir que a árvore originada por Dinastia_2 é a mais simples (juntamente com Dinastia_1 para este objectivo). Esta comparação remete-nos para uma regra a utilizar aquando da resolução de problemas:

é normalmente melhor tentar a ideia mais simples primeiro!

Page 23: Resolução SLD

Elsa Carvalho

Programação em Lógica e Funcional (2000/01)(Actualizado em 2004/05)

23Universidade da Madeira

Departamento de Matemática

Regra de Computação e Regra de Pesquisa

No nosso caso, todas as versões da relação ante(cessor) são baseadas em 2 ideias:

a ideia mais simples é verificar se os dois argumentos da relação satisfazem a relação de pai.a ideia mais complicada é descobrir alguém entre as duas pessoas (alguém que esteja relacionado com elas através da relação de pai e antecessor)

No caso de Dinastia_2 as ideias mais simples são resolvidas em primeiro lugar.

No caso de Dinastia_4 tenta-se sempre resolver as ideias mais complicadas em primeiro lugar.