Linguagens de Programação Aula 15

Documentos relacionados
Linguagens Lógicas. Alunos: Josiane Novais Cláudio Moisés

Linguagens Lógicas. Aluno: Victor Rocha

Protótipo de Software de Apoio ao Aprendizado da Linguagem de Programação Lógica Prolog

Prof. Marcos A. Schreiner. 15 de junho de Prof. Marcos A. Schreiner (UFPR) 15 de junho de / 18

Programação em lógica - tem suas raízes no cálculo de predicados, proposto por Frege em 1879.

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PROLOG PROF. CESAR A. TACLA UTFPR/CURITIBA

30/04/2013. Prof. Hudson Costa

Prolog. MATA56 - Paradigmas de Linguagens de Programação, UFBA, Prof. Rodrigo Rocha Prolog. Iniciando.

BUSCA DE SOLUÇÕES EM PROLOG

INF 1771 Inteligência Artificial

01. [Sebesta, 2000] Quais são os três principais usos da lógica simbólica na lógica formal?

2284-ELE/5, 3316-IE/3

Programação Lógica. Programação Lógica PROLOG

Linguagens Lógicas. Introdução

CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG. Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira

Paradigma de Programação Lógico. Marco A L Barbosa

A linguagem Prolog. Sintaxe, terminologia e semântica informal: Os objectos de dados em Prolog são chamados termos.

03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog

Introdução à Programação em Prolog

Objetivo PROGRAMAÇÃO EM LÓGICA. Conteúdo. Referências Bibliográficas. Introdução. Introdução. Linguagem Prolog Parte I

Fundamentos. Paradigma de Programação Lógico. Marco A L Barbosa

Fundamentos e prática de Prolog

Variáveis o nome de uma variável pode ser qualquer sequência de caracteres alfanuméricos que começa com uma letra maiúscula ou com um underscore (_).

Programação Lógica. (Capítulo 11) LÓGICA APLICADA A COMPUTAÇÃO. Professor: Rosalvo Ferreira de Oliveira Neto

Fundamentos e prática de Prolog

Inteligência Artificial. Prolog. Aula 2 Introdução (cont.)

Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Aula 2 Programação Lógica Sintaxe Prolog. Profa. Elaine Faria UFU -2014

Linguagens de Programação Programação Lógica (Prolog)

Introdução. Esse programa recebeu o nome PROLOG (do francês PROgramation et LOGique ).

Paradigmas de Linguagens de Programação. Linguagens de Programação Lógicas

Linguagens de Programação Aula 2

Programação Lógica. Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel

SCC Capítulo 2 Lógica de Predicados

Sistemas Inteligentes

Programação Orientada a Objetos. Programação Lógica

SCC Capítulo 5 Representação de Conhecimento através do Prolog

Prof. A. G. Silva. 24 de agosto de Prof. A. G. Silva Programação em Lógica 24 de agosto de / 1

Capítulo 3 Lógica de Primeira Ordem

Conferência Árvores de resolução SLD

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Lógica Computacional

INSTITUTO FEDERAL CATARINENSE Campus Ibirama

Programação Lógica. A Linguagem Prolog. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia

Programação Lógica PROLOG. Programação Lógica: Prolog

AULA TEÓRICA RESOLUÇÃO DE PROBLEMAS 4ª

Introdução. Introdução. Motivação. Motivação. Solução INTELIGÊNCIA ARTIFICIAL CÁLCULO RELACIONAL (PARTE I)

Linguagens de Programação Aula 13

Mecanismos de Raciocínio em Lógica, Prova Automática de Teoremas e PROLOG

Exame Especial de Linguagens de Programação - DCC024 -

UNIDADE ACADÊMICA: Faculdade de

Linguagens de Programação Aula 14

Classes e Objetos. Sintaxe de classe em Java

Programação de Computadores III

Fundamentos de Lógica Matemática

Aula de hoje. Funções. Introdução. Função. Definição de funções. Exemplo. SCC Introdução à Programação para Engenharias

Conceitos Básicos de Algoritmos

Lógica para Computação

Roteiro de Aula Prática

Conferencia 6 Estruturas, pregados para o trabalho com estruturas, seletores. MSc. Angel Alberto Vazquez Sánchez

