Programação Lógica (em uma aula!)



Documentos relacionados
Paradigmas de Programação. Programação Lógica. Profª Andréa Schwertner Charão DLSC/CT/UFSM

DESAFIO DE EINSTEIN. (supostamente atribuído a ele, por sua aparente enorme complexidade de solução)

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Estruturas de Repetição

Definição. Chama-se proposição todo o conjunto de palavras ou símbolos que exprimem um pensamento de sentido completo.

DESAFIOS DE MATEMÁTICA E LÓGICA

Processamento de Linguagem Natural (PLN)

Lógica Formal. Lógica Proposicional. Lógica Proposicional. Enigma motivador. Visão geral do estudo da Lógica

INF 1771 Inteligência Artificial

APOSTILA DE LÓGICA. # Proposições Logicamente Equivalentes. # Equivalências Básicas

LÓGICA 1 - B Prof. Aurimenes

Inteligência Artificial

Python Intermediário. terça-feira, 4 de agosto de 15

Unidade IV. Ciência - O homem na construção do conhecimento. APRENDER A APRENDER LÍNGUA PORTUGUESA APRENDER A APRENDER DINÂMICA LOCAL INTERATIVA

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

Testando e Comparando Valores

Representação do Conhecimento

Programa. Raciocínio Lógico Matemático. Livros. Provas

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Programação para web JavaScript

MD Sequências e Indução Matemática 1

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Lógica para a Programação - 1º semestre AULA 01 Prof. André Moraes

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Portal de Aprendizado Tutorial do Aluno

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Análise e Projeto Orientados por Objetos

01. Considere as seguintes proposições:

Conceitos básicos da linguagem C

9 Comandos condicionais

Estrutura de Dados Básica

ÍNDICE INTRODUÇÃO...3

A Comunicação Estratégica. no âmbito da Mudança Organizacional

Paradigmas de Programação

Implementando uma Classe e Criando Objetos a partir dela

OFICINA DA PESQUISA DISCIPLINA: LÓGICA MATEMÁTICA E COMPUTACIONAL APOSTILA 2 CONCEITOS BÁSICOS

JavaScript (ou JScript)

Disciplina Técnicas de Modelagem

CURSO BÁSICO DE PROGRAMAÇÃO AULA 1. Introdução a Sistemas de Computação Noções de Lógica Introdução à Lógica de Programação

APOSTILA ZELIO SOFT 2

Formação em Coach c in i g Pro r fis fi sio i nal PROGRAMA DE COACHING PROFISSIONAL copyright YouUp 2011

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Lista de Exercícios Fluxograma, Estruturas de Sequência e Decisão Prof: Yuri Frota

NAPNE / RENAPI. Software Educativo Manual Hércules e Jiló

Estrutura de Dados Básica

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Projeto Matemática 5º ano 4ª série. Objetivos

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

QUANTIFICADORES. Existem frases declarativas que não há como decidir se são verdadeiras ou falsas. Por exemplo: (a) Ele é um campeão da Fórmula 1.

Coordenadoria de Educação CADERNO DE REVISÃO Matemática Aluno (a) 5º ANO

Linguagens de. Aula 01. Profa Cristiane Koehler

Escalas. Antes de representar objetos, modelos, peças, A U L A. Nossa aula. O que é escala

Desenvolvimento OO com Java Orientação a objetos básica

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

2. A influência do tamanho da palavra

Abordagens pedagógicas no ensino de Educação Física. Prof.ª Sara Caixeta

INTERVENÇÃO. AULA PRÁTICA: jogo das biomoléculas. Autor: Maria Teresa Iturres, Alexia Rodrigues Menezes.

1. A corrida de vetores numa folha de papel.

Energia e suas fontes

Operações com números racionais decimais

INTRODUÇÃO À LINGUAGEM C++

Linguagem Lógica Prolog

Programação Orientada a Objetos (DPADF 0063)

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90.

Manual do KGeography. Anne-Marie Mahfouf Kushal Das Tradução: Luiz Fernando Ranghetti

Computação II Orientação a Objetos

Objetivo principal: aprender como definir e chamar funções.

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

RELATÓRIO MESA REVOLVER DESIGN (PESQUISA)

Linguagem de Programação I

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

