• Nenhum resultado encontrado

Prof. Dr. Silvio do Lago Pereira

N/A
N/A
Protected

Academic year: 2022

Share "Prof. Dr. Silvio do Lago Pereira"

Copied!
22
0
0

Texto

(1)

Raciocínio Automatizado

Prof. Dr. Silvio do Lago Pereira

Departamento de Tecnologia da Informação

Faculdade de Tecnologia de São Paulo

(2)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 2

Introdução

SLD-refutação é um procedimento para raciocínio automatizado que apresenta as seguintes características:

restringe-se à uma classe de fórmulas denominadas cláusulas de Horn

usa um mecanismo de prova por refutação, que combina unificação e resolução usa uma estratégia de busca em profundidade para controlar as inferências introduz o conceito de predicados computáveis (ou predefinidos no sistema) introduz o conceito de negação por falha finita

Raciocínio automatizado Raciocínio automatizado

simula raciocínio lógico por meio de processos computacionais

simula raciocínio lógico por meio de processos computacionais

(3)

Inferência com cláusulas de Horn

Tipos de cláusulas:

Fato

...

: ϕ ϕ ϕ ϕ ← ← ← ←

Regra

...

: ϕ ϕ ϕ ϕ ← ← ← ϕ ← ϕ ϕ ϕ

1

, ..., ϕ ϕ ϕ ϕ

n

Consulta

...

: ← ← ← ← ϕ ϕ ϕ ϕ

1

, ..., ϕ ϕ ϕ ϕ

n

Contradição

...

: ← ← ← ←

Cláusulas de Horn Cláusulas de Horn

São fórmulas da forma ϕ

ϕ ϕ

ϕ ← ← ← ← ϕ ϕ ϕ ϕ

1

, ..., ϕ ϕ ϕ ϕ

n

para n≥0, onde ϕ é uma conclusão e ϕ

1

, ..., ϕ

n

são premissas (condições) São fórmulas da forma

ϕ ϕ ϕ

ϕ ← ← ← ← ϕ ϕ ϕ ϕ

1

, ..., ϕ ϕ ϕ ϕ

n

para n≥0, onde ϕ é uma conclusão e ϕ

1

, ..., ϕ

n

são premissas (condições)

(4)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 4

Inferência com cláusulas de Horn

Inferências com cláusulas de Horn são efetuadas sempre entre:

um fato e uma consulta α

α α

α

0000

← ← ← ←

← ← ←

← β β β β

1111

, , β , , β β β

2222

, , , , … … … …, , , , β β β β

nnnn

← ←

← β β β β

2222

, , , , … … … …, , , , β β β β

nnnn

uma regra e uma consulta α

α α

α

0000

← ← ← ← α α α α

1111

, , α , , α α α

2222

, , , , … … …, … , , , α α α α

mmmm

← ←

← β β β β

1111

, , β , , β β β

2222

, , , , … … … …, , , , β β β β

nnnn

← ←

← α α α α

1111

, , α , , α α α

2222

, , … , , … … …, , , , α α α α

mmmm

, , , , β β β β

2222

, ..., , ..., β , ..., , ..., β β β

nnnn

O resultado de uma inferência é uma nova consulta ou uma contradição!

O resultado de uma inferência é uma nova consulta ou uma contradição!

a unificação de α α α α

0

e β β β β

1

tem efeito colateral no valor dos demais literais

(i.e., na nova consulta)

(5)

Inferência com cláusulas de Horn

Exemplo 1 – inferência entre fato e consulta Exemplo 1 – inferência entre fato e consulta

pai(

pai(

pai(

pai(adao adao adao adao, , , ,abel abel abel abel) ) ) ) ← ← ← ←

← pai( pai( pai( pai(adao adao adao adao,Y) ,Y) ,Y) ,Y), , , , pai(Y,Z) pai(Y,Z) pai(Y,Z) pai(Y,Z)

