1 / 8

A Negação na Programação em Lógica e no Prolog

Luís Rodrigues – 30434010 Universidade dos Açores - 2008. A Negação na Programação em Lógica e no Prolog. O QUE É A NEGAÇÃO?. Negação é uma operação básica unária que resulta verdadeira quando o seu argumento é falso, e falso caso contrário.

avel
Download Presentation

A Negação na Programação em Lógica e no Prolog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Luís Rodrigues – 30434010 Universidade dos Açores - 2008 A Negação na Programação em Lógica e no Prolog

  2. O QUE É A NEGAÇÃO? • Negação é uma operação básica unária que resulta verdadeira quando o seu argumento é falso, e falso caso contrário. • O Prolog inclui a operação de negação, no entanto essa operação não corresponde exactamente à operação de negação lógica.

  3. A NEGAÇÃO NO PROLOG • No Prolog a negação é realizada pelo predicado not. • O argumento para este predicado é o que queremos verificar na sua forma negada.

  4. DEFINIÇÃO DA NEGAÇÃO not(G) :- G, !, fail. not(G). • Pela primeira clausula temos que se o predicado G for verdadeiro, o predicado not vai falhar, e o cut impede qualquer possibilidade de backtracking. • Se G for falso, então pela segunda clausula, o predicado not é verdadeiro.

  5. EXEMPLO DE UTILIZAÇÃO voa(X) :- ave(X), not(pinguim(X)). • Assumindo que os predicados ave e pinguim estão bem definidos algures, pela clausula anterior vemos que o predicado voa(X) só será verdadeiro se X não falhar no predicado ave mas falhar no predicado pinguim. • X voa se X for uma ave e X não for um pinguim.

  6. LIMITAÇÕES • Em certas situações a utilização da negação pode levar situações onde os resultados esperados intuitivamente não são de facto alcançados. • Da negação é impossível instanciar valores para as variáveis. Apenas retorna sucesso ou falha.

  7. EXEMPLOS DAS LIMITAÇÕES I candidato_bombeiro(X) :- not(piromaniaco(X)), pontual(X). piromaniaco(nero). pontual(joao). • Se fizermos a pesquisa candidato_bombeiro(W). no exemplo anterior, seria de esperar receber a resposta W=joao, mas a negação vai anular a resposta do predicado pontual. • Esta situação pode ser resolvida trocando a ordem dos predicados verificados.

  8. EXEMPLOS DAS LIMITAÇÕES II verificar(G) :- not(not(G)). • Intuitivamente sabemos que a clausula anterior é logicamente idêntica à clausula verificar(G) :- G. que deveria resultar sempre os valores instanciáveis de G. • Em programação lógica isso não é verdade. A dupla negação, ao contrário de na lógica de primeira ordem, não é equivalente ao predicado. • Nota: Em ProLog a clausula acima nem sequer é válida.

More Related