Inter Prolog uma API para integrar Prolog com

  • Slides: 32
Download presentation
Inter. Prolog: uma API para integrar Prolog com Java Marcelino Pereira CIn-UFPE

Inter. Prolog: uma API para integrar Prolog com Java Marcelino Pereira CIn-UFPE

Roteiro * Motivação Interfaces Java/Prolog Inter. Prolog Serialização de objetos Java Gramáticas de Cláusulas

Roteiro * Motivação Interfaces Java/Prolog Inter. Prolog Serialização de objetos Java Gramáticas de Cláusulas Definidas: ferramentas Prolog para Parsing e Geração Swing Chamar Java a partir de Prolog * Chamar Prolog a partir de Java * DOODCI: exemplo de aplicação Java/Prolog Conclusões * * * *

Motivação: porque integrar os paradigmas lógico e orientado a objetos ? * Pontos fortes

Motivação: porque integrar os paradigmas lógico e orientado a objetos ? * Pontos fortes da prog. em lógica * Pontos fortes da prog. OO • raciocínio dedutivo built-in • raciocínio por herança built-in • parsing e geração built-in (compilação, meta-prog. , PLN) • encapsulamento • expressão de relações universalmente quantificadas e recursivas entre conceitos • expressão de estruturas complexas internas aos conceitos • expressão declarativa do conhecimento terminológico • expressão declarativa do conhecimento comportamental • robustez e extensibilidade do código • concisão do código • metodologia de desenvolvimento informal, porém escalável para software de grande porte • prototipagem rápido • especificação formal executável

Motivação: porque integrar especificamente as linguagens Prolog e Java? * * * Quase todas

Motivação: porque integrar especificamente as linguagens Prolog e Java? * * * Quase todas as aplicações reais de IA são embutidas em aplicações multifacetadas Envolvem também GUI, distribuição em redes, conectividade com BD, conectividade com software de legado convencionais, atuadores físicos, etc. ex, comércio eletrônico, filtragem de informação na Internet, jogos, robótica, etc.

Motivação: porque integrar especificamente as linguagens Prolog e Java? * Prolog: • base mais

Motivação: porque integrar especificamente as linguagens Prolog e Java? * Prolog: • base mais versátil sobre a qual implementar serviços cognitivos • dedutivo, lingüístico, indutivo, abdutivo, probabilista • padrão em IA, usado também fora da IA (ex, BD), no entanto divulgação industrial permanece marginal * Java: • base mais versátil sobre a qual integrar todos os outros serviços • conjunto incomparável de API prontas para GUI, distribuição e mobilidade em redes, conectividade com qualquer coisa, segurança, etc. • linguagem mais maciçamente divulgada ao lado de C/C++ * Ambos compilados para código de máquina virtual

Arquiteturas de integração Prolog/Java * 1 camada • Um programa Prolog é transformado em

Arquiteturas de integração Prolog/Java * 1 camada • Um programa Prolog é transformado em um programa Java • 2 estratégias: t t * Pré-compilação de regras Prolog em classes Java Extensão de Java, com construções para a definição de regras 2 camadas • Máquina de inferência Prolog implementada em Java • ex, método unify, método search, método backtrack, . . . * 3 ou mais camadas • 2 processos rodando: uma máquina virtual Prolog e uma máquina virtual Java • os 2 comunicam: t t via 3 a linguagem (ex, C) pelo qual ambas máquinas virtuais tem API ou via soquetes com conversão bi-direcional de objetos Java para termos Prolog (Inter. Prolog)

Inter. Prolog * API bidirecional entre XSB Prolog e Java padrão • execução de

Inter. Prolog * API bidirecional entre XSB Prolog e Java padrão • execução de consultas Prolog em métodos Java • invocação de métodos Java em consulta ou premissa Prolog * Princípios básicos: • comunicação entre máquinas virtuais via soquetes • conversão bi-direcional de objetos Java para termos Prolog usando t t serialização de objetos Java parsing e geração de termos Prolog usando gramáticas de cláusula definidas (ou DCG do inglês Definite Clause Grammar) • 2 componentes: classes Java e regras Prolog • mecanismo built para geração de termos Prolog a partir de objetos Java * Origem: • Projeto PROLLOPE multi-institucional Univ. Nova de Lisboa, Univ. de Porto, Univ. de Hannover, Servi. Soft (empresa)

Arquitetura de Inter. Prolog

Arquitetura de Inter. Prolog

