Introdução à Lógica Computacional

Slides:



Advertisements
Apresentações semelhantes
Introdução à Linguagem Prolog
Advertisements

Introdução à Linguagem Prolog
Introdução à Linguagem Prolog
Prolog: Predicados Built-in 2
2. A Linguagem Prolog.
INF 1771 – Inteligência Artificial
Aula Prática - Prolog Sistemas Inteligentes /~if684
Prolog Programação Lógica Ícaro A. Souza.
Aula Prática - Prolog Sistemas Inteligentes /~if684
Programação Lógica com Prolog
Iº Workshop Linux da Unijorge
Inteligência Artificial: A Linguagem Prolog (Parte 1)
Reconhecimento de Padrões Métodos Sintático e Estrutural Disciplina: Tópicos em Inteligência Artificial Prof. Josué Castro.
Pseudocódigo É a técnica na construção de algoritmos mais próxima de uma linguagem de programação. Estrutura básica: Algoritmo [Variáveis:, : ] Início.
Supervisão e Redes Industriais Tutorial E3 Elipse Capítulo 14 ARMAZENAMENTO DE DADOS Felipe Domeni, Gabriel Martin, Leandro Gomes Rafael Benoliel, Tiago.
PROLOG: Linguagem de programação Phillipe Eduardo Silva de Oliveira – Unirb – Sistema de Informação – Logica Matemática e Discreta.
PROLOG: Linguagem de programação Phillipe Eduardo Silva de Oliveira – Unirb – Sistema de Informação – Logica Matemática e Discreta.
Algoritmos e Programação utilizando Visualg
Estruturas de Repetição
Aula 3 - Estruturas de Repetição
Casamento de Padrão Aproximado e Compressão de Huffaman
Confiabilidade Estrutural
Linguagem Digital Introdução à Lógica Celso Medeiros 6EF B Tarde
Estruturas de Repetição
Álgebra Relacional Vania Bogorny.
Introdução à Programação
Tuplas CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA
Construção de Compiladores
Prof. Gerson Pastre de Oliveira
Teoria da Computação Prof. Msc. Ricardo Loiola
IP – Listas Prof. Eduardo Falcão.
Introdução ao VisuALG Prof. Andrew Rodrigues
Módulo I Capítulo 2: IDE e Variáveis
FUNDAMENTO DE PROGRAMAÇÃO LINGUAGEM C - CONCEITOS FUNDAMENTAIS
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Prof. Wellington Franco
FUNDAMENTO DE PROGRAMAÇÃO
Programação Lógica: PROLOG
Representação de um Algoritmo na Forma de Pseudocódigo
Estrutura de dados Pilhas e filas
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTOS DE PROGRAMAÇÃO
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO
CREATED BY RAFAEL S. T. VIEIRA
Arquitetura I Aulas 5 e 6 – Álgebra de Boole e Simplificação de Circuitos Lógicos.
Algoritmos e Técnicas CEFET/RN.
Introdução à Computação
PROGRAMAÇÃO I UNIDADE 3.
Algoritmos e Programação I

Listas Encadeadas.
Algoritmos Prof.: Carlos Alberto _1:
3. Sintaxe e Semântica.
Aula 22 Modularização 22/10/08.
Programação Estruturada Aula 1 Prof. Jorge Barreto Julho 2018.
Traduções Dirigidas por Sintaxe
Programação Orientada a Objetos
Programação Funcional
Professora Roberta Bonamichi Guidi Garcia
Linguagem de Programação I
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Computação Eletrônica Vetores e Matrizes
Estruturas de Dados em C
Laboratório I Mateus Raeder.
Representação de Algoritmos
Programação de Computadores LINGUAGEM C – AULA 03 – PROF. WELLINGTON TELLES.
Introdução a progrmação Comandos condicionais: if e switch
Aula 2 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

Introdução à Lógica Computacional PROLOG Introdução à Lógica Computacional

Prolog vem de PROgramming in LOGic Alain Colmerauer (Universidade de Aix-Marseille) provador de teoremas para implementar sistemas de Processamento de Linguagem Natural PROGRAMA = regras + fatos Significado de um programa conjunto de todas as consequências deduzíveis pela iterativa aplicação das regras sobre os fatos iniciais e os novos fatos gerados

Exemplo Programa

Termos e predicado Variável representa um elemento não especificado do domínio Sintaticamente, uma variável sempre inicia com letra maiúscula constante representa um elemento especıfico do domínio. Pode ser numérica ou uma cadeia de caracteres (tipicamente, iniciando com letra minúscula) Se P é uma fórmula atômica, Então a sua negação também é uma fórmula, representada em Prolog por \+ P Se P e Q são fórmulas, Então também a conjunção (P,Q), a disjunção(P;Q) e a condicional (P:-Q) são fórmulas não atômicas.

Convenção para a leitura das cláusulas Fato com 2 parâmetros: duas leituras possíveis trocando-se a ordem os parâmetros Exemplo-fato pai(joao,pedro) temos duas leituras: pedro é pai de joao ou joao é pai de pedro Preferimos a primeira forma, porém em Prolog não existe uma convenção padrão, fica a critério do programador. Mas tem que ser sempre da mesma forma definida

