Upload
lehanh
View
225
Download
0
Embed Size (px)
Citation preview
1
Introdução
� Os programas construídos utilizando a lógicadiretamente como linguagem de programaçãoreceberam o nome de programas lógicos.
� Um programa lógico é constituído por um conjunto deaxiomas/hipóteses e por um conjunto de regras deinferência.
� De posse desse programa podemos fazer “perguntas” aele. Essas “perguntas” na verdade são fórmulas as quaisdesejamos saber se podem ser deduzidas (ou não) apartir dos axiomas e regras de inferência contidos noprograma lógico.
3
Introdução
� As “perguntas”, que na verdade são fórmulas, as quaissão submetidas ao programa lógico constituem aentrada do programa lógico.
� Dada uma entrada, diz-se que o processo de tentardemonstrar essa entrada a partir dos axiomas e regrasde inferência do programa lógico é a execução doprograma lógico.
� Esta noção se identifica com a noção de computação damáquina de Turing.
4
Introdução
� Paralelamente aos trabalhos de Robert Kowalski, AlainColmerauer e seus colegas desenvolveram umprograma que capturava a idéia do mecanismo de tentarprovar as “perguntas” (fórmulas) a partir de um conjuntode axiomas e regras de inferência:� Esse programa recebeu o nome PROLOG (do francês
“PROgramation et LOGique”).
5
Linguagem Prolog
� Início da década de 70: colaboração entreuniversidades.
� Colmerauer e Roussel (Marseille):processamento de linguagem natural.
� Kowalski (Edinburgh): prova automatizada deteoremas.
� Desenvolvimento independente a partir demeados de 70.
6
Definições e ConceitosLógica Proposicional
� Formas Normais (FN)� Conversão para FN� Cláusulas� A Regra da resolução� Resolução por Refutação� Prova por Refutação
Cláusula: sentença, afirmação.
7
Formas Normais
� Uma fbf está na Forma Normal Conjuntiva (FNC) se é uma conjunção de disjunções:
�� ∧ �� ∧ �� ∧ ⋯∧ ��
Onde cada cláusula ��, tem a forma:
� ∨ � ∨ � ∨ ⋯∨ �
Todos os ’s são literais*.
Exemplo: � ∧ ∨ � ∧ ¬� ∨ ¬ ∨ ¬� ∨
fbf : formula bem formada*Um literal é uma fórmula atômica, isto é, não possui conectivos lógicos
8
Formas Normais
� Similarmente, uma fbf esta na Forma Normal Disjuntiva (FND) se é uma disjunção de conjunções:
Exemplo:
� ∨ ∧ � ∨ ¬� ∧ ¬ ∧ ¬� ∧
9
Transformação para Formas Normais
� Qualquer fbf pode ser transformada para FNC pelo uso das seguintes equivalências:
1. � ↔ ≡ � → ∧ → �
2. � → ≡ ¬� ∨
3. ¬ � ∧ ≡ ¬� ∨ ¬
4. ¬ � ∨ ≡ ¬� ∧ ¬
5. ¬¬� ≡ �
6. � ∨ ∧ � ≡ � ∨ ∧ � ∨ �
Importante: a transformação pode ser feita dentro do algoritmo, o que será útil para a resolução automática.
10
Cláusulas
� Tendo transformado a fbf para a FNC,usualmente escreve-se como um conjunto decláusulas.
Exemplo: � → → �
Sua FNC: � ∨ � ∧ ¬ ∨ �
Sua forma clausal: �, � , ¬, �
11
A Regra da Resolução
� A regra da resolução estabelece a partir de � ∨ � e ¬� ∨ � pode ser inferido � ∨ �
� Isto é, dadas duas cláusulas que possuam um literal e sua negação, podem-se combinar elas pela remoção do literal.
Exemplo: �, � , ¬�,
Aplicando a Regra da Resolução: �,
12
Prova por Refutação
� Para provar que um argumento lógico é válido, nega-se a conclusão e transforma-se na forma clausal, a seguir tenta-se demonstrar que é falso usando a resolução.
� Se encontrar que é falso, logo nossas cláusulas foram inconsistentes e o argumento original era válido.
13
Prova por Refutação
� Seja o argumento:� ∧ ¬ → �
� ∧ ¬
∴ �
� Negar a conclusão e transformar em cláusulas:¬�, , � , �, ¬,¬�
� Resolver:, � ,¬,¬�
�,¬�
⊥
� Foi encontrado falso, o argumento original era válido.
14
Definições e ConceitosLógica dos Predicados
� Formas Normais Prenex� Skolemização� Unificação� O Algoritmo da Unificação� O Algoritmo da Resolução� Cláusulas de Horn em PROLOG
Forma Normal Prenex
�Uma fbf na Lógica dos Predicados pode ser escrita naForma Normal Prenex pela transformação dela para aFNC, com a passagem dos quantificadores no início daexpressão.Exemplo:
∀� � � → � → ∃� � � ∧ �
Transformação para a Forma Normal Prenex
∃� ∃� � � ∨ � � ∧ ¬ � ∨ � � ∧ � � ∨ � ∧ ¬ � ∨ �
15
Skolemização
�Skolemização remove o quantificador ∃ e substituias variáveis quantificadas por uma constante.Exemplo:
∃(x) P(x)Passa para:
P(c)
c não deve existir na expressão antes desta operação.
16
Funções Skolem
�Se a variável quantificada pelo existencial esta dentro do escopo de uma variável quantificada pelo universal, este deve ser substituído por uma função skolem , a qual é uma função da variável quantificada pelo universal.Exemplo:
∀� ∃� � �, �
Skolemização:
∀� � �, � �
�Após a skolemização, ∀ é substituído, e a expressãoé transformada para uma cláusula da maneira usual.
17
Unificação
�É uma substituição que se aplica a um conjunto de cláusulas para permitir a resolução dessas cláusulas.
�Uma substituição α é um conjunto finito da forma:
��/ �, ��/ �, …��/ �,
onde:�� é uma variável; � é um termo distinto de ��
as variáveis ��, …… , �� são distintas.
18
Unificação
Exemplo:
Seja a expressão: � ", � , ¬� �, #
E a substituição: "/�, �/#
Substituindo: � �, # , ¬� �, #
Resolvendo: A expressão é falsa
19
Unificação
�Um unificador (u) é o Unificador Mais Geral (umg) se qualquer outro unificador pode ser formado pela composição de u com algum outro unificador.
�Um algoritmo pode ser implementado para buscar o umg de um conjunto de cláusulas.
20
O Algoritmo da Resolução
1. Primeiro, negar a conclusão e adicionar a este a lista de premissas.
2. Transformar as premissas na Forma Normal Prenex
3. Skolemizar a expressão resultante do passo 2
4. Transformar a expressão em um conjunto de cláusulas
5. Resolver as cláusulas utilizando unificadores adequados.
Este algoritmo significa que podem ser escritos programas que provam automaticamente teoremas utilizando a Resolução.
21
Cláusulas de Horn em Prolog
� Prolog usa a resolução.� A cláusula de Horn tem no máximo um literal positivo:
A v ¬B v ¬C v ¬D v ¬E …
� Este pode ser também escrito como uma implicação:
B Λ C Λ D Λ E → A
� Em Prolog é escrito como:
A :- B, C, D, E
� Se um conjunto de cláusulas é válida, PROLOGdefinitivamente vai provar isso usando Resolução e Busca emProfundidade.
22
Cláusulas de Horn em Prolog
�As cláusulas de Horn podem ser expressas como regras:
� ← , �, , %
A :- B, C, D, E
�Também chamadas de cláusulas positivas.Exemplo:“Todo número natural é um número inteiro.”inteiro(N) ← natural(N).
23
Cláusulas de Horn em Prolog
�As cláusulas de Horn podem ser expressas como fatos:
� ←
A :-
�Também chamadas de cláusulas incondicionais.Exemplo:“3 é um número natural”natural(3) ←
24
Cláusulas de Horn em Prolog
�As cláusulas de Horn podem ser expressas como objetivos:
← , �, , %
:- B, C, D, E
�Também chamadas de cláusula negativa (consulta).Exemplo:“Será 3 um número inteiro?”
←inteiro(3)
�Processo de dedução: Se 3 é um número natural (fato) e todo número natural é um inteiro, então prova-se que 3 é um número inteiro.
25
Prolog: Aplicações
� Inteligência artificial� Sistemas especialistas: raciocínio dedutivo utilizando fatos e
regras como base do conhecimento.
�Bancos de dados� Deduzir informações a partir dos dados no banco.
� Processamento de linguagem natural� IBM Watson (2011).
�Educação� Ensino de lógica, contribuindo para pensamento e
expressão mais claros.
26
Prolog: Vantagens e desvantagens
�Vantagens� É de aprendizado muito mais fácil e natural do que as
linguagens procedimentais convencionais.� Implementa com precisão os os novos modelos surgidos
nos últimos anos, inclusive redes neurais, algoritmos genéticos, sociedades de agentes inteligentes, sistemas concorrentes e paralelos.
� Permite a implementação de extensões, inclusive em nível meta, e a definição precisa de sistemas reflexivos (essenciais, por exemplo, à robótica).
� Libera o programador dos problemas associados ao controle de suas rotinas, permitindo-lhe concentrar-se nos aspectos lógicos da situação a representar.
27
Prolog: Vantagens e desvantagens
�Desvantagens� Eficiência.� Baixa expressividade para certas aplicações.
28
Prolog: Características
� Linguagem declarativa, o programa não estipula a maneira de chegar à solução passo-a-passo (linguagens procedimentais ou orientadas a objeto), mas, fornece uma descrição do problema que se pretende computar utilizando lógica, expressa por uma coleção de fatos e regras que indicam como deve ser resolvido o problema proposto.
� É mais direcionado ao conhecimento do que aos próprios algoritmos.
� Não possui estruturas de controle (if-else, do-while, for, switch) presentes na maioria das linguagens de programação.
� Utiliza métodos lógicos para declarar como o programa deverá atingir o seu objetivo.
� Pode rodar em um modo interativo, o usuário poderá formular consultas utilizando os fatos e as regras para produzir a solução através do mecanismo de unificação
29
Programando em Prolog� Os dados representados em Prolog podem ser um dos seguintes tipos:
– variáveis: iniciadas com maiúsculas ou underline (_), seguidos de qualquer caractere alfanumérico. Underline define uma variável anônima.
Ex. de variáveis: X, Y1, Nome, _, ...;– átomos: são constantes, iniciadas com minúsculas seguidas de qualquer
caractere alfanumérico ou qualquer sequência entre ‘ ’ (aspas simples).
Ex. de átomos: joao, ‘João’, ‘16’, ...;– inteiros: números sem casa decimal.
Ex. de inteiros: 1, 6, -3....
– floats: números com um ponto (.) e pelo menos uma casa decimal.
Ex. de floats: 5.3 (correto), 7. (incorreto), ...;– listas: sequência ordenada de elementos entre [ ] e separados por vírgulas.
Caracteres ASCII entre “ ” (aspas duplas) representam listas de inteiros.Ex. de listas: [ ‘a’, ‘b’, ‘c’], [1 | 2, 3], ‘‘michel’’ representa [109,105,99,104,101,108]...
Programando em Prolog
Variáveis e Átomos
• Variáveis são utilizadas de acordo com o comando:predicado(at 1,Var 1[,at/Var 2,...,at n/Var n]).
Onde: Var = variávelat = átomo
• Átomos representam os valores que podem ser atribuídos àsvariáveis.
– Ex.: ?- amiga(joana,Quem).
variávelátomo
Predicado
Programando em Prolog
Exemplos:
a) vINCENT i) Fastfood
b) 23 j) 65.
c) Variable2000 k) 23.0
d) [‘a’, ‘b’, ‘c’] l) variável
e) variable23 m) ‘aulas de lógica’
f) aulas de lógica n) Var
g) ‘Joao’ o) “Casa”
h) [1, [2, 3], 4] p) []
ÁTOMO
LISTA
INTEIRO
VARIÁVEL
ÁTOMO
INVÁLIDO
ÁTOMO
LISTA
VARIÁVEL
INVÁLIDO
FLOAT
ÁTOMO
ÁTOMO
VARIÁVEL
LISTA
LISTA
Programando em PrologFatos
• Baseiam-se no seguinte comando:
predicado(at 1[,at 2,...,at n]).
Onde:
– predicado = relação;
– at i = objetos/átomos sobre os quais atuam a relação.Ex.: fato com dois argumentos (relação amiga):
amiga(joana, maria)
Predicado Átomos
Programando em Prolog
• No Prolog, todos os comandos devem ser finalizados com (.) e os predicados devem ser escritos em letras minúsculas....OBRIGATORIAMENTE:
Exemplo
?- atom(vINCENT) .
?- var(X) .
?- is_list([a, b, c]).
?- number(23).
Programando em Prolog
Exemplos de fatos:
a) animal(urso). b) animal(peixe).c) planta(alga). d) planta(grama). e) come(urso, peixe). f) come(coelho, leão).g) menor(formiga, tamanduá). h) menor(elefante, cavalo). i) proximo(‘JP’, ‘CG’). j) proximo(Brasil, Japao).
Programando em Prolog
Questões/Consultas
• Consultas ao sistema são constituídas por um ou mais objetivos, cuja sequência denota a sua conjunção;
• Uma resposta a uma consulta pode ser positiva ou negativa,dependendo se o objetivo correspondente foi alcançado ou não. Noprimeiro caso dizemos que a consulta foi bem-sucedida e, nosegundo, que a consulta falhou;
• Se várias respostas satisfizerem a uma consulta, então o sistemaProlog irá fornecer tantas quantas forem desejadas pelo usuário.
Programando em Prolog
Questões/Consultas
• Basicamente representam um fato antecedido de um pontode interrogação ou comando que indique a formulação deuma questão.
– Ex.:
?- genitor(pam, bob).
Programando em Prolog
Questões/Consultas
• A cláusula “genitor(_, bob).” é uma consulta Prolog, pois, “_” é umavariável anônima, que representa alguém, algum.
• Para responder consultas o Prolog utiliza:– matching - checa se determinado padrão está presente, para saber quais fatos
e regras podem ser utilizados;
– unificação - substitui o valor de variáveis para determinar se a consulta ésatisfeita pelos fatos ou regras da base (programa);
– resolução - verifica se uma consulta é consequência lógica dos fatos e regrasda base (programa);
– recursão - utiliza regras que chamam a si mesmas para realizardemonstrações;
– backtracking - para checar todas as possibilidades de resposta.
Programando em Prolog
�Um programa Prolog consiste em cláusulas terminadaspor pontos.
�Cláusulas podem ser de 3 tipos:
� fatos: declaram algo que é sempre verdadeiro
� regras: declaram algo que é verdadeiro em uma dada condição
� consultas: descobrem se uma determinada meta é verdadeira
papagaio(‘Jose’).ave(X):-papagaio(X).?-ave(‘Jose’).
Programando em Prolog
�“Jose é um papagaio”
� "Todo papagaio é uma ave" (ou "se X é um
papagaio, então X é uma ave")
� Jose é uma ave?
papagaio(‘Jose’).
ave(X):-papagaio(X).
?-ave(‘Jose’).yes
fato
regra
consulta
resposta
Programando em Prolog
Conjunção
• A conjunção permite a composição de fatos (e lógico):
pred(at 1/Var 1,...at n/Var n) ,
pred(at 1/Var 1,...at n/Var n).
– Exemplo:
amiga(joana,maria) , amiga(clara,maria).
Programando em Prolog
Disjunção
• A disjunção é o oposto da conjunção, equivale ao ou lógico:
pred(at 1/Var 1,...at n/Var n) ;
pred(at 1/Var 1,...at n/Var n)
– Exemplo:
homem(darci) ; mulher(darci).
Programando em Prolog
• Exemplo:
Para os fatos abaixo:gosta(julio,peixe). gosta(julio,maria).gosta(maria,livro). gosta(joao,livro).
As consultas para as seguintes questões:a) Quem gosta de livro?b) Quem gosta de livro e chocolate?c) Alguém gosta de livro ou chocolate?
Seriam:? gosta(X,livro).? gosta(X,livro), gosta(X,chocolate).? gosta(X,livro); gosta(X,chocolate).
?- gosta(X, livro).?- gosta(X, livro), gosta(X, chocolate).
?- gosta(_, livro); gosta(_, chocolate).
Programando em PrologRegras
• A capacidade do PROLOG não se limita à busca em uma base deconhecimentos; é possível armazenar regras.
• Regras facilitam a execução de consultas e tornam um programa muitomais expressivo.
• Uma regra indica a validade de um conjunto de fatos, questões ouconjunções.
• Uma cláusula Prolog é equivalente à uma fórmula em lógica de 1ªOrdem, então, em Prolog, existem os conectivos:
:- se, equivalente à implicação;, e, equivalente à conjunção;; ou, equivalente à disjunção.
Prolog
Regras – Prolog e Lógica de 1ª Ordem
• A fórmula: B(x) ∨ (C(x) ∧ D(x)) → A(x)
• Seria escrita em Prolog como: a(X) :- b(X); (c(X), d(X)).
• Prolog não utiliza quantificadores explicitamente, porém,trata todas as regras como se elas estivessem universalmentequantificadas .
Programando em PrologRegras
• As regras definem as condições que devem ser satisfeitas para que uma certadeclaração seja considerada verdadeira.
masculino(joao). masculino(jose). feminino(maria).genitor(joao, jose). genitor(maria, jose). genitor(jose, iris).mae(X,Y) :- genitor(X,Y), feminino(X).pai(X,Y) :- genitor(X,Y), masculino(X).avo(X,Z) :- genitor(X,Y), genitor(Y,Z).
• Com estas definições podemos obter os seguintes resultados:
?- mae(X, jose).X = maria;
?- pai(X, iris).X = josé;
?- avo(X, iris).X = joao;
Programando em PrologEm resumo:
• Programas Prolog podem ser ampliados pela simples adição de novascláusulas;
• As cláusulas Prolog podem ser de três tipos distintos: fatos, regras econsultas:
– Os fatos declaram coisas que são incondicionalmente verdadeiras.
Ex.: mae(maria, joana).
– As regras declaram coisas que podem ser ou não verdadeiras, dependendo dasatisfação das condições dadas.
Ex.: filha(joana, maria) :- mae(maria, joana).
– Por meio de consultas podemos interrogar o programa acerca de que coisassão verdadeiras.
Ex.: ?- filha(maria, _).
Programando em Prolog
Comandos de Entrada e Saída
• Os comandos write e read, escrevem e lêem sobre osarquivos padrão (monitor e teclado).
• Para escrever basta utilizar o comando write(+termo):write(‘Teste de impressão.’). (Correto) write(Teste de impressão.). (Errado)write(X). (Correto)write(joao). (Correto)
• Para ler deve-se usar o comando read(+var):read(X). (Correto) read(x). (Errado)read(Joao). (Correto) read(joao). (Errado)
Programando em Prolog
• Alguns caracteres são especiais para impressão, são eles:nl, \n, \l - nova linha.
\r - retorna ao início da linha;
\t - tabulação;
\% - imprime o símbolo %;
Programando em Prolog
• Existem dois tipos de comentários em Prolog, são eles:
% Comenta toda a linha após o símbolo ;
/* */ Comenta todo o texto entre os símbolos.
– Exemplo de uso de comentário
/* Descrição dos predicados homem e mulher. */
homem(pedro). % representa o fato de que pedro é homem.
mulher(teresa). % representa o fato de que teresa é mulher.
Programando em Prolog
• Exemplo de uso de comando de escrita
• humano(socrates). % fatos sobre quem é humano
• humano(aristoteles).
• humano(platao).
• deus(zeus). % e quem é deus
• deus(apollo).
• mortal(X) :-humano(X). % regra sobre quem é mortal
• mortal_report :-
write('Mostre todos os mortais conhecidos:'), nl, nl,
mortal(X),
write(X), nl,
fail.
Obtém-se o seguinte resultado