Paradigmas de Programação
Ronaldo F. Ramos
Instituto Federal do Ceará
15 de outubro de 2023
PARTE 2 - PARADIGMA DECLARATIVO
PROLOG
PROGRAMMING IN LOGICS
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 2 / 48
Interpretadores Disponíveis
SWI - PROLOG
https://www.swi-prolog.org/
SWISH
https://swish.swi-prolog.org/
Gnu PROLOG
http://www.gprolog.org/
Em Python
https://pypi.org/project/pyswip/0.2.2/
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 3 / 48
Roteiro
Conceitos Iniciais
Definição de Programa, Computação, Termos, Átomos, Fatos, Regras e Queries
Definição de Metas, Meaning, Procedures, etc
Exemplos iniciais
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 4 / 48
Programa
Conjunto de Axiomas
(Programação Axiomática)
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 5 / 48
Computação
Prova construtiva de uma meta a partir de um programa.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 6 / 48
Termos
Blocos de construção para a representação de dados. Podem ser variáveis, inteiros, números
reais, átomos e listas.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 7 / 48
Átomos
Alfanumérico: banana, c3, banana_split
Cadeias: ’Banana-split é para a sobremesa?’
Simbólicos: #, &, =
Especiais: $, !, ; , [, ],
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 8 / 48
Fatos
Forma mais simples de comando/declaração é um fato.
1 pai(abraão,isaque).
2 soma (0,1,1).
3 soma (1,1,2).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 9 / 48
Uma Família Bíblica em Fatos 1/2
1 pai(terá,abraão).
2 pai(terá,naor).
3 pai(terá,arão).
4 pai(abraão,isaque).
5 pai(arão,ló).
6 pai(arão,milca).
7 pai(arão,iscá).
8 homem(terá).
9 homem(abraão).
10 homem(naor).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 10 / 48
Uma Família Bíblica em Fatos 2/2
1 homem(arão).
2 homem(isaque).
3 homem(ló).
4 mulher(sara).
5 mulher(milca).
6 mulher(iscá).
7 mãe(sara,isaque).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 11 / 48
Predicados
Um predicado é um nome dado a uma relação entre termos. Predicados definidos pelo usuário
e próprios da linguagem. O número de argumentos de um predicado é a sua Aridade.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 12 / 48
Queries (Perguntas)
Uma pergunta é uma forma de extrair informação de programas lógicos. É um predicado
interrogativo. Uma pergunta pode conter uma ou mais metas.
Ex.
1 ?-pai(abraão,isaque).
2 ?-soma (0,1,1).
3 ?-soma (1,1,2).
Uma pergunta é consequência lógica de um fato idêntico.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 13 / 48
Variáveis
Uma variável é uma representação de um dado que pode mudar ao longo do tempo. Não
representa uma posição de memória, mas um conceito abstrato.
Ex. X, _tape_number, Age
Sempre começam com letras maiúsculas ou caractere de sublinha (underscore).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 14 / 48
Substituição
Conjunto finito (Possivelmente vazio) de pares na forma Xi = tj onde Xi é uma variável e ti é
um termo e Xi ̸= Xj ∀i ̸= j e Xi não ocorre em tj ∀i, j.
Ex. {X = isaque, Y = abraao}
O resultado de aplicação de uma substituição θ a um termo A é denotado por Aθ. Seja o
termo A = pai(abraao, X) e a substituição θ = {X = isaque} então Aθ = pai(abraao, isaque)
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 15 / 48
Instância
A é instância de B se existe uma substituição tal que A = Bθ
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 16 / 48
Perguntas Existenciais
Toda pergunta com variáveis se transforma em uma pergunta existencial.
Ex. pai(abraao, X) significa : "Existe alguém de quem abraão é pai?"
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 17 / 48
Regras
Expressões na forma de horn invertida.
< Consequente >: − < antecedente1, .., antecedenten > equivale a dizer Consequente se
antecedente1 e atencedente2 e... etc ou ainda para satisfazer o Consequente faça o
antecedente1, ... etc
Ex.
1 filho(X,Y) :- pai(Y,X), homem(X).
2 filha(X,Y) :- pai(Y,X), mulher(X).
Observe que a vírgula substitui a conjunção ∧
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 18 / 48
Cláusulas
Fatos ou regras são cláusulas. Finalizadas por um ponto.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 19 / 48
Fatos Universais
Todos os fatos com variáveis são universalmente quantificados.
Todos gostam de caju.
1 gosta(X,caju).
Qualquer número multiplicado por zero resulta zero.
1 vezes (0,X,0).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 20 / 48
Instância Comum
C é uma instância comum de A e B se é uma instância de A e uma instância de B, ou seja,
existem substituições θ1 e θ2 tais que C = Aθ1 = Bθ2
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 21 / 48
Perguntas Conjuntivas
Conjunção de metas colocadas como uma pergunta. As variáveis com mesmo nome criam
relação de dependência.
Ex.
Abraão é pai de alguém que por sua vez é pai de outra pessoa?
1 pai(abraao,X),pai(X,Y).
Uma pergunta conjuntiva é consequência lógica de um programa(P) se todas as metas na
conjunção são consequências de P e as variáveis compartilhadas são instanciadas com os
mesmos valores nas diferentes metas.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 22 / 48
Programa
Um programa é um conjunto finito de regras.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 23 / 48
Meta Quantificada Existencialmente
Uma meta quantificada existencialmente (G) é uma consequência lógica de um programa (P)
se existe uma instância ground A ← B1, B2, ..., Bnn > 0 tal que B1, B2, ..., Bn sejam
consequência lógica de P e A seja uma instância de G.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 24 / 48
Procedimento - Procedure
Um conjunto de regras com o mesmo predicado na cabeça.
1 avo(X,Y) :- pai(X,Z), pai(Z,Y).
2 avo(X,Y) :- pai(X,Z), mae(Z,Y).
3 avoh(X,Y) :- mae(X,Z), pai(Z,Y).
4 avoh(X,Y) :- mae(X,Z), mae(Z,Y).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 25 / 48
Redução
A redução de uma meta (G) por um programa (P) é a substituição de G pelo corpo de uma
instância de uma cláusula em P cuja cabeça é idêntica a G. Trata-se de um passo
computacional básico em programação lógica.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 26 / 48
Redução
A redução de uma meta (G) por um programa (P) é a substituição de G pelo corpo de uma
instância de uma cláusula em P cuja cabeça é idêntica a G. Trata-se de um passo
computacional básico em programação lógica.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 27 / 48
Meaning - Significado
O significado de um programa lógico é o conjunto de metas ground dedutíveis dele. Dizemos
que um programa é correto com relação a um significado desejado (M) se M(P) é subconjunto
de M
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 28 / 48
Comandos Iniciais Úteis do Interpretador
assert(<predicado ou regra>). - Adiciona um fato ou regra a base de conhecimento
halt. - Sai do interpretador
consult(<endereço do arquivo>). ou [<endereço do arquivo>] - Carrega programa
(base de conhecimento) para a memória.
trace. - Liga o modo de rastrabilidade para debug.
notrace. - Desliga o trace.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 29 / 48
Programa 001 - Familia Bíblica
Use o interpretador ou o swish para carregar os predicados abaixo.
1 % base de dados biblicos
2 masculino(tera).
3 masculino(abraao).
4 masculino(naor).
5 masculino(haran).
6 masculino(isaque).
7 masculino(lo).
8 feminino(sara).
9 feminino(milca).
10 feminino(iscah).
11 ...
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 30 / 48
Programa 001 - Familia Bíblica
Use o interpretador ou o swish para carregar os predicados abaixo.
1 pai(tera,abraao).
2 pai(tera,naor).
3 pai(tera,haran).
4 pai(abraao,isaque).
5 pai(haran,lo).
6 pai(haran,milca).
7 pai(haran,iscah).
8 mae(sara,isaque).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 31 / 48
Metas Existenciais
Vamos testar as metas:
1 ? :- pai(tera,naor).
2 ? :- pai(tera,jose).
3 ? :- pai(X,lo).
4 ? :- pai(X,Y).
5 ? :- masculino(Alguem).
6 ? :- feminino(Mulher).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 32 / 48
Acrescentando Regras
Vamos acrescentar regras a estes predicados
Um avô é um pai de um pai ou pai de uma mãe.
(Desconsiderando o sexo do neto por enquanto)
1 avo(Avo,Neto) :- pai(Avo,Filho),pai(Filho,Neto).
2 avo(Avo,Neto) :- pai(Avo,Filha),mae(Filha,Neto).
Agora podemos fazer novas perguntas:
1 avo(tera,X).
2 avo(X,Y).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 33 / 48
Definindo Irmão
Irmão são filhos do mesmo pai ou da mesma mãe.
1 irmao(X,Y) :- pai(Z,X),pai(Z,Y).
2 irmao(X,Y) :- mae(Z,X),mae(Z,Y).
Há algo errado com a definição acima? Alguém é irmão de si mesmo? Experimente.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 34 / 48
Definindo Irmão - Correção
Ninguém é irmão de si mesmo.
1 irmao(X,Y) :- pai(Z,X),pai(Z,Y), X = Y.
2 irmao(X,Y) :- mae(Z,X),mae(Z,Y), X = Y.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 35 / 48
Definindo Homem e Mulher
Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los
1 homem(H) :- masculino(H).
2 mulher(M) :- feminino(M).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 36 / 48
Definindo Filho e Filha
Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los
1 filho(X,Y) :- pai(Y,X),homem(X).
2 filho(X,Y) :- mae(Y,X),homem(X).
3 filha(X,Y) :- pai(Y,X),mulher(X).
4 filha(X,Y) :- mae(Y,X),mulher(X).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 37 / 48
Definindo Progenitor (sem sexo)
Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los
1 progenitor(X,Y) :- pai(X,Y).
2 progenitor(X,Y) :- mae(X,Y).
Agora podemos definir irmão em função de progenitor. Experimente.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 38 / 48
Exercício
Agora defina os seguintes predicados: tio, tia, avô, avó, bisavô, bisavó, trisavô, trisavó,
tetraavô, tetraavó, primo, familiar (faz parte da família), tio avô, tia avó, primo em segundo
grau, primo em terceiro grau, ancestral e descendente.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 39 / 48
Pausa
Tente
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 40 / 48
Regras Recursivas
Definir uma coisa em termos dela própria (kkkk). Vejamos a definição de ancestral.
Observemos as relações recursivas.
avô(Ancestral,Descendente) :- pai1(Ancestral, Pessoa), pai(Pessoa, Descendente)
bisavô(Ancestral,Descendente) :- pai(Ancestral, Pessoa), avô(Pessoa, Descendente)
trisavô(Ancestral,Descendente) :- pai(Ancestral, Pessoa), bisavô(Pessoa, Descendente)
Isto nos leva ao padrão:
ancestral(Ancestral,Descendente) :-pai(Ancestral,Pessoa),ancestral(Pessoa,Descendente)
Não leva a um loop infinito??
1
Vamos abstrair das mães por enquanto
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 41 / 48
Caso Base
Em algum momento a recursão deve ser obrigada a parar.
ancestral(Ancestral, Descendente) :- pai(Ancestral,Descendente).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 42 / 48
Programa Ancestral
% Casos Base
ancestral(Ancestral,Descendente) :- pai(Ancestral,Descendente).
ancestral(Ancestral,Descendente) :- mãe(Ancestral,Descendente).
% Definição
ancestral(Ancestral,Descendente) :- pai(Ancestral,Pessoa), ancestral(Pessoa,Descendente).
ancestral(Ancestral,Descendente) :- mãe(Ancestral,Pessoa), ancestral(Pessoa,Descendente).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 43 / 48
Fechamento Transitivo
É dito que a relação ancestral é um fechamento transitivo da relação de parentesco e
portanto facilmente realizada através de uma regra recursiva.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 44 / 48
Recursão Linear
Um programa é recursivo linear se possui apenas uma meta recursiva no corpo da cláusula.
Ex de definição de ancestral não linear:
ancestral(Ancestral,Descendente) :- ancestral(Ancestral,Pessoa),
ancestral(Pessoa,Descendente).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 45 / 48
Grafo Direcionado Simples
Vejamos um outro exemplo de fecho transitivo
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 46 / 48
Descrevendo o grafo
% fatos
eixo(a,b). eixo(a,c). eixo(b,d).
eixo(c,d). eixo(d,e). eixo(f,g).
% caso base
conectado(nó,nó).
% regra recursiva
conectado(nó1,nó2) :- eixo(nó1,Link), conectado(Link,nó2).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 47 / 48
CONTINUA
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 48 / 48