← pai( pai( pai( pai(abel abel abel abel,Z) ,Z) ,Z) ,Z) {Y= {Y= {Y= {Y=abel abel abel abel} } } } pai(

pai(

pai(

pai(adao adao adao adao, , , ,abel abel abel abel) ) ) ) ← ← ← ←

← pai( pai( pai( pai(adao adao adao adao,Y) ,Y) ,Y) ,Y), , , , pai(Y,Z) pai(Y,Z) pai(Y,Z) pai(Y,Z)

← pai( pai( pai( pai(abel abel abel abel,Z) ,Z) ,Z) ,Z) {Y= {Y= {Y= {Y=abel abel abel abel} } } }

Exemplo 2 – inferência entre regra e consulta Exemplo 2 – inferência entre regra e consulta

avo(X,Z) avo(X,Z) avo(X,Z)

avo(X,Z) ← ← ← ← pai(X,Y) pai(X,Y) pai(X,Y) pai(X,Y), , , , pai(Y,Z) pai(Y,Z) pai(Y,Z) pai(Y,Z)

← avo( avo( avo( avo(adao adao adao adao,A) ,A) ,A) ,A), , , , pai(A,B) pai(A,B) pai(A,B) pai(A,B)

← ←

← ← pai( pai( pai( pai(adao adao adao adao,Y) ,Y) ,Y) ,Y), , , , pai(Y,A) pai(Y,A) pai(Y,A) pai(Y,A), , , , pai(A,B) pai(A,B) pai(A,B) pai(A,B) {X= {X= {X= {X=adao adao adao adao, Z=A} , Z=A} , Z=A} , Z=A}

avo(X,Z) avo(X,Z) avo(X,Z)

avo(X,Z) ← ← ← ← pai(X,Y) pai(X,Y) pai(X,Y) pai(X,Y), , , , pai(Y,Z) pai(Y,Z) pai(Y,Z) pai(Y,Z)

← avo( avo( avo( avo(adao adao adao adao,A) ,A) ,A) ,A), , , , pai(A,B) pai(A,B) pai(A,B) pai(A,B)

← ←

← ← pai( pai( pai( pai(adao adao adao adao,Y) ,Y) ,Y) ,Y), , , , pai(Y,A) pai(Y,A) pai(Y,A) pai(Y,A), , , , pai(A,B) pai(A,B) pai(A,B) pai(A,B) {X= {X= {X= {X=adao adao adao adao, Z=A} , Z=A} , Z=A} , Z=A}

(6)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 6

SLD-refutação

Programa lógico 1 – O que é saudável?

Programa lógico 1 – O que é saudável?

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(7)

SLD-refutação

Programa lógico 1 – O que é saudável?

Programa lógico 1 – O que é saudável?

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(8)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 8

SLD-refutação

Programa lógico 1 – O que é saudável?

Programa lógico 1 – O que é saudável?

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(9)

SLD-refutação

Programa lógico 1 – O que é saudável?

Programa lógico 1 – O que é saudável?

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(10)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 10

SLD-refutação

Programa lógico 1 – O que é saudável?

Programa lógico 1 – O que é saudável?

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(1) (1) (1)

(1) bebe(bebe(zebebe(bebe(zeze,pinga) ze,pinga) ,pinga) ,pinga) ←←←←

(2) (2) (2)

(2) bebe(mane,bebe(mane,aguabebe(mane,bebe(mane,aguaaguaagua) ) ) ) ←←←←

(3)(3)

(3)(3) vivo(mane) vivo(mane) ←vivo(mane) vivo(mane) ←←←

(4) (4) (4)

(4) saudavelsaudavel(X) saudavelsaudavel(X) (X) (X) ←←←← bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)bebe(Y,X), vivo(Y)

(11)

SLD-refutação

Programa lógico 2 – Ana fala que idioma?

Programa lógico 2 – Ana fala que idioma?

(1) (1) (1)

(1) nasceu(nasceu(ananasceu(nasceu(anaanaana,,,,brasilbrasilbrasilbrasil) ) ) ←) ←←←