PSICOLOGIA DO DESENVOLVIMENTO

Elaboração do projeto

O USO DE JOGOS DE CARTAS COMO ESTRATÉGIA PARA O ENSINO DA MATEMÁTICA

OFICINA DE POWER POINT

Sistemas de Representação e Raciocínio

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

ESCOLA EMEF MARIA MARGARIDA ZAMBON BENINI PIBID. Mini Gincana. 04/09/2014 a 02/10/2014

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Manual MQS. Logo após colocar essas informações abrirá a página inicial do sistema:

A MODELAGEM MATEMÁTICA NA MELHORIA DO ENSINO

Capítulo 1: Introdução à Economia

Sumário. 1. Propósito 1 2. Tabela de Ferragem 1 3. Criar Tabela de Ferragem 1 4. Conector de Ferragens 7

o quantos queres da emoções

Manual Sistema AtecSoftware

Prof. Bruno Holanda - Semana Oĺımpica Nível 1. Teoria dos Grafos

Comandos de repetição while

5.1 Sistemas de Arquivos

Transmissão de más notícias

Probabilidades: Função massa de probabilidades ou função distribuição de probabilidade ou modelo de probabilidade:

Transcrição:

Paradigmas de Programação Programação Lógica (em uma aula!) Profª Andréa Schwertner Charão DLSC/CT/UFSM

Programação lógica Paradigma baseado no Cálculo de Predicados (Lógica Matemática Dedutiva) Exemplo: Zé Carioca é um papagaio. Todo papagaio é uma ave. Logo, Zé Carioca é uma ave.

Bases da programação lógica Lógica matemática Cálculo de predicados Cláusulas de Horn Em outras palavras Descrição de proposições e verificação quanto à validade das mesmas Proposições envolvem símbolos e operadores lógicos Significado peq p ou q p implica q p equivale a q Representação p q p q p q p q

Elementos de um programa Fatos: cláusulas sem nenhuma negação (verdades incondicionais) Regras: cláusulas com condicionais Consultas: verificação de uma verdade (execução do programa)

Elementos de um programa: exemplo Fato Zé Carioca é um papagaio. Regra de inferência Todo papagaio é uma ave (ou "se X é um papagaio, X é uma ave") Consulta Zé Carioca é uma ave? Solução/resposta/resultado Sim

Elementos de um programa: exemplo Base de fatos João é pai de José. João é pai de Maria. Consulta João é pai de quem? Solução/resposta/resultado José Maria

Elementos de um programa: exemplo Fato O fatorial de 0 é 1. Regra O fatorial de um número N é F, se (N > 0) e F é N*fatorial(N-1). Consultas/Respostas: O fatorial de 2 é 200? Resposta: Não Consulta: Quanto é o fatorial de 3? Resposta: 6

Origens e aplicações Sistemas especialistas: emulação da habilidade humana em algum domínio do conhecimento (ex. medicina) Sistemas inteligentes, por exemplo: jogos: capacidade de derivar novos cenários, comportamentos, etc. bancos de dados: capacidade de deduzir informações a partir dos dados no banco Processamento de linguagem natural: chatbots Educação: ensino de lógica, contribuindo para pensamento e expressão mais claros

Linguagens de programação lógica

Linguagem Prolog Diferentes dialetos Interpretadores e compiladores Exemplos: SWI Prolog, Turbo Prolog, LPA Prolog, GNU Prolog, etc.

Programas em Prolog "Zé Carioca é um papagaio" papagaio("ze Carioca"). fato "Todo papagaio é uma ave" (ou "se X é um papagaio, então X é uma ave") ave(x) :- papagaio(x). regra Zé Carioca é uma ave??- ave("ze Carioca"). true resultado consulta

Programas em Prolog Ciclo de programação Prolog Fornecer base de fatos e regras ao interpretador (carga do programa) Solicitar a verificação de uma proposição/meta (consulta) Programa é um mundo fechado Um fato é considerado falso quando Não está presente na base de fatos do programa Não é dedutível a partir da base de fatos usando a base de regras

Instruções em Prolog termo constante variável iniciam com Maiúscula átomo número string valores simbólicos Ex.: pai, adao, fatorial, teste1, Ex.: 9, 10.2, 0.133 raiz_2 iniciam com minúscula estrutura Ex.: X, Area predicado(arg1,..., argn) Ex.: "Adão" proposições do cálculo de predicados

