Prolog Examples. April 23, 2014

Documentos relacionados
Exemplo: programa --> regra; fato. Muito utilizada para definir gramáticas e para processamento de linguagem natural.

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

Prolog. Comandos de leitura e escrita

Processamento de Linguagem Natural

3. Resolução de problemas por meio de busca

Linguística Computacional Interativa

Processamento de Linguagem Natural

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Processamento de Linguagem Natural

UTFPR - Universidade Tecnológica Federal do Paraná. Processamento e otimização de consultas

Primeira Prova de Linguagens de Programação - DCC024B - Sistemas de Informação

Terceiro Trabalho de Sistemas Inteligentes. Entrega: 25/04/2014

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

Inteligência Artificial - IA. Resolução de problemas por meio de busca

Terceiro Trabalho de Inteligência Artificial / Sistemas Inteligentes. Entrega: 29/04/2016

Linguagens Formais e Autômatos (LFA)

COMPILADORES. Análise semântica. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Inteligência Artificial. Resolução de problemas por meio de algoritmos de busca. Aula II Algoritmos básicos de busca cega

FACULDADE LEÃO SAMPAIO

Analisadores Sintáticos LR

Terceiro Trabalho de Inteligência Artificial / Sistemas Inteligentes. Entrega: 04/05/2015

Introdução à Resolução de Problemas por meio de Busca

Linguagem com sintaxe e semântica precisas: lógica. Mecanismo de inferência: derivado da sintaxe e da

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

Alguns Exercícios de Inteligência Artificial

EXPRESSÃO REGULAR PARA UMA FUNÇÃO EQUIVALENTE EM PASCAL, UTILIZANDO DOIS ALGORITMOS BASEADOS NO TEOREMA DE KLEENE RONALD GLATZ

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Linguagens Formais e Autômatos P. Blauth Menezes

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Linguagens de Programação

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Automata e Linguagens Formais

O código do modelo de mapeamento sintático-conceitual do sistema ConPor

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS

FOLHA DE PROVA. Descreva e ilustre, com um exemplo, o algoritmo de minimização de um autômato.

Construção de Compiladores Aula 16 - Análise Sintática

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

Estruturação de Procedimentos

Linguagens de Domínio Específico

Análise Sintática (Cap. 04) Análise Sintática Ascendente Analisador Sintático LR

Teoria de Linguagens 1 o semestre de 2018 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 17/4/2018 Valor: 10 pontos

Prof. A. G. Silva. 19 de outubro de Prof. A. G. Silva Programação em Lógica 19 de outubro de / 21

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Linguagens Livres do Contexto. Adaptado de H. Brandão

Usar a implementação Prolog do A*

Programação em Lógica. UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010

Descrição do Mundo de Wumpus. Inteligência Artificial

Linguagens de Domínio Específico

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Universidade Federal de Alfenas

Compiladores Análise Semântica

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Análise sintática. Prof. Thiago A. S. Pardo Tratamento de erros sintáticos

Processamento de. Processamento de Linguagem Natural. Linguagem. Gramáticas. Gramáticas. Gramáticas. Gramáticas: Exemplos

Fundamentos de Inteligência Artificial [5COP099]

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

Compiladores I Prof. Ricardo Santos (cap 1)

Introdução à Programação de Computadores Fabricação Mecânica

Introdução à Programação

Sistemas Baseados em Conhecimento

Combinando relações. Exemplo Seja A = {1, 2, 3} e B = {1, 2, 3, 4}. As relações

Sintática: como é escrito cada elemento da linguagem de programação.

I - CONCEITOS INICIAIS

Programação I Apresentação

Resolução de problemas por meio de busca. Capítulo 3 Inteligência Artificial Sistemas de Informação

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Comunicação. Capítulo 22

Universidade Federal de Alfenas

Lógica de Programação

INTELIGÊNCIA ARTIFICIAL

Tratamento dos Erros de Sintaxe. Adriano Maranhão

CIC 111 Análise e Projeto de Algoritmos II

Inteligência Artificial

Introdução à Lógica Proposicional Sintaxe

2284-ELE/5, 3316-IE/3

Apresentação. Informação geral + Conceitos iniciais

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Conceitos de Linguagens de Programação

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Linguagens Formais e Autômatos P. Blauth Menezes

Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição das estruturas básicas de controle de execução.

Compiladores Análise de Tipos

SCC Capítulo 2 Recursão