(2) (2) (2)

(2) nasceu(nasceu(yvesnasceu(nasceu(yvesyvesyves,franca) ,franca) ,franca) ,franca) ←←←←

(3)(3)

(3)(3) idioma(idioma(brasilidioma(idioma(brasilbrasilbrasil,,,portugues,portuguesportuguesportugues) ) ) ) ←←←←

(4) (4) (4)

(4) idioma(franca,idioma(franca,francesidioma(franca,idioma(franca,francesfrancesfrances) ) ) ←) ←←←

(5)(5)

(5)(5) estudou(estudou(anaestudou(estudou(anaanaana,,,,francesfrancesfrances) frances) ) ) ←←←←

(6) (6) (6)

(6) fala(A,C) fala(A,C) ←fala(A,C) fala(A,C) ←←← nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)

(7) (7) (7)

(7) fala(D,E) fala(D,E) ←fala(D,E) fala(D,E) ←←← estudou(D,E)estudou(D,E)estudou(D,E)estudou(D,E)

(1) (1) (1)

(1) nasceu(nasceu(ananasceu(nasceu(anaanaana,,,,brasilbrasilbrasilbrasil) ) ) ←) ←←←

(2) (2) (2)

(2) nasceu(nasceu(yvesnasceu(nasceu(yvesyvesyves,franca) ,franca) ,franca) ,franca) ←←←←

(3)(3)

(3)(3) idioma(idioma(brasilidioma(idioma(brasilbrasilbrasil,,,portugues,portuguesportuguesportugues) ) ) ) ←←←←

(4) (4) (4)

(4) idioma(franca,idioma(franca,francesidioma(franca,idioma(franca,francesfrancesfrances) ) ) ←) ←←←

(5)(5)

(5)(5) estudou(estudou(anaestudou(estudou(anaanaana,,,,francesfrancesfrances) frances) ) ) ←←←←

(6) (6) (6)

(6) fala(A,C) fala(A,C) ←fala(A,C) fala(A,C) ←←← nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)

(7) (7) (7)

(7) fala(D,E) fala(D,E) ←fala(D,E) fala(D,E) ←←← estudou(D,E)estudou(D,E)estudou(D,E)estudou(D,E)

(12)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 12

SLD-refutação

Programa lógico 2 – Yves fala que idioma?

Programa lógico 2 – Yves fala que idioma?

(1) (1) (1)

(1) nasceu(nasceu(ananasceu(nasceu(anaanaana,,,,brasilbrasilbrasilbrasil) ) ) ←) ←←←

(2) (2) (2)

(2) nasceu(nasceu(yvesnasceu(nasceu(yvesyvesyves,franca) ,franca) ,franca) ,franca) ←←←←

(3)(3)

(3)(3) idioma(idioma(brasilidioma(idioma(brasilbrasilbrasil,,,portugues,portuguesportuguesportugues) ) ) ) ←←←←

(4) (4) (4)

(4) idioma(franca,idioma(franca,francesidioma(franca,idioma(franca,francesfrancesfrances) ) ) ←) ←←←

(5)(5)

(5)(5) estudou(estudou(anaestudou(estudou(anaanaana,,,,francesfrancesfrances) frances) ) ) ←←←←

(6) (6) (6)

(6) fala(A,C) fala(A,C) ←fala(A,C) fala(A,C) ←←← nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)

(7) (7) (7)

(7) fala(D,E) fala(D,E) ←fala(D,E) fala(D,E) ←←← estudou(D,E)estudou(D,E)estudou(D,E)estudou(D,E)

(1) (1) (1)

(1) nasceu(nasceu(ananasceu(nasceu(anaanaana,,,,brasilbrasilbrasilbrasil) ) ) ←) ←←←

(2) (2) (2)

(2) nasceu(nasceu(yvesnasceu(nasceu(yvesyvesyves,franca) ,franca) ,franca) ,franca) ←←←←