Variáveis em Prolog Não são como variáveis de linguagens imperativas Não são declaradas e não são vinculadas a tipos Vinculação de valor (instanciação) ocorre no processo de resolução, para verificar se uma meta é verdadeira (exemplo: X = "Ze Carioca") ave(x) :- papagaio(x).

Declaração de fatos Formas gerais de declaração de fatos: 1) propriedade(obj_const). predicado Ex.: cachorro(bobbypai). gordo(bobbypai). bobbypai é um cachorro 2) relacao(obj_const1,..., obj_constn). Ex.: pai(bobbypai, bobbyfilho). bobbypai é pai de bobbyfilho

Consultas Consultas/metas devem seguir as mesmas convenções da base de fatos Formas de consultas: 1) validação de uma proposição?- predicado(arg1,..., argn). Resposta/resultado: yes ou no Ex.: cachorro(bobbypai). cachorro(bobbyfilho).?- cachorro(bobbypai). true?- cachorro(pluto). false

Consultas Formas de consultas: consulta com unificação: ligação de conteúdo a variáveis 2) verificação de existência?- predicado(..., Var1,...). Resposta/resultado: constante(s) Ex.: cachorro(bobbypai). cachorro(bobbyfilho). gordo(bobbypai). Ponto-e-vírgula:?- gordo(x). verifica se existe X = bobbypai outra resposta?- cachorro(x). X = bobbypai ; X = bobbyfilho

Consultas com operadores Operadores relacionais (aritméticos) > maior < menor >= maior ou igual =< menor ou igual =:= igual =\= não igual Exemplos idade(pedro, 35). idade(ana, 30). idade(paulo, 27).?- idade(n, X), X =< 30.?- idade(n, X), X > 25, X < 30.?- 1 + 2 =\= 2 + 1. false?- 1 + 2 =:= 2 + 1. true

Declaração de regras Esta cláusula é uma regra: ave(x) :- papagaio(x). Neste exemplo X é uma variável ave e papagaio são predicados Forma geral: consequente : antecedente leia-se: então : se

Declaração de regras Regras compostas: conetivo e (,) Ex.: Se X é pai de Y E Y é pai de Z, então X é avô de Z Em Prolog: avo(x,z) :- pai(x,y), pai(y,z). Regras compostas: conetivo ou (;) Ex.: Se X é um papagaio OU uma coruja, então X é uma ave Em Prolog: ave(x) :- papagaio(x) ; coruja(x).

Regras com operações aritméticas Operador is soma(a,b,c) :- A is B + C.?- soma(a, 1, 4). A = 5 Atenção!!! este operador não deve ser usado como uma atribuição: Ex.: soma(a,b,c) : A is A + B + C. Isso é ERRADO, pois as variáveis só são instanciadas para satisfazer metas. Se A já estiver instanciado, A não pode estar do lado esquerdo do "is"!

Declaração de regras Exemplo com uso de operadores aritméticos: largura(sala,4). comprimento(sala,5). largura(quarto,3). comprimento(quarto,2). area(x,y) :- largura(x,l), comprimento(x,c), Y is L * C.?- area(sala,x). X = 20?- area(banheiro,x). false

Listas em Prolog Estruturas suportadas nativamente Seqüência finita de elementos Homogêneas ou heterogêneas Representação: elementos entre colchetes, separados por vírgula [a, b, c, d]. [casa(1, azul), casa(2, verde)]. pessoas([jose, 20, brasil, santa_maria], [maria, 24, uruguai, montevideo]).

Listas em Prolog Representação genérica: formato [H T], onde: H representa primeiro elemento (head) T representa o restante (tail)?- [7,8,9] = [H T] H = 7 T = [8, 9]?- [7] = [X Y] X = 7 Y = []?- [] = [A B] false. operador "=": (unificação) ligação de conteúdo a variáveisc

Listas em Prolog Representação genérica: formato [H T] Pode ser usada em fatos e regras teste(lis, H, T) :- Lis = [H T].?- teste([7,8,9], X, Y). X = 7 Y = [8,9]?- teste(l, 7, [8,9]). L = [7,8,9].?- teste([7,8,9], 10, Z). false.