Lógica Computacional. Argumentos válidos e sólidos. Métodos de demonstração. Demonstrações formais. Regras de Inferência Igualdade

Programação Introdução

20/11/2012. Prof. Hudson Costa

INTRODUÇÃO À COMPUTAÇÃO - EPET006 -

Ciência de Computadores Sistemas Inteligentes

PROGRAMAÇÃO EM LÓGICA

Sistema Operacional Unidade 11.2 Shell Script: estruturas condicionais. QI ESCOLAS E FACULDADES Curso Técnico em Informática

PROLOG Resumo. 1. Introdução.

Um Ambiente Para Exploração de Paralelismo na Programação em Lógica

CAPÍTULO 4 - OPERADORES E EXPRESSÕES

4. Constantes. Constantes pré-definidas

Predicados extra lógicos. Prof. Elaine Faria e Hiran Nonato Programação Lógica UFU 2012

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Programação Procedimental

Linguagens de Programação Aula 3

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

Programação de Computadores I. Professor Ilaim Costa Junior

INF 1771 Inteligência Artificial

UNIDADE 2 ALGORITMOS E PSEUDOCÓDIGO

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

INF 1771 Inteligência Artificial

Variável. Expressões. Atribuição. Tipos básicos Declaração. Aritméticas Lógicas. Professor Leandro Augusto Frata Fernandes

Revisão. Profa Marina Gomes

Inteligência Artificial IA III. PROVA AUTOMÁTICA DE TEOREMAS

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Cálculo proposicional

Prof. A. G. Silva. 31 de agosto de Prof. A. G. Silva Programação em Lógica 31 de agosto de / 1

Aula 03 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Universidade de Aveiro

Recursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

LÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior

Algoritmo e Programação Matemática

18/01/2016 LÓGICA MATEMÁTICA. Lógica é usada para guiar nossos pensamentos ou ações na busca da solução. LÓGICA

Familiarização com as ferramentas para Prolog

Transcrição:

Linguagens de Programação Aula 15 Celso Olivete Júnior olivete@fct.unesp.br

Na aula passada Linguagem Haskell 2

Na aula de hoje Paradigma Lógico Linguagem Prolog (PROgrammation en LOGique) 3

Introdução Em linguagens de programação (LPs) imperativas um programa é composto por uma sequência de comandos que representam as atividades computacionais que serão executadas. O programador deve portanto especificar claramente como realizar o processamento desejado, ou seja, como é o algoritmo. 4

Introdução Em LPs lógicas um programa consiste na definição de relações lógicas que devem ser satisfeitas pela solução procurada. A busca de uma solução ocorre automaticamente através de regras de inferência. 5

Introdução Programar em uma LP lógica consiste em: Declarar fatos primitivos sobre um domínio Definir regras que expressam relações entre os fatos do domínio Fazer perguntas sobre o domínio 6

Exemplo de programação em lógica Sócrates é homem. Todo homem é mortal. homem(sócrates). mortal(x) homem(x). Quem é mortal? Sócrates é mortal.?- mortal(z). Z = sócrates. 7

Fatos, regras e consultas A programação em lógica baseia-se em estruturas lógicas denominadas Cláusulas de Horn, que se apresentam em quatro formas distintas: Fatos: a Regras a b Consultas: b Vazia: Verdades incondicionais Podem ou não serem verdadeiras Provocam a execução do programa 8

Fatos, regras e consultas Fatos São verdades incondicionais: pai(josé, joão). //josé é pai de joão? pai(joão, júlio). pai(júlio, jorge). 9

Fatos, regras e consultas Fatos São verdades incondicionais: pai(josé, joão). //josé é pai de joão? pai(joão, júlio). pai(júlio, jorge). Regras Podem ser verdadeiras ou não: filho(x, Y) pai(y, X). avô(x, Y) pai(x, Z), pai(z, Y). 10

Fatos, regras e consultas Fatos São verdades incondicionais: pai(josé, joão). //josé é pai de joão? pai(joão, júlio). pai(júlio, jorge). Regras Podem ser verdadeiras ou não: filho(x, Y) pai(y, X). avô(x, Y) pai(x, Z), pai(z, Y). Consultas Provocam a execução do programa:?- pai(júlio, X). X=jorge?- filho(júlio, X). X=joão 11