(3)(3)

(3)(3) idioma(idioma(brasilidioma(idioma(brasilbrasilbrasil,,,portugues,portuguesportuguesportugues) ) ) ) ←←←←

(4) (4) (4)

(4) idioma(franca,idioma(franca,francesidioma(franca,idioma(franca,francesfrancesfrances) ) ) ←) ←←←

(5)(5)

(5)(5) estudou(estudou(anaestudou(estudou(anaanaana,,,,francesfrancesfrances) frances) ) ) ←←←←

(6) (6) (6)

(6) fala(A,C) fala(A,C) ←fala(A,C) fala(A,C) ←←← nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)nasceu(A,B), idioma(B,C)

(7) (7) (7)

(7) fala(D,E) fala(D,E) ←fala(D,E) fala(D,E) ←←← estudou(D,E)estudou(D,E)estudou(D,E)estudou(D,E)

(13)

SLD-refutação

Programa lógico 3 Programa lógico 3

(1) (1) (1)

(1) gosta(gosta(arygosta(gosta(aryaryary,,,eva,evaevaeva) ) ) ←) ←←←

(2) (2) (2)

(2) gosta(gosta(ivogosta(gosta(ivoivoivo,ana) ,ana) ,ana) ←,ana) ←←←

(3)(3)

(3)(3) gosta(gosta(ivogosta(gosta(ivoivoivo,,,eva,evaevaeva) ) ) ←) ←←←

(4) (4) (4)

(4) gosta(gosta(evagosta(gosta(evaevaeva,,,ary,aryaryary) ) ) ←) ←←←

(1) (1) (1)

(1) gosta(gosta(arygosta(gosta(aryaryary,,,eva,evaevaeva) ) ) ←) ←←←

(2) (2) (2)

(2) gosta(gosta(ivogosta(gosta(ivoivoivo,ana) ,ana) ,ana) ←,ana) ←←←

(3)(3)

(3)(3) gosta(gosta(ivogosta(gosta(ivoivoivo,,,eva,evaevaeva) ) ) ←) ←←←

(4) (4) (4)

(4) gosta(gosta(evagosta(gosta(evaevaeva,,,ary,aryaryary) ) ) ←) ←←←

Exercício 1

Em Prolog, o operador ‘← ← ←’ é omitido nas cláusulas do tipo fato e substituído por ←

‘: : : :- - - -’ nas cláusulas do tipo regra. Ademais, toda cláusula deve ser finalizada com

‘. . . .’. Usando esta convenção, codifique o programa a seguir em Prolog e faça as seguintes consultas:

Eva namora com Ary?

Ivo namora com Ana?

Ary namora com quem?

(14)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 14

SLD-refutação

Exercício 2

Em Prolog, o predicado predefinido trace/0 trace/0 trace/0 trace/0 permite rastrear o raciocínio feito pelo motor de inferência do sistema, ao responder a uma consulta.

Usando este predicado para rastrear as consultas a seguir e desenhe a árvore de refutação correspondente:

? ?

? ?- - - - namora( namora( namora(eva namora( eva eva eva, , ,ary , ary ary). ary ). ). ).

?

?

?

?- - - - namora( namora( namora(ivo namora( ivo ivo ivo,ana). ,ana). ,ana). ,ana).

? ?

? ?- - - - namora( namora( namora(ary namora( ary ary ary,Q). ,Q). ,Q). ,Q).

(15)

SLD-refutação

Programa lógico 4 Programa lógico 4

(1) (1) (1)

(1)

pai(adão, pai(adão, pai(adão, pai(adão,caim caim caim caim) ) ) ← )

←←← (2)

(2) (2)

(2)

pai(adão, pai(adão, pai(adão, pai(adão,abel abel abel abel) ) ) ) ←

←←← (3)(3)

(3)(3)

pai(adão, pai(adão, pai(adão, pai(adão,seth seth seth seth) ) ) ) ←

←←← (4)(4)

