Arquivo da categoria ‘Lógica de Predicados’

A uma semana atrás tivemos uma apresentação interessante na aula de paradigmas de linguagem de programação, que nos apresentou a linguagem de programação Prolog, a aula foi ministrada pelos colegas Rafael, Elias e Jonas.

O Prolog é uma linguagem de programação lógica,  funciona com cálculos de predicados. Para os que não lembram dos cálculos de predicados das aulas de lógica de predicados o negócio funciona assim:dado alguns predicados podemos inferir ou tirar como conclusão alguma coisa, claro que essa alguma coisa tem que ter lógica (meio redundante isso).

um exemplo de calculo de predicado:

1. Todo amigo de Carlos é amigo de Jonas.
Pedro não é amigo de Jonas.
Logo, Pedro não é amigo de Carlos.

Para testar o prolog, basta instalar o swipl no ubuntu digitando o comando sudo aptitude install swipl

Uma coisa interessante no prolog é que ele especifica como deve ser a solução, ao invés de dar o algarismo para sua resolução. A solução se obtém mediante busca aplicando a lógica de predicados.

Um exemplo de programa usando prolog:

  • gosta(joão, jazz).
  • gosta(joão, renata).
  • gosta(joão, lasanha).
  • gosta(renata, joão).
  • gosta(renata, lasanha).

Poderiamos então fazer as seguintes perguntas:

gosta(joão, jazz),João gosta de jazz?

gosta(renata, lasanha). renata gosta de lasanha?

Agora é só deixar a imaginação fluir um pouco.

A atividade da semana foi: fazer um programa que fizesse os cálculos de fibonacci.

cheguei aos seguinte algorítimo recursivo:

  • fib(0, 0). /*para a sequência iniciada por 0, teremos como sucessão 0*/
  • fib(1, 1). /*para a sequência iniciada por 1, teremos como sucessão 1*/
  • fib(X, Y) :-
  • X > 1, /*para a sequência iniciada por X sendo x>1 */
  • X2 is X – 2, fib(X2, Y2), /* X2 recebe o valor x-2 e faz o fibonacci de forma recursiva de X2 que retorna   Y2*/
  • X1 is X – 1, fib(X1, Y1), /* X1 recebe o valor x-1 e faz o fibonacci de forma recursiva de X1 que retorna Y1*/
  • Y is Y1 + Y2.  /* por fim Y recebe como requerido no cálculo de fibonacci a soma dos dois valores precedentes */

/*cada número subseqüente é igual à soma dos dois números precedentes da seqüência própria*/

As peguntas que podem ser feitas são:

fib(8, X), qual o primeiro número da sucessão de fibonacci em  8? Os 100 primeiros números da sequencia fibonacci

outros detalhes e exemplos podem ser encontrados na apresentação sobre prolog.

Apresentação aula de paradigmas Prolog

Tentando explicar a piada da postagem anterior.

O fato é que para a lógica proposicional, em uma disjunção como é o nosso caso você pode afirmar qualquer que seja o elemento (no nosso caso menino ou menina), que será verdadeira a inferência.

Então se uma pessoa pergunta, se o filho que a mulher do lógico esta esperando vai ser menina ou menino ele está falando uma verdade, que pode ser respondida com outra verdade, sim ele será um do dois. Bom mas existe a possibilidade de nascer com os dois sexos, mesmo assim podemos responder sim para o que foi colocado na pertgunta.

Existem dois tipos de disjunções, segue explicações:

Disjunação inclusiva

O bebe será menino ou menina exprime uma proposição que só será falsa no caso de o bebe não nascer ou da mulher do lógico não está grávida. E isto acontece com qualquer proposição da forma «P ou Q»: só será falsa se
P e Q forem ambas falsas; caso contrário, será verdadeira. Podemos representar
isto graficamente numa tabela de verdade:

P Q P ou Q
V V V
V F V
F V V
F F F

Disjunção exclusiva
Uma disjunção exclusiva só é verdadeira caso uma e uma só das proposições disjuntas seja verdadeira.

A tabela de verdade da disjunção exclusiva é a seguinte:
P Q P ou Q
V V F
V F V
F V V
F F F

Nos dois casos a afirmação é verdadeira. Agora sei o significado de “não explica que complica.”

Mais em:

http://dmurcho.com/docs/introprop.pdf