Compiladores Ciência e Tecnologia da Computação Engenharia Informática e de Computadores

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

Revisão. Fases da dacompilação

Linguagens de Domínio Específico

Complexidade de Algoritmos. Edson Prestes

Introdução Definição Conceitos Básicos de Linguagem

Fundamentos da Programação

Estruturas de Dados Pilhas, Filas, Listas

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

Resolução de Problemas. Universidade Católica de Pelotas Engenharia da Computação Disciplina: Inteligência Artificial

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C

Transcrição:

Prolog Examples April 23, 2014

Utilização de DCGs DCG: Gramática de Cláusulas Definidas (Definite Clause Grammar) é uma linguagem formal para definicção de outras linguagens. Baseada em cláusulas de Horn. Exemplo: programa --> regra; fato. Muito utilizada para definir gramáticas e para processamento de linguagem natural. Programa escrito com sintaxe DCG normalmente avalia se uma sentença está ou não sintaticamente correta.

Utilização de DCGs Representação interna de um símbolo não terminal em Prolog: acrescentar dois argumentos a cada literal da cláusula, de forma transitiva. Ex: DCG: sent --> frase_nominal, frase_verbal, complemento. Prolog: sent(s0,s) :- frase_nominal(s0,s1), frase_verbal(s1,s2), complemento(s2,s).

Utilização de DCGs Representação interna de um símbolo terminal em Prolog: fato. Classifica o termo do dicionário de palavras e devolve o resto para ser classificado pelo restante da análise sintática. Ex: DCG: artigo --> [a]. Prolog: artigo([a R],R). Ações semânticas podem ser adicionadas às cláusulas DCGs. Desta forma podemos ter uma mistura de código DCG com código Prolog. Por exemplo, ao fazer análise sintática de uma linguagem de programação, podemos querer gerar tabelas de símbolos, tabelas de variáveis, gerar código, etc. Estas ações não fazem parte da gramática. São ações que devem ser tomadas cada vez que um símbolo recebe uma determinada classificação.

Utilização de DCGs Exemplo DCG: constante(dic,i) --> [segunda], {lookup(segunda,dic,i)}. Prolog: constante(dic,i,[segunda R],R) :- lookup(segunda,dic,i). Neste trecho de programa, após o símbolo segunda ser classificado como constante, deseja-se inserir esta constante numa tabela (Dic) e retornar um índice para esta constante na tabela (I). Esta ação é representada em DCG com o predicado entre chaves.

Utilização de DCGs sentence(sentence(np,vp)) --> noun_phrase(np), verb_phrase(vp). noun_phrase(np(d,n,c)) --> determiner(d), noun(n), rel_clause(c). noun_phrase(np(pn)) --> proper_noun(pn).

Utilização de DCGs verb_phrase(vp(tv,np)) --> trans_verb(tv), noun_phrase(np). verb_phrase(vp(it)) --> intrans_verb(it). rel_clause(rc(that,vp)) --> [that], verb_phrase(vp). rel_clause(rc([])) --> [].

Utilização de DCGs determiner(det(every)) --> [every]. determiner(det(a)) --> [a]. noun(noun(man)) --> [man]. noun(noun(woman)) --> [woman]. proper_noun(pn(john)) --> [john]. trans_verb(tv(loves)) --> [loves]. intrans_verb(iv(lives)) --> [lives].

Utilização de DCGs :-op(500,xfy,&). :-op(600,xfy, -> ). sentence(p) --> noun_phrase(x,p1,p), verb_phrase(x,p1). noun_phrase(x,p1,p) --> determiner(x,p2,p1,p), noun(x,p3), rel_clause(x,p3,p2). noun_phrase(x,p,p) --> proper_noun(x).

Utilização de DCGs verb_phrase(x,p) --> trans_verb(x,y,p1), noun_phrase(y,p1,p). verb_phrase(x,p) --> intrans_verb(x,p). rel_clause(x,p1,(p1&p2)) --> [that], verb_phrase(x,p2). rel_clause(_,p,p) --> [].

Utilização de DCGs determiner(x,p1,p2,all(x,(p1->p2))) --> [every]. determiner(x,p1,p2,exists(x,(p1&p2))) --> [a]. noun(x,man(x)) --> [man]. noun(x,woman(x)) --> [woman]. proper_noun(john) --> [john]. trans_verb(x,y,loves(x,y)) --> [loves]. intrans_verb(x,lives(x)) --> [lives].