(4)(4)

pai( pai( pai( pai(seth seth seth seth, , ,enos , enos enos enos) ) ) ) ←

←←← (5)

(5) (5)

(5)

avô(A,C) avô(A,C) avô(A,C) avô(A,C) ←

←←←

pai(A,B), pai(B,C) pai(A,B), pai(B,C) pai(A,B), pai(B,C) pai(A,B), pai(B,C)

(1)

(1) (1)

(1)

pai(adão, pai(adão, pai(adão, pai(adão,caim caim caim caim) ) ) ← )

←←← (2)

(2) (2)

(2)

pai(adão, pai(adão, pai(adão, pai(adão,abel abel abel abel) ) ) ) ←

←←← (3)(3)

(3)(3)

pai(adão, pai(adão, pai(adão, pai(adão,seth seth seth seth) ) ) ) ←

←←← (4)(4)

(4)(4)

pai( pai( pai( pai(seth seth seth seth, , ,enos , enos enos enos) ) ) ) ←

←←← (5)

(5) (5)

(5)

avô(A,C) avô(A,C) avô(A,C) avô(A,C) ←

←←←

pai(A,B), pai(B,C) pai(A,B), pai(B,C) pai(A,B), pai(B,C) pai(A,B), pai(B,C)

Exercício 3

Codifique o programa a seguir em Prolog e rastreie o raciocínio do sistema ao responder às seguintes consultas:

Quem é avô de Enos?

Seth é avô de quem?

Caim é irmão de quem?

(16)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 16

Predicados computáveis

Predicado computável Predicado computável

é um predicado avaliado diretamente pelo procedimento de refutação, sem que este tenha que estar definido no programa lógico.

é um predicado avaliado diretamente pelo procedimento de refutação, sem que este tenha que estar definido no programa lógico.

Exemplos:

operadores aritméticos: +, -, *, /

operadores relacionais: =, ≠, <, ≤, >, ≥

A SLD-refutação sinaliza fracasso se um predicado computável resulta em falso!

A SLD-refutação sinaliza fracasso se um predicado computável resulta em falso!

(17)

Predicados computáveis

Programa lógico 5 – Quem é irmão de Caim?

Programa lógico 5 – Quem é irmão de Caim?

(1) (1) (1)

(1) pai(adão,pai(adão,caimpai(adão,pai(adão,caimcaim) caim) ) ←) ←←←

(2) (2) (2)

(2) pai(adão,pai(adão,abelpai(adão,pai(adão,abelabel) abel) ) ←) ←←←

(3)(3)

(3)(3) pai(adão,pai(adão,sethpai(adão,pai(adão,sethseth) seth) ) ←) ←←←

(4) (4) (4)

(4) irmão(X,Y) irmão(X,Y) ←irmão(X,Y) irmão(X,Y) ←←← pai(Z,X), pai(Z,Y), pai(Z,X), pai(Z,Y), X pai(Z,X), pai(Z,Y), pai(Z,X), pai(Z,Y), X X ≠X ≠≠≠ YYYY

(1) (1) (1)

(1) pai(adão,pai(adão,caimpai(adão,pai(adão,caimcaim) caim) ) ←) ←←←

(2) (2) (2)

(2) pai(adão,pai(adão,abelpai(adão,pai(adão,abelabel) abel) ) ←) ←←←

(3)(3)

(3)(3) pai(adão,pai(adão,sethpai(adão,pai(adão,sethseth) seth) ) ←) ←←←

(4) (4) (4)

(4) irmão(X,Y) irmão(X,Y) ←irmão(X,Y) irmão(X,Y) ←←← pai(Z,X), pai(Z,Y), pai(Z,X), pai(Z,Y), X pai(Z,X), pai(Z,Y), pai(Z,X), pai(Z,Y), X X ≠X ≠≠≠ YYYY

(18)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 18

Predicados computáveis

Programa lógico 6 Programa lógico 6

(1) (1) (1)