Fatos, regras e consultas Fatos declaração Uma forma de declarar um fato como uma baleia é um mamífero é: mamífero(baleia) Fato predicado Lista de argumento(s) 12

Fatos exemplos Para representar o fato Bruno gosta de Ana gostar(bruno, ana) predicado Para representar Ana gosta de Bruno gostar(ana, bruno) argumentos Nas expressões acima gostar é predicado do fato, representando uma relação entre os argumentos 13

Fatos exemplos Para representar o fato Bruno gosta de Ana gostar(bruno, ana) predicado Note que este fato é diferente de Ana gosta de Bruno gostar(ana, bruno) argumentos Como relacionar fatos? Nas expressões acima gostar é predicado do fato, representando uma relação entre os argumentos 14

Regras Fatos são relacionados através deregras denominadas Cláusulas de Horn 15

Regras A cláusula Prolog se e ou a :- b1, b2... bi; bj... bn. Cabeça Condição 16

Regras A cláusula Prolog se e ou a :- b1, b2... bi; bj... bn. Cabeça Condição seospredicadosde1ansãoverdadeirospara as variáveis bi, então o predicado pred é verdadeiro para as variáveis bi 17

Regras exemplo Fatos São verdades incondicionais: pai(josé, joão). //josé é pai de joão? pai(joão, júlio). pai(júlio, jorge). Regras Podem ser verdadeiras ou não: filho(x, Y):- pai(y, X). avô(x, Y) :- pai(x, Z), pai(z, Y). Cláusula se Cláusula e 18

Operadores Prolog Linguagem Natural Programas Prolog E, OU ; SE :- NÃO not 19

Consultas Consultas provocam a execução do programa Fatos pai(josé, joão). //josé é pai de joão? pai(joão, júlio). pai(júlio, jorge). Consultas?- pai(júlio, X). X=jorge?-pai(X, Y). X unificou ao primeiro argumento Y unificou ao segundo argumento X unificou a jorge X=joão Y = júlio X=josé Y = joão X=júlio Y = jorge 20

Consultas mais exemplos Fatos animal (cachorro) animal (gato) Consultas?- animal(cachorro) yes?- animal(x) cachorro; gato; 21

Unificação Para tentar provar um fato, Prolog precisa estabelecer equivalência entre fatos equivalentes = unificáveis Dois átomos são unificáveis apenas se são idênticos Duas estruturas são idênticas se o seu predicado for idêntico, e se seus argumentos forem unificáveis 22

Unificação Uma variável é unificável a qualquer coisa Durante o processo de resolução, uma variável é instanciada com o valor que permite a sua unificação com um símbolo correspondente de outro fato A unificação é representada por = 23

fruta(manga).?- fruta(x). perguntando... Unificação Exemplos X = manga Xfoi unificado com manga gostar(bruno,ana).?- gostar(bruno,x). perguntando... X = ana Xfoi unificada com ana?- X=sol X =sol Xfoi unificada com sol?- sol = sol yes sol foi unificado com sol 24

Unificação Exemplos Termo 1 Termo 2 Resultado da unificação henrique henrique unificam eduardo henrique não unificam Y 8.5 Y=8.5 data(25,maio,ano) data(d,maio,1981) D=15 Ano=1981 pai_de(x, eduardo) pai_de(henrique,y) X=henrique Y=eduardo 25

Exemplo de processo de resolução pai(joao, joaquim). pai(joaquim, manuel). avo(x,y):- pai(z,y), pai(x,z).?-avo(joao,z). X = manuel?- avo(joao,manuel). yes. joaquim manuel joao avo(x,y):- pai(z,y), pai(x,z). Processo de resolução avo(joao,z):- pai(joao,joaquim), pai(joaquim,manuel). No fato pai(z,y) a variável Z foi unificada a joao e a variável Y foi unificada a joaquim No fato pai(x,z) a variável X foi unificada a joaquim e a variável Z foi unificada a manuel avo(x,y):- pai(z,y), pai(x,z). Processo de resolução avo(joao,manuel):- pai(joaquim,manuel), pai(joao,joaquim). No fato pai(z,y) a variável Z foi unificada a joaquim e a variável Y foi unificada a manuel No fato pai(x,z) a variável X foi unificada a joao e a variável Z foi unificada a joaquim 26

