52
1 Introdução Os programas construídos utilizando a lógica diretamente como linguagem de programação receberam o nome de programas lógicos. Um programa lógico é constituído por um conjunto de axiomas/hipóteses e por um conjunto de regras de inferência. De posse desse programa podemos fazer “perguntas” a ele. Essas “perguntas” na verdade são fórmulas as quais desejamos saber se podem ser deduzidas (ou não) a partir dos axiomas e regras de inferência contidos no programa lógico.

Introdução - paginapessoal.utfpr.edu.brpaginapessoal.utfpr.edu.br/kathya/Disciplinas/sistemas_inteligentes... · usualmente escreve-se como um conjunto de cláusulas. ... B Λ C

  • 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.

2

Introdução

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

Comandos de Entrada e Saída - Exemplos

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