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

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

Luís Rodrigues – 30434010 Universidade dos Açores - 2008.

Apresentações semelhantes


Apresentação em tema: "Luís Rodrigues – 30434010 Universidade dos Açores - 2008."— Transcrição da apresentação:

1 Luís Rodrigues – 30434010 Universidade dos Açores - 2008

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 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. not(G) :- G, !, fail. not(G).

5 EXEMPLO DE UTILIZAÇÃO 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. voa(X) :- ave(X), not(pinguim(X)).

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 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. candidato_bombeiro(X) :- not(piromaniaco(X)), pontual(X). piromaniaco(nero). pontual(joao).

8 EXEMPLOS DAS LIMITAÇÕES II 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. verificar(G) :- not(not(G)).


Carregar ppt "Luís Rodrigues – 30434010 Universidade dos Açores - 2008."

Apresentações semelhantes


Anúncios Google