Inteligência Artificial Objetos em Prolog  Esta aula introduz objetos de dados simples e estruturados  Os tópicos abordados são:  Objetos simples (átomos,

Slides:



Advertisements
Apresentações semelhantes
Pseudo-código: sintaxe
Advertisements

Tipos de dados, Variáveis, Expressões e Operadores
Linguagens relacionais
Introdução à Programação Lógica
Introdução à Linguagem Prolog
Lógica de Programação Módulo II
Programação Lógica: PROLOG
Programação para Engenharia I
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Construção de Compiladores
2. A Linguagem Prolog.
3. Sintaxe e Semântica.
Unidades de Armazenamento
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Inteligência Artificial: A Linguagem Prolog (parte 2)
Sintaxe e Semântica do PROLOG.
Aula Prática - Prolog Sistemas Inteligentes /~if684
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Prolog Programação Lógica Ícaro A. Souza.
Conjuntos numéricos e os números reais
Grandezas Físicas Prof. Climério Soares.
Teorema do Confronto   Se não pudermos obter o limite diretamente, talvez possamos obtê-lo indiretamente com o teorema do confronto. O teorema se refere.
Aula Prática - Prolog Sistemas Inteligentes /~if684
Introdução a Lógica Prof. Luiz Carlos Gabi.
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Fábio de Oliveira Borges
Introdução a aplicativos Java
Uma Breve Introdução á programação lógica
MATEMÁTICA APLICADA REVISÃO BÁSICA.
INF 1771 – Inteligência Artificial Edirlei Soares de Lima Aula 09 – Introdução ao Prolog.
André Luiz da Costa Carvalho
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Analise Semântica aula-10-analise-semântica.pdf.
Sistemas Especialistas Podem ser definidos como programas de computador desenvolvidos para representar o conhecimento humano num dado domínio específico.
LEMA 1 Utilização de material concreto no Ensino de Matemática
Relações 1 Daniela de Oliveira Albanez. Relações Binárias ‫Na vida real, quando dizemos que duas pessoas, Maria e José, se relacionam, entendemos que.
Inteligência Artificial: Lógica Proposicional e Prolog
Programação Funcional
INE Fundamentos de Matemática Discreta para a Computação
Prof. Ilydio Pereira de Sá
Algoritmos e Estrutura de Dados I
FUNDAMENTOS DE COMPUTAÇÃO
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Programação Lógica com Prolog
Fundamentos de linguagens de programação
Linguagem C.
Aritmética Em Prolog podemos fazer uso de operadores aritméticos não lógicos pré-definidos pelo sistema, como por exemplo >, >=, +, *, -, etc. A interrogação.
Inteligência Artificial: A Linguagem Prolog (Parte 1)
Algoritmos.
Potenciação an = a . a . a a (a ≠ 0) n fatores onde: a: base
Engenharia/Ciência da Computação
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Vinicius Ponte Machado
Profa. Maria Augusta Constante Puget
Tipos de Dados, Variáveis, Expressões Lógicas e Aritméticas
SISTEMAS DE INFORMAÇÃO Inteligência Artificial 2011/01 UNIPAC - FACAE Faculdade de Ciências Administrativas e Exatas Araguari - MG.
Sistemas para Internet Algoritmos e Lógica de Programação
Álgebra Booleana e Circuitos Lógicos Em 1854, George Boole introduziu o formalismo que até hoje se usa para o tratamento sistemático da lógica, que é.
GEOMETRIA ANALITICA VETORES.
INTRODUÇÃO AO CÁLCULO CONJUNTOS NUMERICOS.
Inteligência Artificial Objetos em Prolog  Esta aula introduz objetos de dados simples e estruturados  Os tópicos abordados são:  Unificação como operação.
Descrevendo Circuitos Lógicos Capítulo 3 Parte I
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
3. Sintaxe e Semântica.
Transcrição da apresentação:

Inteligência Artificial Objetos em Prolog  Esta aula introduz objetos de dados simples e estruturados  Os tópicos abordados são:  Objetos simples (átomos, números, variáveis)  Objetos estruturados  Unificação como operação fundamental em objetos

2 Relembrando:  Programação Lógica  Algoritmo = Lógica + Controle  Programa = Lógica + Controle + Estruturas de Dados  Programar em Prolog envolve:  declarar alguns fatos a respeito de objetos e seus relacionamentos  definir algumas regras sobre os objetos e seus relacionamentos e  fazer perguntas sobre os objetos e seus relacionamentos

3 Objetos em Prolog Objetos (Termos) Objetos Simples Estruturas Constantes (Atômicos) Variáveis ÁtomosNúmeros

4 Átomos  São cadeias compostas pelos seguintes caracteres:  letras maiúsculas: A, B,..., Z  letras minúsculas: a, b,..., z  dígitos: 0, 1,..., 9  caracteres especiais: + - * / = :. & _ ~  Podem ser construídos de três maneiras:  cadeias de letras, dígitos e o caractere ‘_’, começando com uma letra minúscula: anna, nil, x25, x_25, x_25AB, x_, x__y, tem_filhos, tem_um_filho  cadeias de caracteres especiais:, =====>,...,.:., ::=  cadeias de caracteres entre apóstrofos: ‘Abraão’, ‘América_do_Sul’, ‘América_Latina’

5 Números  Números usados em Prolog incluem números inteiros e números reais Operadores Aritméticos Predicado pré-definido is adição+ subtração- multiplicação* divisão/ divisão inteira// resto divisão inteiramod potência** atribuiçãois Operadores Relacionais X > YX é maior do que Y X < YX é menor do que Y X >= YX é maior ou igual a Y X =< YX é menor ou igual a Y X =:= YX é igual a Y X = YX unifica com Y X =\= YX é diferente de Y

6 Números  O operador = tenta unificar apenas  ?- X = X =  O operador is força a avaliação aritmética  ?- X is X = 3  Se a variável à esquerda do operador is já estiver instanciada, Prolog apenas compara o valor da variável com o resultado da expressão à direita de is  ?- X = 3, X is X = 3  ?- X = 5, X is no

7 Comparação: Aritmética e Prolog = 5 3 x 4 = 12 5 – 3 = 2 3 – 5 = -2 4  2 = 2 1 é o resto quando 7 é dividido por 2 ?- 5 is 2+3. ?- 12 is 3  4. ?- 2 is 5-3. ?- -2 is 3-5. ?- 2 is 4/2. ?- 1 is mod(7,2). AritiméticaProlog

8 Exemplos com o predicado is ?- 10 is 5+5. yes ?- 4 is 2+3. no ?- X is 3  4. X=12 yes ?- R is mod(7,2). R=1 yes

9 Usando o operador = (unificação) ?- X = X = 3+2 yes ? = X. X = 3+2 yes ?-

10 Usando o predicado is/2 ?- X is X = 5 yes ? is X. ERROR: is/2: Argumentos não estão instanciados corretamente ?- Resultado is Resultado = 10 yes ?-

11 Definição de Predicados Aritméticos addThreeeDouble(X, Y):- Y is (X+3)  2.

12 Definição de Predicados Aritméticos addThreeeDouble(X, Y):- Y is (X+3)  2. ?- addThreeeDouble(1,X). X=8 yes ?- addThreeeDouble(2,X). X=10 yes

13 Variáveis  São cadeias de letras, dígitos e caracteres ‘_’, sempre começando com letra maiúscula ou com o caractere ‘_’  X, Resultado, Objeto3, Lista_Alunos, ListaCompras, _x25, _32  O escopo de uma variável é local, ou seja, é dentro de uma mesma regra ou dentro de uma pergunta  Isto significa que se a variável X ocorre em duas regras/perguntas, então são duas variáveis distintas. A ocorrência de X dentro de uma mesma regra/pergunta significa a mesma variável

14 Variáveis  Uma variável pode estar:  Instanciada: quando a variável já referencia (está unificada a) algum objeto  Livre ou não-instanciada: quando a variável não referencia (não está unificada a) um objeto, ou seja, quando o objeto a que ela referencia ainda não é conhecido  Uma vez instanciada, somente Prolog pode torná-la não instanciada por meio de seu mecanismo de inferência (não o programador)

15 Variável Anônima  Quando uma variável aparece em uma única cláusula, não é necessário utilizar um nome específico para ela  Utiliza-se a variável anônima, que é escrita com um simples caracter ‘_’.  Por exemplo: temfilho(X) :- progenitor(X,Y).  Para definir temfilho, não é necessário o nome do filho(a)  Assim, é o lugar ideal para a variável anônima:  temfilho(X) :- progenitor(X,_).

16 Variável Anônima  Cada vez que um underscore ‘_’ aparece em uma cláusula, ele representa uma nova variável anônima  Por exemplo  alguém_tem_filho :- progenitor(_,_). equivale à:  alguém_tem_filho :- progenitor(X,Y). que é bem diferente de:  alguém_tem_filho :- progenitor(X,X).  Quando utilizada em uma pergunta, seu valor não é mostrado. Por exemplo, se queremos saber quem tem filhos mas sem mostrar os nomes dos filhos, podemos perguntar (do programa da família): ?- progenitor(X,_).

17 Objetos em Prolog Objetos (Termos) Objetos Simples Estruturas Constantes (Atômicos) Variáveis ÁtomosNúmeros

18 Estruturas  De forma a combinar componentes em um simples objeto, deve-se escolher um functor  Um functor para o exemplo da data seria data  Então a data de 4 de maio de 2003 e o Joao Silva podem ser escritos como:  data(4,maio,2003)  pessoa(nome('Joao Silva'),nacido_em(data(17,12,1960))

19 Estruturas  Qualquer dia em maio pode ser representado pela estrutura:  data(Dia,maio,2003)  Note que Dia é uma variável que pode ser instanciada com qualquer objeto em qualquer momento durante a execução  Sintaticamente, todos os objetos de dados em Prolog são termos  Por exemplo, são termos:  maio  data(4,maio,2003)

20 Estruturas  Todos os objetos estruturados podem ser representados como árvores  A raiz da árvore é o functor e os filhos da raiz são os componentes  Para a estrutura data(4,maio,2003): data 4maio2003

21 Exemplo  Dado um grupo de pessoas: sejam Raul, Maria, Bruno, Ricardo e Julia que realizam trabalhos semelhantes, é necessário determinar possíveis grupos de trabalho para realizar um determinado projeto. O supervisor está interessado em agrupá-los tendo em conta, sempre que possível, as afinidades entre os membros do grupo. Ele sabe de alguns fatos:  Raul e Maria preferem trabalhar com colegas do sexo oposto, enquanto que Julia não e para Ricardo é indiferente.  é sabido que Ricardo e Bruno não se entendem trabalhando juntos.  Programa Prolog homem('Raul'). homem('Bruno'). homem('Ricardo'). mulher('Maria'). mulher('Julia'). possivel('Raul',Alguem) :- mulher(Alguem). possivel('Maria',Fulano) :- homem(Fulano). possivel('Julia',Ciclana) :- mulher(Ciclana). possivel('Ricardo', Alguem) :- mulher(Alguem). possivel('Ricardo', Fulano) :- homem(Fulano), Fulano \= ‘Bruno'. possivel_dupla(X,Y):-possivel(X,Y),X\=Y.

22 Propriedades: simétrica, reflexiva e transitiva  Simétrica  irm(pedro, paula). % É necessário “ensinar”a propriedade irmaos(X,Y) :- irm(X,Y). irmaos(X,Y) :- irm(Y,X).  Reflexiva: o objeto em relação a si próprio igual(X,X).  Transitiva: mais_alto_1(joao, maria). mais_alto_1(pedro, raul). mais_alto_1(joao, pedro). mais_alto(Fulano,Ciclano) :-mais_alto_1(Fulano,Ciclano). mais_alto(Fulano,Ciclano) :- mais_alto_1(Fulano,Alguem), mais_alto(Alguem,Ciclano).

23 Estruturas  Por exemplo, o seguinte triângulo pode ser representado como  triângulo(ponto(2,4),ponto(3,6),ponto(4,2)) (3,6) (2,4) (4,2) triângulo ponto

24 (6,4) (4,2) (7,1) T P2=(2,3) P1=(1,1) S triângulo ponto P1=ponto 11 P2=ponto 23 S=seg ponto 1123 Estruturas

25 Estruturas r1r2r1 r2 r1 r3 r2 r1 r3 r2r4 seq(r1,r2) par(r1,r2) par(r1,par(r2,r3)) par(r1,seq(par(r2,r3),r4))

26 Estruturas organismo micro-organismoplanta pteropsidaalga samambaiaconífera animal vírusbactéria flor fungolíquenmusgo vertebradoinvertebrado mamíferoanfíbio réptilpeixeave bovinoprimataeqüino gado búfalogazelaovelha brahman herefordholsteinfriesian merino zebracavaloasno pôneiárabeappaloosa

27 Predicados para Verificação dos Tipos de Termos PredicadoÉ verdadeiro se: var(X)X é uma variável não instanciada nonvar(X)X não é uma variável ou X é uma variável instanciada atom(X)X é um átomo integer(X)X é um inteiro float(X)X é um número real atomic(X)X é uma constante (átomo ou número) compound(X)X é uma estrutura

28 Predicados para Verificação dos Tipos de Termos ?- var(Z), Z = 2. Z = 2 ?- Z = 2, var(Z). no ?- integer(Z), Z = 2. no ?- Z = 2, integer(Z), nonvar(Z). Z = 2 ?- atom(3.14). no ?- atomic(3.14). yes ?- atom(==>). yes ?- atom(p(1)). no ?- compound(2+X). yes

29 Unificação de Termos  Dois termos unificam (matching) se:  Eles são idênticos ou  As variáveis em ambos os termos podem ser instanciadas a objetos de maneira que após a substituição das variáveis por esses objetos os termos se tornam idênticos  Por exemplo, há unificação entre os termos  data(D,M,2003) e data(D1,maio,A)  instanciando D = D1, M = maio, A = 2003

30 Unificação de Termos ?- data(D,M,2003) = data(D1,maio,A), data(D,M,2003) = data(15,maio,A1). D = 15 M = maio D1 = 15 A = 2003 A1 = 2003 ?- ponto(1,1) = X, A = ponto(4,Y), ponto(2,3) = ponto(2,Z). X = ponto(1,1) A = ponto(4,_G652) Y = _G652 Z = 3

31 Unificação de Termos  Por outro lado, não há unificação entre os termos  data(D,M,2003) e data(D1,M1,1948)  data(X,Y,Z) e ponto(X,Y,Z)  A unificação é um processo que toma dois termos e verifica se eles unificam  Se os termos não unificam, o processo falha (e as variáveis não se tornam instanciadas)  Se os termos unificam, o processo tem sucesso e também instancia as variáveis em ambos os termos para os valores que os tornam idênticos

32 Unificação de Termos  As regras que regem se dois termos S e T unificam são:  se S e T são constantes, então S e T unificam somente se são o mesmo objeto  se S for uma variável e T for qualquer termo, então unificam e S é instanciado para T  se S e T são estruturas, elas unificam somente se  S e T têm o mesmo functor principal e  todos seus componentes correspondentes unificam

33 Comparação de Termos Operadores Relacionais X = Y X unifica com Y que é verdadeiro quando dois termos são o mesmo. Entretanto, se um dos termos é uma variável, o operador = causa a instanciação da variável porque o operador causa unificação X \= YX não unifica com Y que é o complemento de X=Y X == Y X é literalmente igual a Y (igualdade literal), que é verdadeiro se os termos X e Y são idênticos, ou seja, eles têm a mesma estrutura e todos os componentes correspondentes são os mesmos, incluindo o nome das variáveis X \== YX não é literalmente igual a Y que é o complemento de X==Y YX precede Y YY precede X YX precede ou é igual a Y YY precede ou é igual a X

34 Comparação de Termos ?- f(a,b) == f(a,b). yes ?- f(a,b) == f(a,X). no ?- f(a,X) == f(a,Y). no ?- X == X. yes ?- X == Y. no ?- X \== Y. yes ?- X \= Y. no ?- g(X,f(a,Y)) == g(X,f(a,Y)). yes

35 Precedência de Termos  A precedência entre termos simples é determinado para ordem alfabética ou numérica  Variável estruturas  Uma estrutura precede outra se o functor da primeira tem menor aridade que o da segunda  Se duas estruturas têm mesma aridade, a primeira precede a segunda se seu functor é menor que o da outra  Se duas estruturas têm mesma aridade e functores iguais, então a precedência é definida (da esquerda para a direita) pelos functores dos seus componentes

36 Precedência de Termos ?- 10. yes ?- isaque. yes ?- f(X,Y). yes ?- sara. yes ?- f(X,Y). yes ?- sara. yes ?- f(X,Y). yes ?- f(a,A). yes ?- 13. yes ?- 20. yes ?- g(X,f(b,Y)). yes

37 Unificação de Termos  Unificação em Prolog é diferente da unificação em Lógica  A unificação Lógica requer a verificação de ocorrência de uma variável em um termo (occurs check), que, por razões de eficiência, não é implementado em Prolog  Mas de um ponto de vista prático, a aproximação de Prolog é bem adequada  Exemplo: Prolog deveria falhar mas....  ?- X = f(X).  X = f(f(f(f(f(f(f(f(f(f(...))))))))))  No SWI: X = f(**)

38 Unificação de Termos ?- k(s(g),Y) = k(X,t(k)). X=s(g) Y=t(k) yes ?-

39 Unificação de Termos ?- k(s(g),t(k)) = k(X,t(Y)). X=s(g) Y=k yes ?-

40 Unificação – mais exemplos vertical( linha(ponto(X,Y), ponto(X,Z))). horizontal( linha(ponto(X,Y), ponto(Z,Y))). ?- vertical(linha(ponto(1,1),ponto(1,3))). yes ?- vertical(linha(ponto(1,1),ponto(3,2))). no ?-

41 Unificação – mais exemplos vertical( linha(ponto(X,Y), ponto(X,Z))). horizontal( linha(ponto(X,Y), ponto(Z,Y))). ?- horizontal(linha(ponto(2,3),P)). P = ponto(_554, 3); no ?-

42 Unificação – mais exemplos vertical( linha(ponto(X,Y), ponto(X,Z))). horizontal( linha(ponto(X,Y), ponto(Z,Y))). Voce acha que essas definições vertical/2 e horizontal/2 são semanticamente (o que o ser humano entende por linha vertical e horizontal) corretas? Veja a interrogação….como corrigir essa definição? ?- horizontal(linha(ponto(1,1),ponto(1,1))). yes

43 Listas  Lista é uma das estruturas mais simples em Prolog, muito comum em programação não numérica  Ela é uma seqüência ordenada de elementos  Uma lista pode ter qualquer comprimento  Por exemplo uma lista de elementos tais como ana, tênis, pedro pode ser escrita em Prolog como:  [ana, tênis, pedro]

44 Listas  O uso de colchetes é apenas uma melhoria da notação, pois internamente listas são representadas como árvores, assim como todos objetos estruturados em Prolog  Para entender a representação Prolog de listas, é necessário considerar dois casos  A lista é vazia, escrita como [ ] em Prolog  Uma lista (não vazia) consiste:  no primeiro item, chamado cabeça (head) da lista  na parte restante da lista, chamada cauda (tail)

45 Listas  No exemplo [ana, tênis, pedro]  ana é a Cabeça da lista  [tênis, pedro] é a Cauda da lista  A cabeça de uma lista pode ser qualquer objeto (inclusive uma lista); a cauda tem que ser uma lista  A Cabeça e a Cauda são então combinadas em uma estrutura pelo functor especial. .(Cabeça, Cauda)  Como a Cauda é uma lista, ela é vazia ou ela tem sua própria cabeça e sua cauda

46 Listas  Assim, para representar listas de qualquer comprimento, nenhum princípio adicional é necessário  O exemplo [ana, tênis, pedro] é representando como o termo: .(ana,.(tênis,.(pedro, []) ) )  O programador pode escolher ambas notações. ana tênis pedro[ ]..

47 Listas ?- Lista1 = [a,b,c], Lista2 =.(a,.(b,.(c,[]))). Lista1 = [a, b, c] Lista2 = [a, b, c] ?- Hobbies1 =.(tênis,.(música,[])), Hobbies2 = [esqui, comida], L = [ana,Hobbies1,pedro,Hobbies2]. Hobbies1 = [tênis,música] Hobbies2 = [esqui,comida] L = [ana, [tênis,música], pedro, [esqui,comida]]

48 Listas  Em geral, é comum tratar a cauda como um objeto simples  Por exemplo, L = [a,b,c] pode ser escrito como  Cauda = [b,c]  L =.(a,Cauda)  Para expressar isso, Prolog fornece uma notação alternativa, a barra vertical, que separa a cabeça da cauda  L = [a | Cauda]  A notação é geral por permitir qualquer número de elementos seja seguido por ‘|’ e o restante da lista:  [a,b,c] = [a | [b,c]] = [a,b | [c]] = [a,b,c | [ ]]

49 Unificação em Listas Lista1Lista2Lista1 = Lista2 [mesa][X|Y]X=mesa Y=[ ] [a,b,c,d][X,Y|Z]X=a Y=b Z=[c,d] [[ana,Y]|Z][[X,foi],[ao,cinema]]X=ana Y=foi Z=[[ao,cinema]] [ano,bissexto][X,Y|Z]X=ano Y=bissexto Z=[ ] [ano,bissexto][X,Y,Z]Não unifica

50 Pontos Importantes  Objetos simples em Prolog são átomos, números e variáveis  Objetos estruturados, ou estruturas, são utilizados para representar objetos que possuem vários componentes  Estruturas são construídas por meio de functores; cada functor é definido por seu nome e aridade  O escopo léxico de uma variável é uma cláusula; assim o mesmo nome de variável em duas cláusulas significam duas variáveis diferentes

51 Pontos Importantes  Estruturas podem ser vistas como árvores; Prolog pode ser vista como uma linguagem para processamento de árvores  A operação de unificação toma dois termos e tenta torná-los idênticos através da instanciação das variáveis em ambos os termos  A ordem das cláusulas pode afetar a eficiência do programa; uma ordem indevida pode até mesmo causar chamadas recursivas infinitas

52 Slides baseados em: Bratko, I.; Prolog Programming for Artificial Intelligence, 3rd Edition, Pearson Education, Clocksin, W.F.; Mellish, C.S.; Programming in Prolog, 5th Edition, Springer-Verlag, Programas Prolog para o Processamento de Listas e Aplicações, Monard, M.C & Nicoletti, M.C., ICMC-USP, 1993 Material elaborado por José Augusto Baranauskas + adições de Maria Carolina Monard + adições de Solange Oliveira Rezende