Linguagem Lógica Prolog



Documentos relacionados
Práticas de Programação em Lógica. José Romildo Malaquias

Paradigmas de Linguagens de Programação

Roteiro de Aula Prática

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Faculdade Pitágoras 24/10/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

AULA 6 LÓGICA DOS CONJUNTOS

Renata de Freitas e Petrucio Viana. IME, UFF 12 de março de 2015

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

FUNÇÃO COMO CONJUNTO R 1. (*)= ou, seja, * possui duas imagens. b) não é uma função de A em B, pois não satisfaz a segunda condição da

Capítulo 1. x > y ou x < y ou x = y

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Orientação a Objetos

¹CPTL/UFMS, Três Lagoas, MS,Brasil, ²CPTL/UFMS, Três Lagoas, MS, Brasil.

Matemática - UEL Compilada em 18 de Março de Prof. Ulysses Sodré Matemática Essencial:

)HUUDPHQWDV &RPSXWDFLRQDLV SDUD 6LPXODomR

EXERCÍCIOS LÓGICA DE PRIMEIRA ORDEM - MODELOS

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Geração de código intermediário. Novembro 2006

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

Introdução à Engenharia de Computação

Algoritmos e Estrutura de Dados III. Árvores

Estruturas de Repetição

VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior Felipe Schneider Costa

Só Matemática O seu portal matemático FUNÇÕES

AULA 12 FUNÇÕES Disciplina: Algoritmos e POO Professora: Alba Lopes alba.lopes@ifrn.edu.br

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Python Funções. Introdução à Programação SI1

CAP. I ERROS EM CÁLCULO NUMÉRICO

1 Máquina URM, comandos e programas URM

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Estruturas de entrada e saída

Aritmética Binária e. Bernardo Nunes Gonçalves

Complexidade de Algoritmos. Edson Prestes

Dadas a base e a altura de um triangulo, determinar sua área.

Orientação a Objetos

Objetos Estruturados Listas Recursão Exercícios. Inteligência Artificial

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

EQUAÇÕES E INEQUAÇÕES DE 1º GRAU

Algoritmos Computacionais ( Programas )

INF 1771 Inteligência Artificial

Algumas vantagens da Teoria das Descrições Definidas (Russel 1905)

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

3. Tipos de Dados, Constantes e Variáveis.

Universidade da Beira Interior Cursos: Engenharia Informática, Ensino da Informática, Matemática Aplicada e Matemática /Informática

O que é a estatística?

Álgebra Relacional. OBS: as operações Seleção e Projeção são operações unárias porque atuam em relações únicas.

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar

Programação II. Aula 2

Introdução à Lógica de Programação

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Construção de tabelas verdades

Disciplina: Unidade III: Prof.: Período:

TÉCNICAS DE PROGRAMAÇÃO

ROTEIRO PARA ELABORAÇÃO DE PROJETOS

CAPÍTULO 2. Grafos e Redes

Introdução a Informática. Prof.: Roberto Franciscatto

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

Representação do Conhecimento

Sociedade Brasileira de Matemática Mestrado Profissional em Matemática em Rede Nacional. n=1

Banco de Dados. Álgebra Relacional. Prof. Enzo Seraphim

OTIMIZAÇÃO VETORIAL. Formulação do Problema

Resolução de problemas e desenvolvimento de algoritmos

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Programação: Estruturas de seleção

ALGORITMOS E FLUXOGRAMAS

Sistema de Gestão de Freqüência. Manual do Usuário

Disciplina de Banco de Dados Introdução

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

1. Sistemas de numeração

ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF

Sistemas de Representação e Raciocínio

Conceito de pesquisa

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Diagrama de transição de Estados (DTE)

Matemática Discreta - 03

Português- Prof. Verônica Ferreira

2. Representação Numérica

Prof.: Clayton Maciel Costa

Problemas insolúveis. Um exemplo simples e concreto

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Engenharia de Requisitos Estudo de Caso

SQL consulta com operadores

Contagem. Prof. Dr. Leandro Balby Marinho. Matemática Discreta. Fundamentos Inclusão/Exclusão Princípio da Casa dos Pombos Permutações Combinações

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Análise e Projeto Orientados a Objetos Aula IV Requisitos. Prof.: Bruno E. G. Gomes IFRN

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Algoritmos com VisuAlg

Linguagem algorítmica: Portugol

Leia o texto abaixo para resolver as questões sobre população e amostra.

Transcrição:

Linguagem Lógica Prolog Linguagens de Programação Departamento de Computação Universidade Federal de Sergipe

Conteúdo O que é diferente na Programação Lógica Cláusulas, Fatos, Regras e Predicado Objetos e suas Relações Consultas Tuplas, Átomos, Variáveis e Aridade Regras Comparação de Termos Recursividade Disjunção e Conjunção Linguagens de Programação 2

O que é diferente na Prog. Lógica Num algoritmo qualquer identificamos dois principais componentes: lógica - o que solucionar (problema) controle - como solucionar (solução). Na programação em lógica o programador deve descrever somente o componente lógico. O controle é exercido pelo sistema usado. Linguagens de Programação 3