Convenção para a leitura das cláusulas Regra cabeca:-corpo o corpo pode ser constituído de uma lista de predicados, ligados por vírgula, denotando uma conjunção lógica Exemplo fem(X):-mae(X,Y) é lida como uma fórmula condicional (X é feminino) se (X é mãe de Y). tio(T,X):-pai(P,X), irmao(P,T) é lida como uma fórmula condicional (T é tio de X) se (P é pai de X) e (P é irmão de T).

Convenção para a leitura das cláusulas pai(joao, pedro). leia-se mae(sara, isaac). leia-se fem(X) :- mae(X,Y). leia-se irmao(X,Y) :- pai(P,X),pai(P,Y),X\==Y.

Convenção para a leitura das cláusulas pai(joao, pedro) leia-se Joao é pai de pedro mae(sara, isaac) leia-se Sara é mãe de Isaac fem(X) :- mae(X,Y). leia-se (X é feminina) se (X é mãe de Y ) irmao(X,Y) :- pai(P,X),pai(P,Y),X\==Y. leia-se (X é irmão de Y)se (P é pai de X) e (P é pai de Y) e (X é diferente de Y)

Perguntas O significado de um programa é o conjunto de consequências que são deduzidas a partir dos fatos e regras. Assim sendo, um sistema Prolog (isto ́e, um sistema que executa um programa Prolog) pode ser visto como um interpretador de perguntas. Para sabermos se um fato arbitrário consequência do programa, perguntamos ao sistema, que responde Sim (Yes) se for verdade e N ̃ao (No) caso contrário.

Exemplos

Exemplos

Exemplo de de conceituação

Exemplo de conceituação

PROLOG http://www.swi-prolog.org/ Versão acadêmcia Gratis Possui documentação online

PROLOG A maneira de rodar um programa é fazendo perguntas Programa clássico “Alo mundo”

Exercicio Drfinição da regra “irmãs” com dois argumentos Considerando a seguinte base de fatos: homem(alberto). mulher(ana). mulher(alice). mulher(victoria). pais(ana,vitoria,alberto). pais(alice,vitoria,alberto).

Exercicio As regras para que X e Y sejam irmãs são as seguintes:   - X e Y sejam mulheres - pais de X são os mesmos pais de Y

Exercicio As regras para que X e Y sejam irmãs são as seguintes:   - X e Y sejam mulheres - pais de X são os mesmos pais de Y irmas(X,Y) :- mulher(X), mulher(Y), pais(X,A,B), pais(Y,A,B).

Exercicio Execute o seguinte questionamento e verifique a execução do programa passo a passo no modo Trace. ?- irmas(alice,X).

Evitando Backtraking com o comando “Cut” Prolog implementa um mecanismo de backtraking, ou seja, quando uma solução é obtida, o Prolog automaticamente reinicia a busca por novas soluções a partir do estado corrente. Porém, em algumas circunstâncias esse comportamento pode não ser adequado, quando por exemplo, deseja-se encontrar apenas uma solução e otimizar o tempo de processamento. Para evitar o backtraking, pode-se utilizar o comando “Cut”, representado pelo símbolo “!”.

Evitando Backtraking com o comando “Cut” Por exemplo, dada a seguinte base de fatos, observe os questionamentos ilustrados: p(a). p(b). p(c). r(d). r(e).

Evitando Backtraking com o comando “Cut”

Forçando o Backtraking com o comando “fail” Em algumas situações é necessário forçar o Prolog a reiniciar o processo de backtraking, por exemplo, quando se deseja encontrar uma solução diferente de uma já conhecida. Neste caso pode-se utilizar o comando “fail”. A ocorrência do comando “fail” em um programa causa necessaria

Forçando o Backtraking com o comando “fail” Em algumas situações é necessário forçar o Prolog a reiniciar o processo de backtraking, por exemplo, quando se deseja encontrar uma solução diferente de uma já conhecida. Neste caso pode-se utilizar o comando “fail”. A ocorrência do comando “fail” em um programa causa necessaria

Forçando o Backtraking com o comando “fail”