(1) gosta( gosta( gosta(ary gosta( ary ary, ary , ,eva , eva eva) eva ) ) ← ) ← ← ← (2) (2)

(2) (2) gosta( gosta( gosta(ivo gosta( ivo ivo,ana) ivo ,ana) ,ana) ← ,ana) ← ← ← (3)

(3) (3)

(3) gosta( gosta( gosta(ary gosta( ary ary,bia) ary ,bia) ,bia) ← ,bia) ← ← ← (4)

(4) (4)

(4) gosta( gosta( gosta(eva gosta( eva eva, eva , ,ary , ary ary) ary ) ) ← ) ← ← ← (5) (5)

(5) (5) namora(A,B) namora(A,B) namora(A,B) ← namora(A,B) ← ← ← gosta(A,B), gosta(B,A) gosta(A,B), gosta(B,A) gosta(A,B), gosta(B,A) gosta(A,B), gosta(B,A) (6)

(6) (6)

(6) infiel(C) infiel(C) infiel(C) ← infiel(C) ← ← ← namora(C,D), gosta(C,E), namora(C,D), gosta(C,E), D namora(C,D), gosta(C,E), namora(C,D), gosta(C,E), D D ≠ D ≠ ≠ ≠ E E E E (1)

(1) (1)

(1) gosta( gosta(ary gosta( gosta( ary ary, ary , ,eva , eva eva) eva ) ) ← ) ← ← ← (2) (2)

(2) (2) gosta( gosta(ivo gosta( gosta( ivo ivo,ana) ivo ,ana) ,ana) ← ,ana) ← ← ← (3)

(3) (3)

(3) gosta( gosta(ary gosta( gosta( ary ary,bia) ary ,bia) ,bia) ← ,bia) ← ← ← (4)

(4) (4)

(4) gosta( gosta(eva gosta( gosta( eva eva, eva , ,ary , ary ary) ary ) ) ← ) ← ← ← (5) (5)

(5) (5) namora(A,B) namora(A,B) ← namora(A,B) namora(A,B) ← ← ← gosta(A,B), gosta(B,A) gosta(A,B), gosta(B,A) gosta(A,B), gosta(B,A) gosta(A,B), gosta(B,A) (6)

(6) (6)

(6) infiel(C) infiel(C) ← infiel(C) infiel(C) ← ← ← namora(C,D), gosta(C,E), namora(C,D), gosta(C,E), D namora(C,D), gosta(C,E), namora(C,D), gosta(C,E), D D ≠ D ≠ ≠ ≠ E E E E

Exercício 4

Com base no programa a seguir, mostre como SLD-refutação responde à consulta (no Prolog, o operador ‘≠ ≠ ≠ ≠’ é representado por ‘\ \ \ \= = = =’):

Quem é infiel?

(19)

Negação por falha finita

Mecanismo de negação por falha finita Mecanismo de negação por falha finita

Ao encontrar um literal negativo (¬λ ¬λ ¬λ ¬λ) o sistema dispara uma sub-prova do literal complementar (λ λ λ λ):

se a prova de λ λ λ λ termina com sucesso, a prova de ¬λ ¬λ ¬λ ¬λ termina com fracasso se a prova de λ λ λ λ termina com fracasso, a prova de ¬λ ¬λ ¬λ ¬λ termina com sucesso Ao encontrar um literal negativo (¬λ ¬λ ¬λ ¬λ) o sistema dispara uma sub-prova do literal complementar (λ λ λ λ):

se a prova de λ λ λ λ termina com sucesso, a prova de ¬λ ¬λ ¬λ ¬λ termina com fracasso se a prova de λ λ λ λ termina com fracasso, a prova de ¬λ ¬λ ¬λ ¬λ termina com sucesso

Hipótese do mundo fechado: tudo o que é verdadeiro está declarado!

Hipótese do mundo fechado: tudo o que é verdadeiro está declarado!

Prolog implementa negação por falha finita através do predicado computável not not not/1 not /1 /1. /1

