View
239
Download
0
Category
Preview:
Citation preview
Programação em Lógica
Prof. Dr. Silvio do Lago Pereira
Departamento de Tecnologia da Informação
Faculdade de Tecnologia de São Paulo
Contato
Sala: 623 – Bloco A
E-mail: slago@ime.usp.br
Página: www.ime.usp.br/~slago
Material disponível
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 2
Material disponível
Ementa, bibliografia e critérios de avaliação
Compilador SWI-Prolog
Cronograma de aulas e provas
Slides das aulas
Exercícios e notas
Curso
Objetivos: Representação de conhecimento e raciocínio automatizado em
lógica simbólica, linguagem Prolog e aplicações em inteligência artificial.
Tópicos:
Lógica proposicional
Lógica de predicados
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 3
Lógica de predicados
Raciocínio automatizado
Linguagem Prolog (SWI-Prolog)
Solução de problemas por meio de busca
Processamento de linguagem natural
Avaliação
Provas
P1
P2
P3
SUB
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 4
SUB
Média = (P1 + P2 + P3) / 3
Aprovação requer média maior ou igual a 6,0.
Prova substitutiva
Apenas para quem não atingir a média
Substitui a menor nota entre P1, P2 e P3
Introdução
Inteligência artificial
O papel da lógica na IA
Programação em lógica
Linguagem Prolog
Inteligência Artificial
O que é?área da computação que estuda como simular comportamento
inteligente usando métodos computacionais
Qual seu objetivo?
criação de agentes inteligentes, isto é, entidades que se
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 6
criação de agentes inteligentes, isto é, entidades que se
comportam de modo condizente com suas metas e com as
circunstâncias com que se deparam
Como evitar discussões filosóficas sobre IA?
Teste de Turing
Teste de Turing
PROGRAMA
?
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 7
Argumento de TuringArgumento de TuringMesmo sem uma definição precisa de inteligência, podemos assumir que o
ser humano é inteligente
Portanto, se um programa consegue se passar por um ser humano,
podemos dizer que ele apresenta algum tipo de inteligência que, neste
caso, só pode ser artificial
Mesmo sem uma definição precisa de inteligência, podemos assumir que o
ser humano é inteligente
Portanto, se um programa consegue se passar por um ser humano,
podemos dizer que ele apresenta algum tipo de inteligência que, neste
caso, só pode ser artificial
Capacidades necessárias a um agente inteligente
processamento de linguagem natural
representação de conhecimento
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 8
aprendizagem de máquina
raciocínio automatizado
AGENTE
Capacidades necessárias a um agente
Processamento de linguagem naturalpara que o programa possa se comunicar com o entrevistador
Representação de conhecimentopara armazenar aquilo que ele sabe ou aprende na entrevista
Raciocínio automatizado
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 9
Raciocínio automatizadopara usar o conhecimento que ele tem armazenado, ao responder às
perguntas feitas pelo entrevistador
Aprendizado de máquinapara absorver novas informações que lhe são comunicadas, reconhecer
padrões e atualizar seu conhecimento
O papel da lógica na IA: conhecimento
Mas, o que é conhecimento?
Quando ouvimos uma frase do tipo “Ana sabe que ...” , em geral, espera-
A experiência mostra que:A experiência mostra que:
um aspecto fundamental do comportamento inteligente é que ele é
condicionado pelo conhecimento que um agente tem acerca de seu mundo
um aspecto fundamental do comportamento inteligente é que ele é
condicionado pelo conhecimento que um agente tem acerca de seu mundo
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 10
Quando ouvimos uma frase do tipo “Ana sabe que ...” , em geral, espera-
mos que ela seja completada com uma sentença como, por exemplo:
“está chovendo”
“se está chovendo, então a rua está molhada”
Isto sugere que, entre outras coisas, conhecimento é uma relação entre um agente ( “Ana”) e uma sentença declarativa ( “está chovendo”).
O papel da lógica na IA: raciocínio
Por exemplo, a partir do conhecimento representado pelas sentenças:
Está chovendo.
Se está chovendo, então a rua está molhada.
Outro aspecto fundamental do comportamento inteligente é que:Outro aspecto fundamental do comportamento inteligente é que:
ele resulta de raciocínio correto sobre o conhecimento que se tem disponívelele resulta de raciocínio correto sobre o conhecimento que se tem disponível
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 11
Se está chovendo, então a rua está molhada.
Se a rua está molhada, então a rua está escorregadia.
Se a rua está escorregadia, devemos usar calçado que não escorrega.
Se a rua não está escorregadia, então podemos usar qualquer calçado.
Concluímos que a melhor coisa a fazer é:
usar um calçado que não escorrega.
conhecimentoimplícito!!!
O papel da lógica na IA
Segundo [Shanahan, 1997]:
Assim, o principal papel da lógica na IA é...
garantir que novas informações possam ser corretamente extraídas do
conhecimento explicitamente armazenado por um agente.
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 12
Segundo [Shanahan, 1997]:
A melhor maneira de entender o comportamento inteligente é
considerá-lo como resultado de um raciocínio correto sobre uma
representação correta.
A lógica simbólica é o melhor formalismo para explicar as noções
de representação correta e raciocínio correto.
O papel da lógica na IA
Assim, embora existam outras abordagens computacionais
interessantes para simulação de comportamento
inteligente (conexionista e evolucionista), neste curso,
adotaremos a abordagem simbolista.
Mais precisamente, adotaremos a programação em
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 13
Mais precisamente, adotaremos a programação em lógica como paradigma para a construção de agentes
inteligentes.
Programação em lógica
Programação em lógica é...
um formalismo lógico-computacional fundamentado em três princípios básicos:
uso de linguagem formal para representação de conhecimento
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 14
uso de linguagem formal para representação de conhecimento
uso de regras de inferência para manipulação de conhecimento
uso de uma estratégia de busca para controle de inferências
Programação em lógica: linguagem formal
Uma linguagem natural é ambígua“Ana viu um homem numa montanha usando um binóculo”
Quem usava o binóculo?
“Ana, usando um binóculo, viu um homem numa montanha”
“Ana, estando numa montanha, viu um homem que usava um binóculo”
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 15
Uma linguagem formal é precisasuas sentenças
são objetos (fórmulas) com significado único
têm sintaxe e semântica bem definidas
mas também pode ser menos expressiva
Regra de inferência é um padrão de manipulação sintática que:
permite criar novas fórmulas a partir de outras existentes
em geral, simulam formas de raciocínio válidas
Exemplo (modus ponens):
Programação em lógica: regra de inferência
αβ→α
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 16
Se neva, faz frio. Está nevando. Logo, está frio.
Se vejo TV, fico com sono. Estou vendo TV. Logo, estou com sono.
β
αβ→α
Programação em lógica: estratégia de busca
Um agente pode ter uma enorme quantidade de conhecimento
armazenado
Assim como nós, ele precisa usar apenas parte de seu
conhecimento para resolver um problema
Estratégia de busca serve para decidir que parte do conheci-
mento armazenado deve ser explorada em busca da solução
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 17
mento armazenado deve ser explorada em busca da solução
Programação em lógica: idéia básica
inferência
natural
formal
fórmulas fórmula
premissas conclusãoraciocínio
semântica semântica
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 18
inferênciafórmulas fórmula
A idéia básica da programação em lógica é...oferecer um arcabouço que permita inferir conclusões desejadas, a partir
de premissas representando o conhecimento disponível, de uma forma que
seja computacionalmente viável
O sistema Prolog
Prolog é o sistema de programação em lógica mais popular que existe!
interface motor de inferência
base de conhecimento
premissas
conclusões
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 19
Interface: permite que o usuário entre com premissas codificadas em uma linguagem lógica e faça consultas para extrair conclusões destas premissas
Motor de inferência: atualiza a base de conhecimento com premissas forneci-
das pelo usuário e faz inferências para extrair informações implícitas
Base de conhecimento: armazena as premissas fornecidas pelo usuário
usuário
conclusões
O sistema Prolog: vantagens
Prolog permite representar o conhecimento que um agente tem sobre
seu mundo de uma forma simples e direta, em uma linguagem de alto
nível, tornando os programas mais compactos, flexíveis e inteligíveis
Prolog permite programação declarativa; em vez de especificar como
o computador deve proceder para resolver um problema, precisamos
apenas declarar o conhecimento que temos acerca do problema e, em
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 20
apenas declarar o conhecimento que temos acerca do problema e, em
seguida, consultar o sistema para que ele encontre a solução desejada
Em outras palavras, em Prolog, basta especificar corretamente o
problema que o motor de inferência se encarrega de descobrir como
obter sua solução
Exemplo 1 – Coloração de mapas
Problema: como colorir um mapa, usando no máximo
quatro cores, de modo que regiões adjacentes tenham
cores distintas?
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 21
B
C
D
AE
Exemplo 1 – Coloração de mapas
Solução:
Primeiramente, declaramos as cores que podem ser usadas na
coloração; isto é feito por meio de sentenças denominadas fatos.
Por exemplo, o fato cor(azul)cor(azul)cor(azul)cor(azul) estabelece que azul é uma
das cores disponíveis.
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 22
Em seguida, declaramos que a tupla (A,B,C,D,E)(A,B,C,D,E)(A,B,C,D,E)(A,B,C,D,E), cujos
componentes correspondem às regiões do mapa, é uma
coloração válida se cada um de seus componentes é uma cor e
se componentes representando regiões adjacentes no mapa têm
valores distintos; isto é feito por meio de uma sentença
denominada regra.
Exemplo 1 – Coloração de mapas
Implementação:
%%%% colorircolorircolorircolorir....plplplpl ---- colorecolorecolorecolore umumumum mapamapamapamapa usandousandousandousando nononono máximomáximomáximomáximo quatroquatroquatroquatro corescorescorescores
%%%% corescorescorescores disponíveisdisponíveisdisponíveisdisponíveis
cor(azul)cor(azul)cor(azul)cor(azul)....
cor(verde)cor(verde)cor(verde)cor(verde)....
cor(amarelo)cor(amarelo)cor(amarelo)cor(amarelo)....
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 23
cor(amarelo)cor(amarelo)cor(amarelo)cor(amarelo)....
cor(vermelho)cor(vermelho)cor(vermelho)cor(vermelho)....
%%%% restriçõesrestriçõesrestriçõesrestrições paraparaparapara aaaa soluçãosoluçãosoluçãosolução
coloração(A,B,C,D,E)coloração(A,B,C,D,E)coloração(A,B,C,D,E)coloração(A,B,C,D,E) ::::----
cor(A),cor(A),cor(A),cor(A), cor(B),cor(B),cor(B),cor(B), cor(C),cor(C),cor(C),cor(C), cor(D),cor(D),cor(D),cor(D), cor(E),cor(E),cor(E),cor(E),
AAAA\\\\=B,=B,=B,=B, AAAA\\\\=C,=C,=C,=C, AAAA\\\\=D,=D,=D,=D, BBBB\\\\=C,=C,=C,=C, BBBB\\\\=E,=E,=E,=E, CCCC\\\\=D,=D,=D,=D, CCCC\\\\=E,=E,=E,=E, DDDD\\\\=E=E=E=E....
Exemplo 1 – Coloração de mapas
Teste:
????---- coloração(A,B,C,D,E)coloração(A,B,C,D,E)coloração(A,B,C,D,E)coloração(A,B,C,D,E)....
AAAA ==== azul,azul,azul,azul,BBBB ==== verde,verde,verde,verde,CCCC ==== amarelo,amarelo,amarelo,amarelo,DDDD ==== verde,verde,verde,verde,
consulta
resposta
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 24
DDDD ==== verde,verde,verde,verde,EEEE ==== azulazulazulazul ....
Vamos usar o compilador SWI-Prolog para testar o programa!
Exemplo 1 – Coloração de mapas
Inicie a execução do compilador SWI-Prolog
Você terá acesso à tela de consultas/comandos
Digite o comando para ativação do editor de textos:
????---- emacs('colorir.pl').emacs('colorir.pl').emacs('colorir.pl').emacs('colorir.pl').
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 25
Digite o programa e compile com a opção
Compile/Compile Buffer, no menu do editor emacs
Volte à tela de consultas e digite:
????---- coloração(A,B,C,D,E).coloração(A,B,C,D,E).coloração(A,B,C,D,E).coloração(A,B,C,D,E).
Exemplo 2 – Geração de binários
Problema: gerar todos os números
binários compostos por três dígitos
Solução:
Declarar que dígitos podem ser
usados na composição de um
número binário
Definir restrições sobre
%%%% bináriobináriobináriobinário....plplplpl
%%%% dígitosdígitosdígitosdígitos bináriosbináriosbináriosbinários
dígito(dígito(dígito(dígito(0000))))....
dígito(dígito(dígito(dígito(1111))))....
%%%% restriçõesrestriçõesrestriçõesrestrições paraparaparapara aaaa soluçãosoluçãosoluçãosolução
binário(N)binário(N)binário(N)binário(N) ::::----
NNNN ==== (A,B,C),(A,B,C),(A,B,C),(A,B,C),
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 26
Definir restrições sobre
componentes de uma estrutura
representando um número binário
de três dígitos
Teste: ????---- binário(N).binário(N).binário(N).binário(N).
N = (0,0,0) ;N = (0,0,0) ;N = (0,0,0) ;N = (0,0,0) ;
N = (0,0,1) ;N = (0,0,1) ;N = (0,0,1) ;N = (0,0,1) ;
N = (0,1,0) ;N = (0,1,0) ;N = (0,1,0) ;N = (0,1,0) ;
............
NNNN ==== (A,B,C),(A,B,C),(A,B,C),(A,B,C),
dígito(A),dígito(A),dígito(A),dígito(A),
dígito(B),dígito(B),dígito(B),dígito(B),
dígito(C)dígito(C)dígito(C)dígito(C)....
digite ponto-e-vírgula para ver as respostas
Exibição de todas as soluções
Digitando ponto-e-vígula, podemos ver uma solução de cada vez
Para ver todas de uma vez, podemos usar os predicados predefinidos:
forall(C,A)forall(C,A)forall(C,A)forall(C,A) : que, para todo caso em que a condição CCCC é satisfeita, executa a ação AAAA
writeln(T)writeln(T)writeln(T)writeln(T) : que exibe o termo TTTT no vídeo
Por exemplo, veja o resultado da consulta a seguir:
????---- forall( binário(N), writeln(N) ).forall( binário(N), writeln(N) ).forall( binário(N), writeln(N) ).forall( binário(N), writeln(N) ).
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 27
????---- forall( binário(N), writeln(N) ).forall( binário(N), writeln(N) ).forall( binário(N), writeln(N) ).forall( binário(N), writeln(N) ).0, 0, 00, 0, 00, 0, 00, 0, 00, 0, 10, 0, 10, 0, 10, 0, 10, 1, 00, 1, 00, 1, 00, 1, 00, 1, 10, 1, 10, 1, 10, 1, 11, 0, 01, 0, 01, 0, 01, 0, 01, 0, 11, 0, 11, 0, 11, 0, 11, 1, 01, 1, 01, 1, 01, 1, 01, 1, 11, 1, 11, 1, 11, 1, 1
Exemplo 3 – Geração de rotas aéreas
%%%% rotasrotasrotasrotas....plplplpl
%%%% vôosvôosvôosvôos
vôo(vôo(vôo(vôo(1111,a,b),a,b),a,b),a,b).... vôo(vôo(vôo(vôo(2222,b,c),b,c),b,c),b,c)....
vôo(vôo(vôo(vôo(3333,b,d),b,d),b,d),b,d).... vôo(vôo(vôo(vôo(4444,b,e),b,e),b,e),b,e)....
vôo(vôo(vôo(vôo(5555,c,a),c,a),c,a),c,a).... vôo(vôo(vôo(vôo(6666,d,c),d,c),d,c),d,c)....
vôo(vôo(vôo(vôo(7777,d,e),d,e),d,e),d,e).... vôo(vôo(vôo(vôo(8888,e,b),e,b),e,b),e,b)....
%%%% rotarotarotarota
B
C
D
A
E
1
23
4
5
6
7
8
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 28
rota(X,X,[])rota(X,X,[])rota(X,X,[])rota(X,X,[])....
rota(X,Y,[N|R])rota(X,Y,[N|R])rota(X,Y,[N|R])rota(X,Y,[N|R]) ::::----
vôo(N,X,Z),vôo(N,X,Z),vôo(N,X,Z),vôo(N,X,Z),
rota(Z,Y,R)rota(Z,Y,R)rota(Z,Y,R)rota(Z,Y,R)....
%%%% rotasrotasrotasrotas
rotas(X,Y,M)rotas(X,Y,M)rotas(X,Y,M)rotas(X,Y,M) ::::----
length(R,N),length(R,N),length(R,N),length(R,N),
rota(X,Y,R),rota(X,Y,R),rota(X,Y,R),rota(X,Y,R),
writeln(R),writeln(R),writeln(R),writeln(R),
N=M,N=M,N=M,N=M, !!!!....
Problema: gerar todas as rotas que
levam de um aeroporto X a outro Y,
até encontrar uma de comprimento M.
Solução:
Declarar vôos
Definir o conceito de rota
Impor restrições sobre comprimento
Outros exemplos de programas
Digite:
????---- manpce.manpce.manpce.manpce.
E escolha a opção File / Demo Programs
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 29
Exercício 1 – Interface gráfica
Veja o que fazem o comandos a seguir:
????---- new(D,dialog), send(D,open).new(D,dialog), send(D,open).new(D,dialog), send(D,open).new(D,dialog), send(D,open).
????---- new(D,dialog('Teste')), send(D,open).new(D,dialog('Teste')), send(D,open).new(D,dialog('Teste')), send(D,open).new(D,dialog('Teste')), send(D,open).
????---- new(D,dialog('Teste')), new(D,dialog('Teste')), new(D,dialog('Teste')), new(D,dialog('Teste')),
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 30
new(B,button(ok)),new(B,button(ok)),new(B,button(ok)),new(B,button(ok)),
send(D,append,B),send(D,append,B),send(D,append,B),send(D,append,B),
send(D,open).send(D,open).send(D,open).send(D,open).
????---- new(D,dialog('Teste')),new(D,dialog('Teste')),new(D,dialog('Teste')),new(D,dialog('Teste')),
new(B,button(ok,message(@prolog,writeln,olá))),new(B,button(ok,message(@prolog,writeln,olá))),new(B,button(ok,message(@prolog,writeln,olá))),new(B,button(ok,message(@prolog,writeln,olá))),
send(D,append,B),send(D,append,B),send(D,append,B),send(D,append,B),
send(D,open).send(D,open).send(D,open).send(D,open).
Exercício 2 – Restaurante
Sabendo-se que:
há duas opções de entrada (salada ou pão)
três opções de prato principal (peixe, carne ou massa)
duas opções de sobremesa (sorvete, pudim)
Quais são todas as possíveis refeições completas que podem ser formadas?
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 31
entrada(salada)entrada(salada)entrada(salada)entrada(salada)....
entrada(pão)entrada(pão)entrada(pão)entrada(pão)....
prato(peixe)prato(peixe)prato(peixe)prato(peixe)....
prato(carne)prato(carne)prato(carne)prato(carne)....
prato(massa)prato(massa)prato(massa)prato(massa)....
sobremesa(sorvete)sobremesa(sorvete)sobremesa(sorvete)sobremesa(sorvete)....
sobremesa(pudim)sobremesa(pudim)sobremesa(pudim)sobremesa(pudim)....
refeição(R)refeição(R)refeição(R)refeição(R) ::::---- ............ %%%% completecompletecompletecomplete estaestaestaesta regraregraregraregra !!!!
Exercício 3 – Árvore genealógica
3.1. Declare os seguintes fatos:
Adão é pai de Abel, Caim e Seth
Seth é pai de Enos
3.2. Declare uma regra para definir a relação “avô” e teste o sistema
X Yavô
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 32
3.3. Declare a regra correspondente ao grafo a seguir, teste e corrija:
Z
paipai
X Y
Z
irmão
paipai
Fim
Recommended