Listas em Prolog Representação genérica: formato [H T] Pode ser usada em fatos e regras teste(lis, H, T) :- Lis = [H T]. Forma abreviada (fato com variáveis): teste([h T], H, T).

Listas em Prolog Outro exemplo: "U é o último na lista [_ R] se for o último na lista R" ultimo([u],u). ultimo([_ R], U) :- ultimo(r,u).?- ultimo([9,7,8], U). U = 8.

Listas em Prolog Podemos definir outros predicados "Somatório S de uma lista [H T] é igual a H mais o somatório S1 de T" sumlist([],0). sumlist([h T], S) :sumlist(t, S1), S is H + S1.

Listas em Prolog Existem predicados pré-definidos, p.ex.:?- member(a, [a,b,c]). true.?- member(x, [a,b,c]). false.?- length([a,b,c],l). L = 3?- nextto(1,2,[1,2,3]). true.?- nextto(2,y,[1,2,3]). Y = 3

Problemas em Prolog Há 5 casas de diferentes cores, com donos de diferentes nacionalidades. Os proprietários bebem diferentes bebidas, fumam diferentes cigarros e têm diferentes animais de estimação. Sabe-se que: 1. O inglês vive na casa vermelha. 2. O sueco tem cachorros. 3. O dinamarquês bebe chá. 4. A casa verde fica à esquerda da casa branca. 5. O dono da casa verde bebe café. 6. A pessoa que fuma Pall Mall cria pássaros. 7. O dono da casa amarela fuma Dunhill. 8. O homem que vive na casa do centro bebe leite. 9. O norueguês vive na primeira casa. 10. O homem que fuma Blends vive ao lado do que tem gatos. 11. O homem que cria cavalos vive ao lado do que fuma Dunhill. 12. O homem que fuma Bluemaster bebe cerveja. 13. O alemão fuma Prince. 14. O norueguês vive ao lado da casa azul. 15. O homem que fuma Blends é vizinho do que bebe água. Pergunta-se: QUEM CRIA PEIXES?"

Problemas em Prolog % Regras para determinar se X está ao lado de Y ao_lado(x, Y, List) :- nextto(x, Y, List). % X à esquerda de Y ao_lado(x, Y, List) :- nextto(y, X, List). % Y à esquerda de X % A solução é uma lista de casas, sendo que cada casa tem a forma: % casa(cor, nacionalidade, animal, bebida, cigarro) % member(e, List): verdadeiro se E é um dos elementos de List % O operador "=" unifica o lado esquerdo com o direito solucao(casas, Dono_Peixe) :Casas = [_, _, _, _, _], % a solucao é uma lista com 5 elementos member(casa(vermelha, ingles, _, _, _), Casas), % Condição 1: esta casa é membro da solucao member(casa(_, sueco, cachorro, _, _), Casas), % Condição 2: esta casa também, e assim por diante member(casa(_, dinamarques, _, cha, _), Casas), nextto(casa(verde,_,_,_,_), casa(branca,_,_,_,_), Casas), member(casa(verde, _, _, cafe, _), Casas), member(casa(_, _, passaro, _, pallmall), Casas), member(casa(amarela, _, _, _, dunhill), Casas), [_, _, casa(_, _, _, leite, _), _, _] = Casas, % Condição 8: na casa do centro se bebe leite [casa(_, noruegues, _, _, _) _] = Casas, % Condição 9: primeira casa ao_lado(casa(_, _, _, _, blends), casa(_, _, gato, _, _), Casas), ao_lado(casa(_, _, _, _, dunhill), casa(_, _, cavalo, _, _), Casas), member(casa(_, _, _, cerveja, bluemaster), Casas), member(casa(_, alemao, _, _, prince), Casas), ao_lado(casa(_, noruegues, _, _, _), casa(azul, _, _, _, _), Casas), ao_lado(casa(_, _, _, _, blends), casa(_, _, _, agua, _), Casas), member(casa(_, Dono_Peixe, peixe, _, _), Casas). % Condição final, para saber quem cria peixes

Mais sobre isso em... Sebesta, R. Conceitos de Linguagens de Programação. Bookman, 2011. Capítulo 16: Linguagens de programação lógica.