(20)

Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 20

Negação por falha finita

Programa lógico 7 – Quem voa?

Programa lógico 7 – Quem voa?

(1) (1) (1)

(1) ave(ave(fredave(ave(fredfredfred) ) ) ) ←←←←

(2) (2) (2)

(2) ave(bob) ave(bob) ←ave(bob) ave(bob) ←←←

(3)(3)

(3)(3) pimguimpimguim(pimguimpimguim(((fredfredfredfred) ) ) ←) ←←←

(4) (4) (4)

(4) voa(X) voa(X) ←voa(X) voa(X) ←←← ave(X), ave(X), ¬ave(X), ave(X), ¬¬¬ pinguim(X)pinguim(X)pinguim(X)pinguim(X)

(1) (1) (1)

(1) ave(ave(fredave(ave(fredfredfred) ) ) ) ←←←←

(2) (2) (2)

(2) ave(bob) ave(bob) ←ave(bob) ave(bob) ←←←

(3)(3)

(3)(3) pimguimpimguim(pimguimpimguim(((fredfredfredfred) ) ) ←) ←←←

(4) (4) (4)

(4) voa(X) voa(X) ←voa(X) voa(X) ←←← ave(X), ave(X), ¬ave(X), ave(X), ¬¬¬ pinguim(X)pinguim(X)pinguim(X)pinguim(X)

(21)

Negação por falha finita

Programa lógico 8 Programa lógico 8

(1)(1)

(1)(1)

igual(X,X) igual(X,X) igual(X,X) igual(X,X) ← ← ← ←

(2) (2) (2)

(2)

diferente(X,Y) diferente(X,Y) diferente(X,Y) diferente(X,Y) ← ← ← ¬ ← ¬ ¬ ¬ igual(X,Y) igual(X,Y) igual(X,Y) igual(X,Y)

(1)(1)

(1)(1)

igual(X,X) igual(X,X) igual(X,X) igual(X,X) ← ← ← ←

(2) (2) (2)

(2)

diferente(X,Y) diferente(X,Y) diferente(X,Y) diferente(X,Y) ← ← ← ← ¬ ¬ ¬ ¬ igual(X,Y) igual(X,Y) igual(X,Y) igual(X,Y)

Exercício 5

Com base no programa a seguir, mostre como SLD-refutação responde às consultas:

← ←

← ← diferente(bola,bola) diferente(bola,bola) diferente(bola,bola) diferente(bola,bola)

← diferente(bola,bala) diferente(bola,bala) diferente(bola,bala) diferente(bola,bala)

(22)

Fim

Referências

Documentos relacionados

Sabemos que o equilíbrio da pelve é essencial á continência urinária, então se buscou identificar a relação entre a Incontinência Urinária de Esforço (IUE)

Ideias: Uma fotografia em família com as mesmas posições para ver a evolução ao longo dos anos, preparar um calendário de advento, programar um concurso com os amigos de

• Mochila Ataque 20/30L - É a melhor opção para os passeios, pois tem tamanho ideal para levar água, toalha, snacks, máquina fotográfica, protetor solar, lanche de trilha e

Em suma, ainda que em tese se pudesse sustentar que a greve suspende os contratos de trabalho, gerando o não pagamento de salários, não se aplicaria

Vamos usar a Energia total como linha de base para examinar qual é o material mais sustentável ao longo de sua vida útil... Série de Projeto de Engenharia

Essa superioridade da adubaçào orgânica associada à quImica reduzida, provavelmente se deve à liberaçào lenta dos nutrientes NPKS da palha, alem da melhoria das

Tambem foi realizada a análise sensorial da bebida com 50 provadores (alunos e funcionários da UFLA) no laboratório de Análise Sensorial do Departamento de Ciência dos Alimentos

Dentre as famílias que ocorreram em menor número, a família Trichogrammatidae, constitui um importante grupo para o controle de pragas, entretanto, segundo