O que é diferente na Prog. Lógica Um programa não é a descrição de um procedimento para se obter a solução do problema. Somente descreve o que solucionar. O responsável pelo procedimento a ser adotado na execução da solução é o sistema usado no processamento dos programas. Linguagens de Programação 4

O que é diferente na Prog. Lógica Um programa em lógica (programação declarativa) é a representação de determinado problema através de um conjunto finito de sentenças lógicas denominadas cláusulas. As cláusulas componentes dos programas em PROLOG podem ser fatos ou regras. Linguagens de Programação 5

O que é diferente na Prog. Lógica A programação declarativa engloba também a programação funcional (LISP e Haskell, por exemplo). Programar em uma linguagem funcional consiste em construir funções, expressas obedecendo a princípios matemáticos, para resolver um problema dado. Linguagens de Programação 6

Cláusulas, Fatos, Regras e Predicado Cláusulas são as sentenças lógicas componentes dos programas. Um fato denota uma verdade incondicional. As regras definem as condições a serem satisfeitas para que uma certa declaração seja considerada verdadeira. O conjunto completo de cláusulas (fatos e regras) empregados para descrever uma relação, é denominado predicado. Linguagens de Programação 7

Objetos e suas Relações A programação em lógica reforça a tese de que a lógica é um formalismo conveniente para representar e processar conhecimento. Para tanto faz-se necessário identificar nos problemas objetos (entidades) relação entre estes, compondo os fatos (verdades incondicionais) Linguagens de Programação 8

Objetos e suas Relações É possível definir, entre os objetos (indivíduos) uma relação chamada progenitor. progenitor(jo, ze). progenitor(iris, gal). Gil Tel Linguagens de Programação 9

Objetos e suas Relações Cláusula: progenitor(jo, ze). Sendo: progenitor(jo, ze). RELAÇÃO ARGUMENTOS Gil Tel Linguagens de Programação 10

Objetos e suas Relações Cláusulas: progenitor(jo, ze). progenitor(jo, ana). progenitor(ze, beth). Gil Tel Estas constituem três cláusulas que denotam três fatos acerca da relação progenitor. Linguagens de Programação 11

Objetos e suas Relações Cláusulas: progenitor(jo, ze). progenitor(jo, ana). progenitor(ze, beth). Exercício 1: Usando o compilador SWI-ProLog, Gil Tel implementar a árvore ao lado. Linguagens de Programação 12

Consultas Ao submeter cláusulas a um sistema PROLOG, ele é capaz de responder questões consultas sobre essas relações Essas são denotadas por?-. Exemplo: é progenitor de? Gil Tel?- progenitor(jo, ze). Linguagens de Programação 13

Consultas Considerando que há no programa um fato declarando que é progenitor de, o sistema responde yes. Exemplo: é progenitor de? Gil Tel?- progenitor(jo, ze). yes Linguagens de Programação 14

Consultas é progenitor de Tel??-progenitor(jo, tel). no Importante observar que e Tel, por tratarem-se de constantes, são escritos, em ProLog, com letras minúsculas. Exercício 2: Elaborar 3 consultas relativas à árvore Gil Tel dada, cujas respostas sejam negativas. Linguagens de Programação 15

Consultas É possível também formular consultas usando variáveis V (iniciadas com letras maiúsculas) dentre os argumentos. Neste caso o sistema busca valores para V que tornem a assertiva dada verdadeira. Exemplo: Quem é o progenitor de Tel? Gil Tel?- progenitor(pai, tel). Pai = lipe Linguagens de Programação 16

Consultas Exemplo: Quem são os filhos de??- progenitor(jo, Filho). Filho = ze; Filho = ana; no. Respondendo à consulta, o sistema fornece o 1 valor e aguarda (;) para continuar a pesquisa. Gil Tel Importante atentar para a necessidade de usar nomes significativos para as variáveis. Linguagens de Programação 17

Consultas Exercício 3: Sobre a cláusula dada a seguir responda: progenitor(x, X). a) a que consulta corresponde? b) em que situação tem resposta? Exercício 4: Elabore cláusula cuja resposta corresponda a todas as relações existentes na Gil Tel árvore genealógica trabalhada. Linguagens de Programação 18

Consultas É possível elaborar consultas por múltiplas chamadas à(s) regra(s) trabalhadas. Exemplo: Quem é a avó Gil Tel de Gil??- progenitor(avo, Pai), progenitor(pai, gil). Avo = ana Pai = lipe Linguagens de Programação 19

Consultas A resolução desta é efetuada em dois passos: (1) quem é o progenitor Y de Gil? e (2) quem é o progenitor X de Y? Exemplo: Quem é a avó Gil Tel de Gil??- progenitor(avo, Pai), progenitor(pai, gil). Avo = ana Pai = lipe Linguagens de Programação 20