Serialização de objetos Java Padrão de representação de objetos Java compilados na forma de

Serialização de objetos Java Padrão de representação de objetos Java compilados na forma de bytecodes interpretáveis pela máquina virtual Java * Utilizado para: * • armazenamento persistente • transferência de objetos pela rede em aplicações distribuídas

Gramáticas de Cláusulas Definidas

Gramáticas de Cláusulas Definidas

DCGs: Gramáticas de Cláusulas Definidas * Pré-processador built-in de Prolog • converte regras de

DCGs: Gramáticas de Cláusulas Definidas * Pré-processador built-in de Prolog • converte regras de gramáticas em cláusulas lógica • re-aproveita provador de teorema de Prolog • para implementar “de graça” parser ou gerador de frases * Usa diferença de listas como estrutura de dados: • * frase da linguagem cuja gramática é representada pela DCG - lista de palavras ainda a ser processadas = listas de palavras já processadas Cada regra DCG: • associada a uma categoria sintática genérica cat • instancia 2 argumentos adicionais implícitos: 1. lista de palavras do constituinte const da frase de catégoria cat 2. lista de palavras do resto da frase na direita de const

Exemplo mínimo de Prolog DCG: conversão regra DCG / cláusula Prolog Regras de gramáticas:

Exemplo mínimo de Prolog DCG: conversão regra DCG / cláusula Prolog Regras de gramáticas: sn --> det, subs. Entradas do dicionário: det --> [o]. det--> [a]. det --> [os]. det --> [as]. subs --> [meninos]. subs --> [meninas]. Conversão para cláusulas Prolog: sn(Csn, Rsn) : - det(Csn, Rdet), subs(Rdet, Rsn). det([o|Rdet], Rdet). det([a|Rdet], Rdet). det([os|Rdet], Rdet). det([as|Rdet], Rdet). subs([menino|Rsubs], Rsubs). subs([meninos|Rsubs], Rsubs). subs([meninas|Rsubs], Rsubs).