_001_introducao.pdf

  • 1.
    Paradigmas de Programação RonaldoF. Ramos Instituto Federal do Ceará 15 de outubro de 2023
  • 2.
    PARTE 2 -PARADIGMA DECLARATIVO PROLOG PROGRAMMING IN LOGICS Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 2 / 48
  • 3.
    Interpretadores Disponíveis SWI -PROLOG https://www.swi-prolog.org/ SWISH https://swish.swi-prolog.org/ Gnu PROLOG http://www.gprolog.org/ Em Python https://pypi.org/project/pyswip/0.2.2/ Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 3 / 48
  • 4.
    Roteiro Conceitos Iniciais Definição dePrograma, Computação, Termos, Átomos, Fatos, Regras e Queries Definição de Metas, Meaning, Procedures, etc Exemplos iniciais Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 4 / 48
  • 5.
    Programa Conjunto de Axiomas (ProgramaçãoAxiomática) Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 5 / 48
  • 6.
    Computação Prova construtiva deuma meta a partir de um programa. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 6 / 48
  • 7.
    Termos Blocos de construçãopara a representação de dados. Podem ser variáveis, inteiros, números reais, átomos e listas. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 7 / 48
  • 8.
    Átomos Alfanumérico: banana, c3,banana_split Cadeias: ’Banana-split é para a sobremesa?’ Simbólicos: #, &, = Especiais: $, !, ; , [, ], Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 8 / 48
  • 9.
    Fatos Forma mais simplesde comando/declaração é um fato. 1 pai(abraão,isaque). 2 soma (0,1,1). 3 soma (1,1,2). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 9 / 48
  • 10.
    Uma Família Bíblicaem Fatos 1/2 1 pai(terá,abraão). 2 pai(terá,naor). 3 pai(terá,arão). 4 pai(abraão,isaque). 5 pai(arão,ló). 6 pai(arão,milca). 7 pai(arão,iscá). 8 homem(terá). 9 homem(abraão). 10 homem(naor). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 10 / 48
  • 11.
    Uma Família Bíblicaem Fatos 2/2 1 homem(arão). 2 homem(isaque). 3 homem(ló). 4 mulher(sara). 5 mulher(milca). 6 mulher(iscá). 7 mãe(sara,isaque). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 11 / 48
  • 12.
    Predicados Um predicado éum nome dado a uma relação entre termos. Predicados definidos pelo usuário e próprios da linguagem. O número de argumentos de um predicado é a sua Aridade. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 12 / 48
  • 13.
    Queries (Perguntas) Uma perguntaé uma forma de extrair informação de programas lógicos. É um predicado interrogativo. Uma pergunta pode conter uma ou mais metas. Ex. 1 ?-pai(abraão,isaque). 2 ?-soma (0,1,1). 3 ?-soma (1,1,2). Uma pergunta é consequência lógica de um fato idêntico. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 13 / 48
  • 14.
    Variáveis Uma variável éuma representação de um dado que pode mudar ao longo do tempo. Não representa uma posição de memória, mas um conceito abstrato. Ex. X, _tape_number, Age Sempre começam com letras maiúsculas ou caractere de sublinha (underscore). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 14 / 48
  • 15.
    Substituição Conjunto finito (Possivelmentevazio) de pares na forma Xi = tj onde Xi é uma variável e ti é um termo e Xi ̸= Xj ∀i ̸= j e Xi não ocorre em tj ∀i, j. Ex. {X = isaque, Y = abraao} O resultado de aplicação de uma substituição θ a um termo A é denotado por Aθ. Seja o termo A = pai(abraao, X) e a substituição θ = {X = isaque} então Aθ = pai(abraao, isaque) Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 15 / 48
  • 16.
    Instância A é instânciade B se existe uma substituição tal que A = Bθ Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 16 / 48
  • 17.
    Perguntas Existenciais Toda perguntacom variáveis se transforma em uma pergunta existencial. Ex. pai(abraao, X) significa : "Existe alguém de quem abraão é pai?" Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 17 / 48
  • 18.
    Regras Expressões na formade horn invertida. < Consequente >: − < antecedente1, .., antecedenten > equivale a dizer Consequente se antecedente1 e atencedente2 e... etc ou ainda para satisfazer o Consequente faça o antecedente1, ... etc Ex. 1 filho(X,Y) :- pai(Y,X), homem(X). 2 filha(X,Y) :- pai(Y,X), mulher(X). Observe que a vírgula substitui a conjunção ∧ Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 18 / 48
  • 19.
    Cláusulas Fatos ou regrassão cláusulas. Finalizadas por um ponto. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 19 / 48
  • 20.
    Fatos Universais Todos osfatos com variáveis são universalmente quantificados. Todos gostam de caju. 1 gosta(X,caju). Qualquer número multiplicado por zero resulta zero. 1 vezes (0,X,0). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 20 / 48
  • 21.
    Instância Comum C éuma instância comum de A e B se é uma instância de A e uma instância de B, ou seja, existem substituições θ1 e θ2 tais que C = Aθ1 = Bθ2 Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 21 / 48
  • 22.
    Perguntas Conjuntivas Conjunção demetas colocadas como uma pergunta. As variáveis com mesmo nome criam relação de dependência. Ex. Abraão é pai de alguém que por sua vez é pai de outra pessoa? 1 pai(abraao,X),pai(X,Y). Uma pergunta conjuntiva é consequência lógica de um programa(P) se todas as metas na conjunção são consequências de P e as variáveis compartilhadas são instanciadas com os mesmos valores nas diferentes metas. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 22 / 48
  • 23.
    Programa Um programa éum conjunto finito de regras. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 23 / 48
  • 24.
    Meta Quantificada Existencialmente Umameta quantificada existencialmente (G) é uma consequência lógica de um programa (P) se existe uma instância ground A ← B1, B2, ..., Bnn > 0 tal que B1, B2, ..., Bn sejam consequência lógica de P e A seja uma instância de G. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 24 / 48
  • 25.
    Procedimento - Procedure Umconjunto de regras com o mesmo predicado na cabeça. 1 avo(X,Y) :- pai(X,Z), pai(Z,Y). 2 avo(X,Y) :- pai(X,Z), mae(Z,Y). 3 avoh(X,Y) :- mae(X,Z), pai(Z,Y). 4 avoh(X,Y) :- mae(X,Z), mae(Z,Y). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 25 / 48
  • 26.
    Redução A redução deuma meta (G) por um programa (P) é a substituição de G pelo corpo de uma instância de uma cláusula em P cuja cabeça é idêntica a G. Trata-se de um passo computacional básico em programação lógica. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 26 / 48
  • 27.
    Redução A redução deuma meta (G) por um programa (P) é a substituição de G pelo corpo de uma instância de uma cláusula em P cuja cabeça é idêntica a G. Trata-se de um passo computacional básico em programação lógica. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 27 / 48
  • 28.
    Meaning - Significado Osignificado de um programa lógico é o conjunto de metas ground dedutíveis dele. Dizemos que um programa é correto com relação a um significado desejado (M) se M(P) é subconjunto de M Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 28 / 48
  • 29.
    Comandos Iniciais Úteisdo Interpretador assert(<predicado ou regra>). - Adiciona um fato ou regra a base de conhecimento halt. - Sai do interpretador consult(<endereço do arquivo>). ou [<endereço do arquivo>] - Carrega programa (base de conhecimento) para a memória. trace. - Liga o modo de rastrabilidade para debug. notrace. - Desliga o trace. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 29 / 48
  • 30.
    Programa 001 -Familia Bíblica Use o interpretador ou o swish para carregar os predicados abaixo. 1 % base de dados biblicos 2 masculino(tera). 3 masculino(abraao). 4 masculino(naor). 5 masculino(haran). 6 masculino(isaque). 7 masculino(lo). 8 feminino(sara). 9 feminino(milca). 10 feminino(iscah). 11 ... Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 30 / 48
  • 31.
    Programa 001 -Familia Bíblica Use o interpretador ou o swish para carregar os predicados abaixo. 1 pai(tera,abraao). 2 pai(tera,naor). 3 pai(tera,haran). 4 pai(abraao,isaque). 5 pai(haran,lo). 6 pai(haran,milca). 7 pai(haran,iscah). 8 mae(sara,isaque). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 31 / 48
  • 32.
    Metas Existenciais Vamos testaras metas: 1 ? :- pai(tera,naor). 2 ? :- pai(tera,jose). 3 ? :- pai(X,lo). 4 ? :- pai(X,Y). 5 ? :- masculino(Alguem). 6 ? :- feminino(Mulher). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 32 / 48
  • 33.
    Acrescentando Regras Vamos acrescentarregras a estes predicados Um avô é um pai de um pai ou pai de uma mãe. (Desconsiderando o sexo do neto por enquanto) 1 avo(Avo,Neto) :- pai(Avo,Filho),pai(Filho,Neto). 2 avo(Avo,Neto) :- pai(Avo,Filha),mae(Filha,Neto). Agora podemos fazer novas perguntas: 1 avo(tera,X). 2 avo(X,Y). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 33 / 48
  • 34.
    Definindo Irmão Irmão sãofilhos do mesmo pai ou da mesma mãe. 1 irmao(X,Y) :- pai(Z,X),pai(Z,Y). 2 irmao(X,Y) :- mae(Z,X),mae(Z,Y). Há algo errado com a definição acima? Alguém é irmão de si mesmo? Experimente. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 34 / 48
  • 35.
    Definindo Irmão -Correção Ninguém é irmão de si mesmo. 1 irmao(X,Y) :- pai(Z,X),pai(Z,Y), X = Y. 2 irmao(X,Y) :- mae(Z,X),mae(Z,Y), X = Y. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 35 / 48
  • 36.
    Definindo Homem eMulher Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los 1 homem(H) :- masculino(H). 2 mulher(M) :- feminino(M). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 36 / 48
  • 37.
    Definindo Filho eFilha Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los 1 filho(X,Y) :- pai(Y,X),homem(X). 2 filho(X,Y) :- mae(Y,X),homem(X). 3 filha(X,Y) :- pai(Y,X),mulher(X). 4 filha(X,Y) :- mae(Y,X),mulher(X). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 37 / 48
  • 38.
    Definindo Progenitor (semsexo) Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los 1 progenitor(X,Y) :- pai(X,Y). 2 progenitor(X,Y) :- mae(X,Y). Agora podemos definir irmão em função de progenitor. Experimente. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 38 / 48
  • 39.
    Exercício Agora defina osseguintes predicados: tio, tia, avô, avó, bisavô, bisavó, trisavô, trisavó, tetraavô, tetraavó, primo, familiar (faz parte da família), tio avô, tia avó, primo em segundo grau, primo em terceiro grau, ancestral e descendente. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 39 / 48
  • 40.
    Pausa Tente Ronaldo F. Ramos(Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 40 / 48
  • 41.
    Regras Recursivas Definir umacoisa em termos dela própria (kkkk). Vejamos a definição de ancestral. Observemos as relações recursivas. avô(Ancestral,Descendente) :- pai1(Ancestral, Pessoa), pai(Pessoa, Descendente) bisavô(Ancestral,Descendente) :- pai(Ancestral, Pessoa), avô(Pessoa, Descendente) trisavô(Ancestral,Descendente) :- pai(Ancestral, Pessoa), bisavô(Pessoa, Descendente) Isto nos leva ao padrão: ancestral(Ancestral,Descendente) :-pai(Ancestral,Pessoa),ancestral(Pessoa,Descendente) Não leva a um loop infinito?? 1 Vamos abstrair das mães por enquanto Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 41 / 48
  • 42.
    Caso Base Em algummomento a recursão deve ser obrigada a parar. ancestral(Ancestral, Descendente) :- pai(Ancestral,Descendente). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 42 / 48
  • 43.
    Programa Ancestral % CasosBase ancestral(Ancestral,Descendente) :- pai(Ancestral,Descendente). ancestral(Ancestral,Descendente) :- mãe(Ancestral,Descendente). % Definição ancestral(Ancestral,Descendente) :- pai(Ancestral,Pessoa), ancestral(Pessoa,Descendente). ancestral(Ancestral,Descendente) :- mãe(Ancestral,Pessoa), ancestral(Pessoa,Descendente). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 43 / 48
  • 44.
    Fechamento Transitivo É ditoque a relação ancestral é um fechamento transitivo da relação de parentesco e portanto facilmente realizada através de uma regra recursiva. Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 44 / 48
  • 45.
    Recursão Linear Um programaé recursivo linear se possui apenas uma meta recursiva no corpo da cláusula. Ex de definição de ancestral não linear: ancestral(Ancestral,Descendente) :- ancestral(Ancestral,Pessoa), ancestral(Pessoa,Descendente). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 45 / 48
  • 46.
    Grafo Direcionado Simples Vejamosum outro exemplo de fecho transitivo Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 46 / 48
  • 47.
    Descrevendo o grafo %fatos eixo(a,b). eixo(a,c). eixo(b,d). eixo(c,d). eixo(d,e). eixo(f,g). % caso base conectado(nó,nó). % regra recursiva conectado(nó1,nó2) :- eixo(nó1,Link), conectado(Link,nó2). Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 47 / 48
  • 48.
    CONTINUA Ronaldo F. Ramos(Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 48 / 48