Declaração de fatos Os fatos na linguagem Prolog são representados através deátomos ou estruturas. Átomos são strings que começam sempre com letra minúscula. Exemplos: esta_frio teste dinheiro 27

Declaração de fatos Estruturas são átomos seguidos de uma lista de argumentos entre parênteses: pred(arg1, arg2, argn). onde: -predé o nome do predicado -argisão os argumentos -Né a aridade(número de argumentos) -. representa o final de uma cláusula 28

Declaração de fatos Os argumentos de uma estrutura podem ser átomos, estruturas, variáveis e números. Exemplos: carro(preto) amigo(joana,pedro) arvore_bin(valor1, arvore_bin(valor2, valor3)) Estruturas representam relações entre os argumentos, ou seus predicados 29

Fatos mais exemplos Seja a árvore genealógica mostrada abaixo... que pode ser representada pelo seguinte programa Prolog: Maria José João Ana progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). Júlia Íris Este programa representa a relação progenitor, na forma de um predicado, que contém 6 Jorge cláusulas, que são todasfatos. 30

Consultas O programa pode ser pensado como uma tabela em um BD. que pode ser consultada de várias maneiras: progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). No caso de um programa constituído unicamente de fatos, a semântica é exatamente a mesma de uma BD relacional...?- progenitor(joão, ana). yes?- progenitor(joão, jorge). no?- progenitor(joão, X). X=josé; X=ana; no?- progenitor(x,y). X=maria, Y=josé; X=joão, Y=josé;... X=íris, Y=jorge; no 31

Definindo fatos O ambiente SWI-Prolog 32

Definindo fatos Definindo um programa: File/New... 33

Definindo fatos Defina os fatos e salve o arquivo progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). Prolog é case sensitive!! progenitor(josé, íris). progenitor(íris, jorge). 34

O ambiente SWI-Prolog Para carregar o arquivo do programa?-consult( nome_arquivo.extensão ) Ou File/Consult... Para visualizar o conhecimento existente na base de dados listing. 35

Consultas O programa pode ser pensado como uma tabela em um BD. que pode ser consultada de várias maneiras: progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). No caso de um programa constituído unicamente de fatos, a semântica é exatamente a mesma de uma BD relacional...?- progenitor(joão, ana). yes?- progenitor(joão, jorge). no?- progenitor(joão, X). X=josé; X=ana; no?- progenitor(x,y). X=maria, Y=josé; X=joão, Y=josé;... X=íris, Y=jorge; no Para que mais de uma possa encontrada, basta associação ser pressionar a tecla ; após cada resultado apresentado. 36

Ampliando a base de fatos O programa pode ser ampliado acrescentando-se novos fatos que inclusive podem estabelecer novas relações. No exemplo ao lado acrescentou-se ao programa original as relações masculino e feminino. Estas relações, que possuem aridade 1, podem ser pensadas como sendo atributos dos objetos a que se aplicam. progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). masculino(joão). masculino(josé). masculino(jorge). feminino(maria). feminino(ana). feminino(júlia). feminino(íris). 37

Regras As relações pai e mãe podem agora ser definidas da seguinte maneira: X é pai de Y se X é progenitor de Y e X é masculino. X é mãe de Y se X é progenitor de Y e X é feminino. Em Prolog: X é pai de Y pai(x,y) :- progenitor(x,y), masculino(x). e(,) mãe(x,y) :- progenitor(x,y), feminino(x). 38

Mais regras As relações irmão e irmã podem agora ser definidas da seguinte maneira: X é irmão de Y se Z é progenitor de X e Z é progenitor de Y e X é masculino. Em Prolog: irmão(x,y) :- progenitor(z,x), progenitor(z,y), masculino(x). irmã(x,y) :-... X é irmã de Yse... 39

Exercício Acrescentar ao programa da árvore genealógica as seguintes relações avô tia prima 40

Exemplo: caminhos em grafos Dado o grafo direcionado B 2 E 2 3 D 2 5 A F 4 5 4 C E as relações conecta(x,y,k) e caminho(x,y,k), onde X e Y são nodos e K é o custo entre eles. Ao lado, em Prolog: conecta(a,b,3). conecta(a,c,4).... conecta(e,f,2). caminho(x,y,k):- conecta(x,y,k). caminho(x,y,k):- conecta(x,z,k1), caminho(z,y,k2), K is K1+K2.?- caminho(x,y,k). X=a, Y=b, K=3;... no 41