Problemas de Busca Problema geral: encontrar um caminho de uma situação inicial (Si) para uma situação final (Sf), de forma que todos os caminhos intermediários sejam legais (ou válidos). Exemplo: problema das pilhas de blocos: Podemos mover um único bloco de cada vez. Podemos mover um bloco B se não houver qualquer outro bloco em cima de B. Precisamos encontrar uma seqüência de movimentos que resulte na transformação requerida.

Problemas de busca Exemplo: +---+ +---+ C A +---+ +---+ A ===> B +---+?? +---+ B C +---+ +---+ ///// ///// qual caminho seguir para chegar da config 1 para config 2? como seguir este caminho?

Problemas de busca Problema se resume a explorar vários caminhos alternativos até encontrar a solução. Da figura, podemos ter as seguintes alternativas, após colocar C na superfície: colocar A na superfície, ou colocar A em cima de C, ou colocar C em cima de A. Dois tipos de conceito: situações. movimentos possíveis, ou ações que transformam as situações em outras situações.

Problemas de Busca Dois tipos de conceito formam um grafo direcionado: espaço de estados ou espaço de busca. Os nós do grafo correspondem a situações e os arcos correspondem a transições legais entre estados. equivalente a encontrar um caminho entre a situação inicial (ou nó inicial do grafo, vide busca de caminho num grafo) e uma situação final específica, também chamado de nó objetivo do grafo.

Problemas de Busca Ex:

Problemas de Busca Resumindo: espaço de estados. nó inicial. objetivo a ser alcançado (nó final). Problema de otimização: encontrar o caminho de menor custo.

Problemas de Busca Representação de um espaço de estados em prolog: s(x,y) ou s(x,y,c), com C sendo o custo para passar do estado X para o estado Y. s(x,y) é verdadeiro se houver um movimento possível no espaço de estados, de X para Y (dentro das características do problema). Uma situação no problema dos blocos, pode ser representada por uma lista de pilhas. Cada pilha pode ser representada por uma lista de blocos na qual a cabeça da lista é o bloco que está no topo da lista.

Problemas de Busca Estado inicial: [[c,a,b],[],[]] Situação final: qualquer arranjo que contenha uma pilha com todos os blocos ordenados: [[a,b,c],[],[]] [[],[a,b,c],[]] [[],[],[a,b,c]] Dado um estado, para encontrarmos o próximo estado, utilizamos a seguinte regra: Sit2 é o próximo estado após Sit1, se existirem duas pilhas, St1 e St2, em Sit1, e o bloco no topo de St1 puder ser movido para St2.

Problemas de Busca % mv Top1 to St2 em Sit2 s(stacks,[st1,[top1 St2] Otherstacks]) :- % [Top1 St1] e uma pilha em Sit1 del([top1 St1],Stacks,Stacks1), % St2 e uma pilha em Sit1 del(st2,stacks1,otherstacks).

Problemas de Busca Condição objetivo: goal(estado) :- pertence([a,b,c],estado). Predicado de busca pode ser implementado com qualquer algoritmo de busca: solve(inicio,fim). Consulta:?- solve([[c,a,b],[],[]],solucao).

Problemas de Busca Busca em profundidade: (similar ao programa de busca por um caminho no grafo) solve(n,[n]) :- goal(n). solve(n,[n Sol1]) :- s(n,n1), % implem. disto depende do prob. solve(n1,sol1). Este programa difere do programa que implementa a busca no grafo, porque não evita ciclos.

Problemas de Busca Busca iterativa em profundidade: (precisa de argumento extra que é o limite de profundidade) solve(n,[n],_) :- goal(n). solve(n,[n Sol1],ProfMax) :- ProfMax > 0, s(n,n1), NewMax is ProfMax - 1, solve(n1,sol1,newmax). Este programa também não evita ciclos até o limite de profundidade.

Problemas de Busca Busca em largura: bfs(inicio,fim) :- solve([[inicio]],fim). solve([[n Path] _],[N Path]) :- goal(n). solve([path Paths],Solucao) :- extend(path,newpaths), conc(paths,newpaths,paths1), solve(paths1,solucao). extend([node Path],NewPaths) :- bagof([newnode,node Path], (s(node,newnode), \+ pertence(newnode,[node Path])), NewPaths),!. extend(path,_). % no nao tem sucessor.