Exercicios 1- Declare uma base de fatos representando as seguintes relações dentro da sua família: casado(X,Y). % X é casado com Y pai(X,Y). % X é pai de Y 2- A partir das relações anteriores escreva regras que representem: mae(X,Y) % X é mae de Y irmao(X,Y % X é irmao de Y tio(X,Y) % X é tio de Y avo(X,Y) % X é avo de Y avo_(X,Y) % X é avó de Y pai1(X,Y) % X é pai ou mãe de Y primo(X,Y) % X é primo de Y

Exercicios Base de Fatos animal(onca). animal(papagaio). 1-Dada a seguinte base de fatos, utilize os comandos “!” e “fail” para representar a relação “Ana gosta de animais, exceto macaco.” (Negação por falha) Base de Fatos animal(onca). animal(papagaio). animal(macaco). animal(cachorro). animal(gato).

PROLOG Como carregar um programa fonte duplo clique sobre o arquivo com extensão ’.pl’ ou usando o predicado consult.

Erros comuns de sintaxe Falta de ponto final

Erros comuns de sintaxe Falta de ponto final Usar sempre apostrofo com nomes de arquivos consult e reconsult ou [’arquivo.pl’]. Se o nome do arquivo é uma palavra que inicia com letra minúscula e sem extensão, não é necessário usar apostrofo Usar aspas causa um problema, porque um conjunto de caracteres entre aspas corresponde a uma lista dos códigos ASCII dos caracteres, por exemplo, ?- "abc"= [97,98,99] Portanto, consult("abc") é o mesmo que consult([97,98,99]). Sempre devemos usar apóstrofos: ?- [’abc’]. ?-consult(’abc’). Para especificar um caminho para um arquivo também use apóstrofos, por exemplo, ?- consult(’C:/ prolog/ pai.pl’).

Erros comuns de sintaxe Falta de ponto final Usar sempre apostrofo com nomes de arquivos Variáveis iniciam por maiúscula e nomes de predicados por minúsculas

Erros comuns de sintaxe Falta de ponto final Usar sempre apostrofo com nomes de arquivos Variáveis iniciam por maiúscula e nomes de predicados por minúsculas Não deixar brancos entre o nome do predicado e o abre parênteses

Erros comuns de sintaxe Falta de ponto final Usar sempre apostrofo com nomes de arquivos Variáveis iniciam por maiúscula e nomes de predicados por minúsculas Não deixar brancos entre o nome do predicado e o abre parênteses Tentar definir um predicado predefinido Avaliar uma expressão aritmética com variáveis livres

Erros comuns de sintaxe Falta de ponto final Usar sempre apostrofo com nomes de arquivos Variáveis iniciam por maiúscula e nomes de predicados por minúsculas Não deixar brancos entre o nome do predicado e o abre parênteses Tentar definir um predicado predefinido Avaliar uma expressão aritmética com variáveis livres Usar operadores não definidos

Listas em PROLOG Listas são estruturas de dados bastante comuns em linguagens de programação. Consiste numa sequência ordenada de elementos que pode ter qualquer tamanho. Em Prolog, uma lista é representada por uma sequência de elementos entre “[]” separados por vírgula. Uma lista vazia é representada por “[]”. Cada elemento pode ser qualquer tipo de termo, inclusive uma outra lista. Exemplos:  [a] [o, homem, [gosta,pescar]] [a,V1,b,[X,Y]] []

Manipulação de listas em PROLOG A manipulação de uma lista em Prolog é feita dividindo a lista em Cabeça e Corpo utilizando o símbolo “|”. Cabeça é instanciada com o primeiro elemento da lista e Corpo é instanciada com uma outra lista contendo os elementos restantes da lista inicial.

Listas

Lista [a b c]

Linguagem Simplificada

Construção de Listas Listas são manipuladas pela unificação de variáveis

Exemplos

Exemplos

Exemplos

Exemplos

Exemplos

Exemplos

Exemplos

Exemplos

Programação Recursiva em PROLOG Vamos implementar a versão compr que dá o mesmo resultado que o predicado length de PROLOG

Exercícios Implementar os seguintes predicados: n_elementos(Lista,N) % N é o número de elementos da lista Lista concatena(Lista1,Lista2,Lista) % Lista é a concatenação de Lista1 com Lista2 insere(Elemento,Lista,Lista2) % Insere o elemento Elemento em Lista resultando em Lista2 insere(Elemento,Pos,Lista,Lista2) % Insere o elemento Elemento em Lista na posição Pos resultando em Lista2 inverte(Lista,Lista1) % Lista1 é a lista Lista invertida.

Predicados Prolog Consulta a arquivos: ?- consult(‘Arquivo.pl’). Consulta o arquivo Arquivo.pl tornando disponíveis em memória as cláusulas dos programas existentes em Arquivo.pl. ?- reconsult(‘Arquivo.pl’). Trabalha de forma semelhante a consult/1 exceto que as cláusulas lidas no arquivo irão sobrepor as cláusulas correspondentes na base de conhecimento. ?- [‘Arquivo.pl’] É equivalente a consult/1 ?- [-‘Arquivo.pl’] É equivalente a reconsult/1

Predicados de I/O ?- read(A). Carrega em A a entrada da stream corrente. ?- nl. Salta para a próxima linha. ?- tab(X). Imprime o número X de espaços em branco. ?- write(X). Imprime o conteúdo da variável X.

Encontrando múltiplas soluções de um predicado ?- bagof(A,B,Lista) Retorna uma lista não ordenada de todas as soluções instanciadas em A a partir da execução (ou prova) de B. Se a lista for uma lista vazia (não houver solução para B), o predicado falha. Exemplo1: Dada a seguinte base de fatos:   irmao(pedro, paulo). irmao(pedro,joao). irmao(pedro,jose). ?- bagof(A,irmao(pedro,A),Lista). A = _ , Lista = [paulo,joao,jose] Existem outros predicados com funcionalidades parecidas: Fundall e setof

Predicados de Controle Predicados fail, true e repeat Operador de corte ! Comandos condicionais If-Then e If-Then-Else Negação por falha