Consultas A ordem de composição da consulta não altera o seu significado lógico. Gil Tel Exemplo: Quem é a avó de Gil??- progenitor(avo, Pai), progenitor(pai, gil). Avo = ana Pai = lipe EQUIVALENTE A?- progenitor(pai, gil), progenitor(avo, Pai). Avo = ana Pai = lipe Linguagens de Programação 21

Consultas Considerando a consulta:?- progenitor(jo, X), progenitor(x, Y). Como resolução obtém-se: (1) definição de X - filhos de (2) definição de Y - filhos de X - netos de. Assim sendo, esta consulta corresponde a: Quem são os netos de? Gil Tel?-progenitor(jo, Filho), progenitor(filho, Neto). Linguagens de Programação 22

Consultas É possível ainda consultar, por exemplo, se dois indivíduos são irmãos.?- progenitor(pai, gil), progenitor(pai, tel). Exercício 5: Consultar se dois indivíduos são primos. Gil Tel Linguagens de Programação 23

Tuplas, Átomos, Variáveis e Aridade A definição de relações em ProLog é efetuada pelo estabelecimento de tuplas de objetos que as satisfazem. Os argumentos das relações podem ser objetos concretos átomos objetos genéricos - variáveis. progenitor é uma relação binária, pois é definida entre dois objetos. Linguagens de Programação 24

Tuplas, Átomos, Variáveis e Aridade Um exemplo de relação unária é a que define o sexo dos indivíduos da árvore genealógica, ex: masculino(ze), feminino(gal). Outra forma de se declarar a informação relativa ao sexo dos indivíduos da árvore genealógica é: sexo(ana, feminino), sexo(ze, masculino). O número de argumentos que uma relação possui é denominado aridade. Assim, a aridade de masculino é 1 e a de sexo é 2. Exercício 6: Qual o significado da consulta??-masculino(macho). Linguagens de Programação 25

Regras Havendo necessidade de definição da relação filho, uma opção é (re)definir as relações progenitor como segue: filho(ana, jo). filho(ze, jo). filho(gil, lipe). Gil Tel Entretanto, é possível definir filho por meio de uma regra. Linguagens de Programação 26

Regras A regra para definição da relação filho, pode ser: filho(filho, Pai) :- progenitor(pai, Filho). Gil Tel Um fato é sempre verdadeiro, enquanto regras especificam algo que pode ser verdadeiro se algumas condições forem satisfeitas. Linguagens de Programação 27

Regras Nas regras, identificam-se: filho(filho, Pai) :- progenitor(pai, Filho). conclusão ou cabeça se condição ou corpo Elaborada a consulta: filho(tel, lipe) Dizemos que as variáveis Filho e Pai (da regra filho) foram instanciadas. Exercício 7: Elabore consultas de forma a testar a aplicação da regra que define a relação filho. filho(filho, Pai) :- progenitor(pai, Filho). Linguagens de Programação 28

Regras Para definir a regra mãe, fazemos uso da conjunção. mae(mae, Filho):- progenitor(mae, Filho), feminino(mae). Em ProLog a conjunção é denotada por vírgula. Gil Tel Exercício 8: Elabore regras para definir as relações: (a) avó e (b) irmã. Linguagens de Programação 29

Comparação de Termos Para definir a regra primo, temos: primo(primo1, Primo2):- progenitor(pai1, Primo1), progenitor(pai2, Primo2), progenitor(pai, Pai1), progenitor(pai, Pai2). Gil Tel Entretanto, obtemos como resposta, por exemplo, que é primo dele mesmo, assim como e Iris. Para evitarmos isto, podemos fazer uso de operadores de comparação de termos. Para dizermos que um termo é deferente de outros, usamos \== Linguagens de Programação 30

Comparação de Termos Então, redefinindo a regra primo, temos: primo(primo1, Primo2):- progenitor(pai1, Primo1), progenitor(pai2, Primo2), progenitor(pai, Pai1), progenitor(pai, Pai2), Primo1 \== Primo2, Pai1 \== Pai2. Gil Tel Ver também: ==, @<. @>, @=< e @=>. Linguagens de Programação 31

Recursividade Antepassado direto: antepassado(antepassado, Individuo):- progenitor(antepassado, Individuo). Antepassado indireto: antepassado(antepassado, Individuo1) :- progenitor(antepassado, Individuo2), antepassado(individuo2, Individuo1). Antepassados: antepassado(antepassado, Individuo1) :- progenitor(antepassado, Individuo1); progenitor(antepassado, Individuo2), antepassado(individuo2, Individuo1). Linguagens de Programação 32

Disjunção e Conjunção A disjunção (OU) é representada por ponto e vírgula. A conjunção (E) por uma vírgula. Para definição da relação antepassado, ambas foram usadas. Linguagens de Programação 33

Sugestões de Leitura The Art of Prolog (Leon Sterling / Ehud Shapiro) Concepts of Programming Languages (Robert Sebesta) Capítulo 16 Programming Language Design Concepts (David Watt) Capítulo 15 Linguagens de Programação 34