Regras com argumentos de concordância Regras de gramáticas: sn(G, N) --> det(G, N), subs(G,

Regras com argumentos de concordância Regras de gramáticas: sn(G, N) --> det(G, N), subs(G, N). Entradas do dicionário: det(masc, sing) --> [o]. det(fem, sing) --> [a]. det(masc, plur) --> [os]. det(fem, plur) --> [as]. subs(masc, sing) --> [menino]. sub(masc, plur) --> [meninos]. subs(fem, sing) --> [menina]. subs(fem, plur) --> [meninas]. Conversão para cláusulas Prolog: sn(G, N, Csn, Rsn) : - det(G, N, Csn, Rdet), subs(G, N, Rdet, Rsn). det(masc, sing, [o|Rdet], Rdet). det(fem, sing, ([a|Rdet], Rdet). det(masc, plur, [os|Rdet], Rdet). det(fem, plur, [as|Rdet], Rdet). subs(masc, sing, [menino|Rsubs], Rsubs). subs(masc, plur, [meninos|Rsubs], Rsubs). subs(fem, sing, [menina|Rsubs], Rsubs). subs(fem, plur, [meninas|Rsubs], Rsubs).

Regras genéricas com restrições Regras de sintaxe: const(sn, G, N) --> const(det, G, N),

Regras genéricas com restrições Regras de sintaxe: const(sn, G, N) --> const(det, G, N), const(subs, G, N). * Dicionário: const(subs, menino, masc, sing). const(det, o, masc, sing). * Regras de morfologia: const(Cat, Lex. MS, masc, sing) --> [Lex. MS], {member(Cat, [subs, adj, det])}. const(Cat, Lex. MS, masc, plur) --> [Lex. MP], {member(Cat, [subs, adj, det]), plur(Lex. MP, Lex. MS)}. const(Cat, Lex. MS, fem, sing) --> [Lex. FS], {member(Cat, [subs, adj, det]), fem(Lex. FS, Lex. MS)}. const(Cat, Lex. MS, fem, plur) --> [Lex. FP], {member(Cat, [subs, adj, det]), plur(Lex. FP, Lex. FS), fem(Lex. FS, Lex. SM). * Predicados de restrições: plur(Lex. MP, Lex. MS) : - concatom(Lex. MS, s, Lex. MP). fem(Lex. FS, Lex. MS) : - concatom(Lex. Rad, a, Lex. FS), concatom(Lex. Rad, o, Lex. MS). concatom(A, B, AB) : - name(A, Sa), list(La, Sa), name(B, Sb), list(Lb, Sb), append(La, Lb, Lab), list(Lab, Sab), name(AB, Sab). *

Argumentos para mapeamento frase, estrutura sintática, conteúdo semântico sn(sn(Det, Subs), G, N) --> det(Det,

Argumentos para mapeamento frase, estrutura sintática, conteúdo semântico sn(sn(Det, Subs), G, N) --> det(Det, G, N), subs(Subs, G, N). det(o), masc, sing) --> const(det, o, masc, sing). subs(menino), masc, sing). --> const(subs, livro, masc, sing). const(Cat, Lex. MS, masc, sing) --> [Lex. MS], {member(Cat, [subs, adj, det])}. const(Cat, Lex. MS, masc, plur) --> [Lex. MP], {member(Cat, [subs, adj, det]), plur(Lex. MP, Lex. MS)}. const(Cat, Lex. MS, fem, sing) --> [Lex. FS], {member(Cat, [subs, adj, det]), fem(Lex. SF, Lex. MS)}. const(Cat, Lex. MS, fem, plur) --> [Lex. FP], {member(Cat, [subs, adj, det]), plur(Lex. FP, Lex. FS), fem(Lex. FS, Lex. SM).

DCG: interpretador ou gerador de frases ? - sn(Parse. Tree, G, N, [o, menino],

DCG: interpretador ou gerador de frases ? - sn(Parse. Tree, G, N, [o, menino], []). Parse. Tree = sn(det(o), subs(menino)), G = masc, N = sing. yes ? - sn(sn(det(o), subs(menino)), G, N, Word. List, []). Word. List = [o, menino], G = masc, N = plur. yes ? - sn(sn(det(o), subs(menino)), _, _, [o, menino], []). yes

SWING * * Java Foundation Classes (JFC) extende o Abstract Windowing Toolkit (AWT), adicionando

SWING * * Java Foundation Classes (JFC) extende o Abstract Windowing Toolkit (AWT), adicionando bibliotecas de classes GUI JFC/Swing GUI Components t componentes escritos em Java sem código específico para sistema de janelas t facilita customização de visual t independência do sistema nativo de janelas t simplifica a extensão de aplicações

Chamar Java a partir de Prolog * * O formato da sequência de bytes

Chamar Java a partir de Prolog * * O formato da sequência de bytes é padrão e público, e Interprolog sabe disso, em forma de uma Gramática de Cláusulas Assertivas Esta gramática é capaz de fazer parse de objetos enviados por Java e de sintetizar novos objetos das especificações de termos Prolog, através da representação serializada da sequência de bytes

Chamar Java a partir de Prolog * java. Message(Target, Result, Message) • sincronamente envia

Chamar Java a partir de Prolog * java. Message(Target, Result, Message) • sincronamente envia Message para o objeto Target obtendo o objeto Result • java. Message(Target, Message): ? java. Message('java. lang. System'-out, println(string('Hello world!'))) • predicado pode ser usado para enviar qq mensagem p/ qq método público na classe Target ou superclasses (variedades)

Chamar Java a partir de Prolog * ip. Object. Spec • especifica objetos da

Chamar Java a partir de Prolog * ip. Object. Spec • especifica objetos da respectiva classe * ip. Object. Template • substitui por variáveis lógicas as variáveis descritas na classe * ip. Prolog. Engine • referencia Prolog. Engine

Chamar Java a partir de Prolog * Build. Term. Model • constrói uma especificação

Chamar Java a partir de Prolog * Build. Term. Model • constrói uma especificação de objeto para uma instância representando um termo • utilizado para passar termos Prolog para Java * browse. Term • cria janela com um browser de termo * browse. Tree. Term • cria janela com um browser hierárquico * browse. XSBTable • cria janela para navegação na avaliação corrente do predicado

Chamar Prolog a partir de Java * Classe Prolog. Engine • fornece ao programador

Chamar Prolog a partir de Java * Classe Prolog. Engine • fornece ao programador Java acesso ao Prolog • cada processo background Prolog é encapsulado numa instância Prolog. Engine * Métodos disponíveis para: • solicitar ao Prolog para avaliar objetivos e obter um resultado num objeto • enviar texto ao seu stdin e coletar seu stdout utilizando um mecanismo listener simples baseado em processos background Java

Chamar Prolog a partir de Java * Classe add. Prolog. Output. Listener • faz

Chamar Prolog a partir de Java * Classe add. Prolog. Output. Listener • faz com que o cliente receba mensagens * send. And. Flush • envia texto ao stdin do Prolog * interrupt(), shutdown() • simula um ctrl-c

Chamar Prolog a partir de Java * teach. More. Objects • envia um array

Chamar Prolog a partir de Java * teach. More. Objects • envia um array de objetos p/ Prolog * register. Java. Object • registra um objeto com seu Prolog. Engine e retorna um ID integer p/ futura ref em Prolog * is. Available • retorna true se o Prolog não estiver ocupado * deterministic. Goal • chama o objetivo Prolog que retorna objetos que refletem a 1 a solução encontrada

DOODCI Uma API Prolog para OLAP • Deductive Object-Oriented Data Cube Interface • Integração

DOODCI Uma API Prolog para OLAP • Deductive Object-Oriented Data Cube Interface • Integração t DW + OLAP + D. Mining + Dedução + PLN • Ambiente inteligente e abrangente para DSS e KDD • Projeto MATRIKS t Multidimensional Analysis and Textual Reporting for Insight Knowledge Search • BD multidimensionais + Sist. Dedutivos

DOODCI Uma API Prolog para OLAP Java + FLORA + XSB + Inter. Prolog

DOODCI Uma API Prolog para OLAP Java + FLORA + XSB + Inter. Prolog * Interprolog * • permite a comunicação entre Java e o sistema dedutivo XSB * APIs (JDCI e DOODCI) • permitem comunicação entre multidimensional e dedutivo * o banco de dados A partir dos objetos FLORA será possível realizar consultas OLAP no paradigma lógico orientado a objetos

DOODCI Uma API Prolog para OLAP

DOODCI Uma API Prolog para OLAP

DOODCI Uma API Prolog para OLAP * Load. Cubes e Execute. MDQuery • classes

DOODCI Uma API Prolog para OLAP * Load. Cubes e Execute. MDQuery • classes principais para converter os objetos Java em termos Prolog * Load. Cubes • Load. Cubes instanciada quando da conexão da JDCI ao esquema multidimensional • a partir de FLORA, utilizando Inter. Prolog, Load. Cubes é chamada • quando construtor classe é executado, metadados multidimensionais exportados pela JDCI são convertidos para termos XSB Prolog por meio do Inter. Prolog.

DOODCI Uma API Prolog para OLAP * Execute. MDQuery • instanciada quando passa-se um

DOODCI Uma API Prolog para OLAP * Execute. MDQuery • instanciada quando passa-se um string MDX, a partir de FLORA, para ser executada no esquema de dados multidimensionais conectado, na parte Java de DOODCI • na execução do construtor desta classe, os objetos criados do lado Java na execução da consulta MDX pela API JDCI são convertidos para termos XSB Prolog utilizando-se o Inter. Prolog

* Java Conclusões • Reflexão/Serialização • Comunicação/GUI * Inter. Prolog=poder/flexibilidade Prolog/Java • Ferramenta nova

* Java Conclusões • Reflexão/Serialização • Comunicação/GUI * Inter. Prolog=poder/flexibilidade Prolog/Java • Ferramenta nova • Necessita ajustes • Flexibilidade e dinamismo * DOODCI • OLAP + Dedução Data Mining * Carência de documentação Inter. Prolog

Conclusões * Prolog • representação dados * Java • manipulação eventos • aparência •

Conclusões * Prolog • representação dados * Java • manipulação eventos • aparência • edição * Java Foundation Classes (JFC) / SWING • fornece framework natural

Bibliografia * * Calejo, Miguel (1998). Introduction to Inter. Prolog. Servisoft. Calejo, Miguel (1998).

Bibliografia * * Calejo, Miguel (1998). Introduction to Inter. Prolog. Servisoft. Calejo, Miguel (1998). Inter. Prolog: A simple yet powerful Java/Prolog interface. Servisoft. Lino, Natasha C. Q. (2000). DOODCI - Uma API para Integração entre Bancos de Dados Multidimensionais e Sistemas Dedutivos. CIn/UFPE. Projeto PROLOPPE (2000) em: http: //www-ia. di. fct. unl. pt/7 Elmp/documents/proloppe. html * * Java+Prolog systems and interfaces (2000) em: http: //www. declarativa. com/interprolog/systems. htm Java API Documentation (2000) em: http: //www. declarati va. com/interprolog/htmldocs/overview-summary. html