Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação Logica: Prolog - Simbólica e Unificação, Exercícios de Fundamentos de Moda

Documento que apresenta o que é programação lógica, especificamente sobre prolog, uma linguagem de programação simbólica. O texto aborda conceitos básicos como cláusulas, unificação, regra e fato, além de exemplos de consultas e execução do algoritmo.

Tipologia: Exercícios

2020

Compartilhado em 19/12/2020

ruben-pires
ruben-pires 🇨🇻

4 documentos

1 / 61

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Linguagens de Programação
Andrei Rimsa Álvares
Programação Lógica
(Prolog)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d

Pré-visualização parcial do texto

Baixe Programação Logica: Prolog - Simbólica e Unificação e outras Exercícios em PDF para Fundamentos de Moda, somente na Docsity!

Linguagens de Programação

Andrei Rimsa Álvares

Programação Lógica

(Prolog)

Sumário

  • Introdução
  • Prolog
  • Unificação
  • Mais sobre Prolog
  • Resumo

Programação Imperativa vs. Lógica

Imperativa

Lógica

  • Programas: mapeamento de entradas em saídas
  • Modelo computacional: von Neumann (variáveis,

atribuição, comandos, ...)

  • Estilo procedural: "como fazer"
  • Programação: instruções que executam comandos
  • Computação: ações que alteram estado
  • Programas: conhecimentos sobre um problema e

não uma sequência de passos

  • Modelo computacional: lógica matemática
  • Estilo declarativo: "o que fazer"
  • Programação: simbólica (não numérica)
  • Computação: se uma consulta pode ser deduzida de

relações do programa

Programação Funcional vs. Lógica

Funcional

Lógica

  • Programas: com mapeamentos
    • Dado a, determine o valor de m(a)

(sempre resultará em uma única resposta)

  • Programas: com relações
    • Dados a e b, verificar se R(a,b) é verdadeiro
    • Dado a, encontrar todos os valores para y tal que

R(a,y) é verdadeiro

  • Dado b, encontrar todos os valores para x tal que

R(x,b) é verdadeiro

  • Encontre todos os valores para x e y, tal que

R(x,y) é verdadeiro

Exemplo

  • Hierarquia de uma família

?- avo(carlos, jose).

true.

?- avo(carlos, joao).

false.

?- avo(manoel, carlos).

false.

?- avo(X, jose).

X = carlos.

avo(X, Y) :- pai(X, Z), pai(Z, Y).

avo(X, Y) :- pai(X, Z), mae(Z, Y).

pai(carlos, joao).

pai(joao, jose).

mae(maria, joao).

Linguagens de Programação

PROLOG

Elementos

  • Valores
    • Constantes: letras (começa com minúscula), números, texto
      • Ex.: maria, 'maria', 123 , "Texto"
    • Estruturas (tuplas rotuladas)
      • Ex.: ponto(5, 6), data(01, 01, 2000)
    • Listas
      • Ex.: [1,2,3], [maria, jose]
  • Variáveis (começam com letra maiúscula)
    • Ex.: X, Y, Estudante

Cláusulas de Horn

  • Cláusulas de Horn são um subconjunto das cláusulas da lógica de

predicados

  • Forma geral

B :- A

1

, A

2

, ..., A

n

, onde cada A

i

é uma relação da forma R

i

  • Interpretação
    • Se as condições A

1

, A

2

, ... e A

n

forem verdadeiras, então a

conclusão B é verdadeira (na forma procedural: se condições

então conclusão)

  • Se algum A

i

for falso, não se pode deduzir que B é falso, apenas

que não se pode inferir que B é verdadeiro

Exemplo

  • Exemplo somente com fatos

gosta (maria, peixe).

gosta (pedro, vinho).

gosta (maria, vinho).

gosta (pedro, maria).

  • Quem gosta de peixe?

?- gosta(X, peixe).

X = maria.

  • Pedro e Maria se gostam?

?- gosta(maria, pedro),

gosta(pedro, maria).

false.

  • Existe algo que Pedro e Maria (ambos) gostem?

?- gosta(pedro, X), gosta(maria, X).

X = vinho.

Outro Exemplo

  • Exemplo com fatos e regras

estrela (sol).

estrela(sirius).

orbita (venus, sol).

orbita (terra, sol).

orbita (marte, sol).

orbita(lua, terra).

orbita (phobos, marte).

orbita (deimos, marte).

planeta (B) :-

orbita (B, sol).

satelite (B) :-

orbita (B, P),

planeta (P).

?- orbita(venus, sol).

true.

?- orbita(B, marte).

B = phobos ; B = deimos.

?- orbita(B, venus).

false.

?- planeta(mercurio).

false.

?- planeta(X).

X = venus ; X = terra ; X = marte.

?- satelite(X).

X = lua ; X = phobos ; X = deimos.

Unificação

  • Unificação é o nome do algoritmo usado por Prolog para determinar

se existe uma maneira de instanciar as variáveis de dois predicados

de modo a torná-los iguais.

Predicado 1 Predicado 2 Unificação

p (X, Y)

q (X, Y)

false

p(X, Y) p(joao, jose) X = joao, Y = jose

p(X, Y) p(joao, Z) X = joao, Y = Z

p(X, X) p(1, 1) X = 1

p (X, X)

p (1, W) X = 1, W = 1

p(X, X) p(1, 2) false

p(X, X, 2) p(1, W, W) false

p(G, jose) p(X, Y) G = X, Y = jose

Algoritmo

  • O algoritmo de execução
    • Faz uma busca em profundidade em uma árvore de pesquisa, com

resolução de um objetivo, onde a lista de cláusulas é pesquisada

de cima para baixo

  • Se a unificação com o lado esquerdo de uma cláusula for bem

sucedida , então tenta-se resolver os subobjetivos do lado

direito dessa cláusula (da esquerda para a direita)

  • Pode haver retrocessos (backtracking) caso uma unificação

não seja bem sucedida , tentando explorar outras unificações

alternativas

  • Se todas as alternativas forem exploradas sem sucesso, então a

resolução falha

A resolução é sujeita à ordem em

que as cláusulas foram escritas

Exemplo

  • Execução do algoritmo

Com qual regra essa consulta

pode ser unificada?

irmao (joao, mario)

homem(mario).

mae(joao, roberta).

mae (mario, roberta).

pai(joao, paulo).

pai(mario, paulo).

pais(X, M, P) :- mae(X, M),

pai(X, P).

irmao (X, Y) :-

homem (Y),

pais(X, M, P),

pais(Y, M, P).

Exemplo

  • Execução do algoritmo

irmao (joao, mario)

irmao(X, Y)

X = joao, Y = mario

Expandir a regra irmao(X, Y)

com suas cláusulas à direita

homem(mario).

mae(joao, roberta).

mae (mario, roberta).

pai(joao, paulo).

pai(mario, paulo).

pais(X, M, P) :- mae(X, M),

pai(X, P).

irmao (X, Y) :-

homem (Y),

pais(X, M, P),

pais(Y, M, P).