Fluxo de controle no processo de resolução O Prolog utiliza um fluxo de controle implícito no processo de resolução de uma questão O sentido deste fluxo é determinístico segue sempre a mesma ordem O processo de resolução segue a ordem em que os fatos/regras foram declarados Para cada predicado correto encontrado, os argumentos são testados em ordem Para cada regra, as condições são testadas sempre da esquerda para direita. 42

Fluxo de controle Exemplo tropical(caribe). tropical(havai). praia(caribe). praia(havai). bonito(havai). bonito(caribe). - O processo de resolução segue a ordem em que os fatos/regras foram declarados - Para cada predicado correto encontrado, os argumentos são testados em ordem - Para cada regra, as condições são testadas sempre da esquerda para direita. paraiso_tropical(x) :- tropical(x), praia(x), bonito(x). Questionando...?- paraiso_tropical(x). X = caribe X é caribe tropical true 43

Fluxo de controle Exemplo tropical(caribe). tropical(havai). praia(caribe). praia(havai). bonito(havai). bonito(caribe). - O processo de resolução segue a ordem em que os fatos/regras foram declarados - Para cada predicado correto encontrado, os argumentos são testados em ordem - Para cada regra, as condições são testadas sempre da esquerda para direita. paraiso_tropical(x) :- tropical(x), praia(x), bonito(x). Questionando...?- paraiso_tropical(x). X = caribe X é caribe X é caribe tropical praia true true 44

Fluxo de controle Exemplo tropical(caribe). tropical(havai). praia(caribe). praia(havai). bonito(havai). bonito(caribe). - O processo de resolução segue a ordem em que os fatos/regras foram declarados - Para cada predicado correto encontrado, os argumentos são testados em ordem - Para cada regra, as condições são testadas sempre da esquerda para direita. paraiso_tropical(x) :- tropical(x), praia(x), bonito(x). Questionando...?- paraiso_tropical(x). X = caribe X é caribe X é caribe X é caribe tropical praia bonito true true true 45

Fluxo de controle Variáveis são instanciadas implicitamente com valores que permitem aunificação da estrutura Assim que uma associação válida for encontrada, os valores com os quais as variáveis foram instanciadas são impressos Apenas a primeira associação válida é impressa!! Para que mais de uma associação possa ser encontrada, basta pressionar a tecla ; após cada resultado apresentado. 46

Fluxo de controle implícito Para provar questões mais complexas, Prolog pode ser obrigado a testar várias vezes a mesma condição, instanciando uma variável com diferentes valores Esse processo de retornar e testar novamente uma condição é denominado backtracking 47

Fluxo de controle implícito Exemplo surf(vitor). surf(renan). surf(teco). skate(vitor). skate(teco). moto(renan). moto(teco). radical(x):- surf(x), skate(x), moto(x).?- X is teco 48

Fluxo de controle implícito Fluxo do percurso: radical(x):- surf(x), skate(x), moto(x). radical(x) surf(vitor). surf(renan). surf(teco). skate(vitor). skate(teco). moto(renan). moto(teco). surf(x) skate(x) moto(x) X is vitor X is renan X is teco surf true 49

Fluxo de controle implícito Fluxo do percurso: radical(x):- surf(x), skate(x), moto(x). radical(x) surf(vitor). surf(renan). surf(teco). skate(vitor). skate(teco). moto(renan). moto(teco). surf(x) skate(x) moto(x) X is vitor X is renan X is teco X is vitor X is renan X is teco surf true skate true skate false 50

Fluxo de controle implícito Fluxo do percurso: radical(x):- surf(x), skate(x), moto(x). radical(x) surf(vitor). surf(renan). surf(teco). skate(vitor). skate(teco). moto(renan). moto(teco). surf(x) skate(x) moto(x) X is vitor X is renan X is teco X is vitor X is renan X is teco X is vitor X is teco surf true skate true skate false moto true moto false 51

Exercício Implemente os exercícios vistos em aula Implemente os exercícios presentes na apostila 52