Frame Logic: uma linguagem lógica orientada a objetos para construção e consultas dedutivas de ontologias Jacques Robin e Franklin Ramalho CIn-UFPE Frame Logic (F-Logic) Linguagem integrando 2 paradigmas: programação em lógica programação orientada a objetos em uma perspectiva de banco de dados Originada em uma pesquisa teórica sobre semântica formal das linguagens orientado a objetos tanto de programação (Smalltalk) quanto de representação do conhecimento (Sistemas de frames) quanto de banco de dados (ODMG) Semântica formal declarativa baseada na lógica de Horn da 1a ordem Partes de um programa F-Logic 1. Declaração da hierarquia de classes e objetos extend de Java regras definindo um predicado sub em Prolog 2. Definição de objetos new de Java regras definindo um predicado is-a em Prolog 3. Declaração das assinaturas das classes tipagem dos atributos e métodos em Java premissas adicionais de tipagem de argumentos de predicados em Prolog 4. Declaração das regras de dedução entre atributos e métodos das classes definições de métodos em Java a regras de dedução entre predicados em Prolog 5. Consultas lógicas sobre atributos de objetos consultas lógicas sobre predicados Prolog Ontologia Especialista – um exemplo acadêmico em F-logic (Flora) Ontologia acadêmica: hierarquia de conceitos root[]. person :: root. employee :: person. academicstaff :: employee. researcher :: academicstaff. phdstudent :: researcher. lecturer :: academicstaff. administrativestaff :: employee. secretary :: administrativestaff. technicalstaff :: administrativestaff. student :: person. phdStudent :: student. Ontologia acadêmica: restrições sobre atributos dos conceitos person[ photo =>> string, firstname =>> string, middleinitial =>> string, lastname =>> string, name =>> string, address =>> string, email =>> string, phone =>> string, fax =>> string, publication =>> publication, organizerorchairof =>> event, memberOfPC =>> event, editor =>> publication]. employee[ affiliation =>> organization, worksatproject =>> project, headOf =>> project, headOfgroup =>> researchgroup]. academicstaff[ supervises =>> phdstudent]. researcher[ researchinterest =>> researchtopic, memberof =>> researchGroup, cooperateswith =>> researcher]. secretary[ secretaryof =>> researchgroup]. student[studiesat =>> university]. phdstudent[ supervisor =>> academicstaff]. Ontologia acadêmica: instâncias jacquesrobin:lecturer[ name ->> 'Jacques Robin', firstname ->> 'Jacques', lastname ->> 'Robin', affiliation ->> ufpe, worksatproject =>> swaip]. franklinramalho:phdstudent[ name ->> 'Franklin de Souza Ramalho', firstname ->> 'Franklin', lastname ->> 'Ramalho', address ->> 'Joao Francisco Lisboa, 121, bl-20, apto 304 varzea, Recife PE, Brazil', email ->> '[email protected]', phone ->> 34535677, publication ->> {ir2001, tese2000}, studiesat ->> ufpe, supervisor->>jacquesrobin]. Ontologia acadêmica: consultas X:lecturer,X[name->>'Jacques Robin'],Y:phdstudent,Y[supervisor->>X]. X = jacquesrobin Y = franklinramalho flora2 ?- franklinramalho[publication->>X]. X = ir2001 X = tese2000 flora2 ?- X:phdstudent. X = franklinramalho Ontologia acadêmica: regras e consultas dedutivas Y:academicstaff[supervises->>X] :- X:phdstudent[supervisor->>Y]. jacquesrobin:lecturer[ name ->> 'Jacques Robin', firstname ->> 'Jacques', lastname ->> 'Robin', affiliation ->> ufpe, worksatproject ->> swaip supervises->> franklinramalho]. Consulta : X:lecturer[name->>'Jacques Robin', supervises->>Y]. X = jacquesrobin Y = franklinramalho F-Logic: generalização de vários formalismos de BD, IA e programação F-Logic Modelo de Dados Dedutivo: Datalog Modelo de Dados Relacional: SQL´92 Representação de Conhecimento com Objetos e Lógica: Modelo de Dados ObjetoRelacional: Lógicas Descritivas SQL’99 Modelo de Dados Orientado a Objetos: OQL Programação Orientada a Objeto: Java Representação de Conhecimento com Objetos: Frames, Redes Semânticas Representação de Conhecimento com Lógica: Provadores de Teorema Programação em Lógica: Prolog Representação de Conhecimento com Regras: Sistemas de Produção, Shell de Sistemas Especialistas Programação com Linguagem Declarativa de Alto-Nível: • IA e programação funcional, filosofia RUDE + prototipagem rápido (desenvolvimento em espiral) + especificação = implementação - robustez - escalabilidade, reusabilidade, desenvolvimento distribuído - metodologia completa desde requisitos até teste - formalismos e CASE não divulgados no mainstream Engenharia de Ontologias Metodologias OO: + filosofia RUP + metodologia completa desde requisitos até teste + escalabilidade, reusabilidade, desenvolvimento distribuído + formalismos e CASE divulgados no mainstream - impedance mismatch entre especificação e implementação para parte comportamental - prototipagem lento - robustez (sem semântica) F-Logic e Engenharia de Ontologias Métodos Formais: • filosofia SPIV + robustez + metodologia completa desde requisitos até teste - prototipagem lentíssimo -impedance mismatch entre especificação e implementação - escalabilidade - desenvolvimento distribuído - formalismos e CASE não divulgados no mainstream F-Logic e Engenharia de Ontologias Outras vantagens: Máquinas de inferência built-in para dedução, abdução e indução Programação Automática Estrutural e Comportamental a partir de: modelos UML Projeto SWAIP exemplos de entrada/saída Projeto Cigolf (Aprendizagem) Programação com Linguagem Declarativa de Alto-Nível: + prototipagem rápido (desenvolvimento em espiral) + especificação = implementação Programação em Lógica Orientada a Objetos em F-Logic Métodos Formais: + robustez Metodologias OO: + metodologia completa desde requisitos até teste + escalabilidade, reusabilidade, desenvolvimento distribuído + formalismos e CASE divulgados no mainstream Aplicações de F-Logic Engenharia de software: especificação formal executável orientada a objetos Inteligência artificial: representação do conhecimento por meio de regras e hierarquias conceituais Banco de dados: BD dedutivas orientada a objetos integração de dados integração de codificações integração de esquemas integração de BD com modelos de dados diferentes Web semântica: Agentes inteligentes de processamento de informação na web Dedução automática sobre documentos, objetos e dados na web Implementações de F-Logic Flora: F-Logic + HiLog + Transaction Logic Compilador F-Logic para XSB Prolog implementado em Prolog APIs para Java, C, OBDC, Oracle7, XML Domínio público, open source Stony Brook University, New York LoPiX: F-Logic + XPath + XML Implementado em C++, no entanto sem API C++ Domínio público, executável University of Freiburg, Alemanha SiRLI: F-Logic com extensões lógicas (quantificadores existenciais, conectivas) Implementado em Java Comercial, ontoprise.com TRIPLE F-Logic + RDF Compilador para Flora Domínio público Stanford/DFKI Floracle F-Logic + HiLog + Transaction Logic Compilador para Oracle9i Em desenvolvimento no CIn Elementos de um programa F-Logic Identificadores de objetos (OID) Átomos-F: declarações de relações superclasse::subclasse e classe:instância declarações do valor de um atributo/método de um objeto/classe declarações de restrições de tipo de um atributo/método de um objeto/classe Conjuntos em extensão parcial {...,...} Molécula-F: agregação de vários átomos-F em uma única expressão apenas uma abreviação sintática Átomos-P: variação sintática para compatibilidade com Prolog Termo: Átomo-P ou Molécula F Cláusula lógicas (regras): termo0 :- termo1, ..., termoN. Consultas: cláusula sem conclusão Identificadores de objetos (OID) e variáveis lógicas Identificadores de objetos: constantes simbólicas Seguindo convenção de programação em lógica: constantes começam com letra minúscula e contém nenhum caracter especial além de _ variáveis lógicas começam com letra maiúscula ou _, e podem conter caracteres especiais Exemplos: OID: o1, o2, isaac, newton, isaacNewton Variáveis lógicas: X, Method, _42 Símbolos funcionais permitem criar: identificadores de objetos compostos, ex, son(jacob) Átomos-F: hierarquia de classes e objetos A hierarquia conceitual de classe e objetos é declarada por átomos-F da forma: subclass::superclass, ou objeto:classe ou seja OIDdeObjetoComoClass :: OIDdeObjetoComoClass, e OIDdeObjetoComoObjeto : IODdeObjetoComoClass Em F-Logic classes são também objetos Átomos-F: atributos e métodos F-Logic não faz a distinção entre atributos e métodos: ambos são declarados em átomos-F da forma: objectID[methodName - returnValue] para métodos (atributos) mono-valorados objectID[methodName - {returnValueSet}] para métodos (atributos) multi-valorados { } é o operador de agregação em conjunto do F-Logic Exemplos: o átomo-F isaac[father - abraham] define o valor do método mono-valorado father do objeto issac o átomo-F abraham[son - {isaac,ismael}] define dois valores possíveis para método multi-valorado son do objeto abraham A semântica dos métodos multivalorados é a inclusão de conjuntos não a igualdade Átomos-F: métodos parametrizados Métodos parametrizados são declarados em átomos-F da forma: objectID[methodName@(ParameterList) - returnValue], ou objectID[methodName@(ParameterList) - returnValue] Exemplo: o átomo-F jacob[son@(rachel) - {joseph, benjamin}] especifica que os objetos joseph e benjamin são dois valores possíveis para o método son do objeto jacob parametrizado pelo objeto rachel Um parâmetro pode ser um oid ou uma variável lógica Átomos-F: assinaturas de classes e restrições de tipos dos métodos Restrições de tipos sobre os valores de métodos de classes são especificadas com átomos-F da forma: className[methodName className] className[methodName@(parameterList) className] className[methodName className], ou className[methodName@(parameterList) className] Exemplos: person[father man]. man[daughter@(woman) woman]. Variáveis lógica em átomos-F Variáveis lógicas podem aparecer em qualquer posição de um átomo-F: posição de nome de classe, C::thing. posição de nome de objeto, X[son@(rachel) - joseph], O:C. posição de método, jacob[M@(rachel) - joseph], posição de parâmetro de método, jacob[son@(Y) - joseph], posição de valor de método, jacob[son@(rachel Z). Uso simultâneo de variáveis lógicas em várias posições permite meta-programação e consultas a meta-dados ex, O[M@(P) - V] Moléculas-F Várias átomos-F podem ser agregados e aninhados em especificações concisas Propriedades conjuntivas são agregadas dentro de [] separadas por ; Propriedades disjuntivas são agregadas dentro de {} separadas por , () são usadas resolver ambigüidade devido ao aninhamento Exemplo: isaac[father - abraham:man[son@(hagar:woman)- ismael]; mother - sarah:woman]. Agregada: isaac[father - abraham]. abraham:man. hagar: woman. abraham[son@(hagar) - ismael]. isaac[mother - sarah]. sarah:woman. Átomos-P e moléculas-P Predicados da programação em lógica pura (Prolog) podem aparecer em programas F-Logic chamados de átomos-P Átomos-P permitem: integração com de programas F-Logic com programas Prolog modelagem alternativa Moléculas-F podem ser aninhadas dentro de átomos-F formando moléculas-P: married(isaac[father - abraham], rebekah:woman). Átomos-P e moléculas-P não podem ser aninhadas em moléculas-F Modelagens alternativas com átomos-P e moléculas-F Modelagem orientado a relações com átomos-P: Modelagem orientado a objetos com átomos-F: married(isaac,rebekah). male(jacob). sonOf(isaac,rebekah,jacob). isaac[married_to - rebekah]. jacob:man. isaac[son@(rebekah) - jacob]. Cláusulas, fatos, regras e programas F-Logic Cláusulas F-Logic podem ser: uma molécula-F uma molécula-P uma regras com uma molécula (F ou P) em conclusão e uma conjunção de moléculas (F ou P) como premissas Regras F-Logic são da forma: headMolecule :- bodyMolecule1, ..., bodyMoleculeN. Fatos F-Logic extendem fatos Prolog com moléculas-F Regras F-Logic extendem regras Prolog com moléculas-F na conclusão ou nas premissas Regras F-Logic implementam corpo dos métodos das classes e objetos Um programas F-Logic é uma conjunção (implícita) de cláusulas F-Logic Consultas e expressões de caminhos Uma consulta F-Logic é uma regra F-Logic sem conclusão, ou seja, uma conjunção de moléculas (F ou P) Consultas e premissas das regras podem conter expressões de caminhos usando self (this em Java) e o . da orientação a objetos Integradas com variáveis lógicas, expressões de caminhos permitem especificar consultas complexas com muita concisão .. é usado para caminhar sobre métodos multivalorados em grafos de objetos ! e !! são usados para caminhar sobre métodos herdáveis em grafos de objetos Consultas e expressões de caminhos: exemplos Consulta F-Logic sem caminho de expressão: ?- isaac[father Y], Y[father X]. Consulta O2SQL: SELECT X FROM X IN manager FROM Y IN X.vehicles WHERE Y.color = red AND Y.producedBy.city = detroit AND Y.producedBy.president = X Consultas F-Logic com caminho de expressão: ?- isaac.father[father X]. ?- X:manager..vehicles[color red] .producedBy[city detroit; president X]. Herança Ambos valores de métodos (objetos) e restrições de tipos sobre valores de métodos (classes) são herdadas de uma classes para suas subclasses se for declaradas da forma: className[inheritableMethodName objectID], className[inheritableMethodName objectID], className[inheritableMethodName className], ou className[inheritableMethodName className]. F-Logic permite: sobrescrita de valor herdada herança múltipla sobrecarga de métodos Herança: exemplo gray:color. white:color. elephant[color color]. elephant[color gray]. royalElephant :: elephant. royalElephant[color white]. clyde : elephant. dumbo : royalElephant. ?- clyde[color C]. C = gray. ?- dumbo[color C]. C = white. ?- royalElephant[color C]. C = white ?- Exemplo introdutório: um BD acadêmico Esquema: hierarquia de classes empreg::pessoa. prof::empreg. assist::empreg. Esquema: assinatura de classes depto[nome => string; empregs =>> empreg; chefe => prof]. pessoa[nome => string; nasc => data; idade => int]. empreg[depto => depto; salario => int]. publi[nome => string, autores =>> {assist,prof}]. prof[publi =>> publi; titulação *-> PhD; salario -> 50000]. assist[publi =>> publi]. data[ano=>int; mes=>int; dia=>int]. Esquema: regras dedutivas X:pessoa[idade -> I] :- I >= 0, I <= 130. meiaIdade(P) :- P:prof. meiaIdade(P) :- P.idade >= 30, P.idade <= 60. X:[jointPubli@Y->> P] :- X:{prof,assist}, Y:{prof,assist}, X[publi ->> P], Y[publi ->>P]. E[chefe->C] :- E:empreg, D:depto, E[depto -> D[chefe -> C:empreg]. D:data :- ... Dados bob:prof[nome -> “Bob”; nasc -> data[ano => 1960; mes => 01; dia => 02]; depto -> di, publi ->> {jacm,cacm}]. mary:prof[nome -> “mary”; titulacao -> mestre depto => di, publi ->> {jacm,cacm}]. phil:assist[nome -> “Phil”, depto => di, publi ->> {cacm}]. john:assist[nome -> “John”, depto => di, publi ->> {jacm}]. sally:assist[nome -> “Sally”, depto => di, publi ->> {jacm}]. jacm:publi[nome -> “JACM”; autores ->> {bob, mary, john, sally}]. cacm:publi[nome -> “CAC”, autores ->> {bob, mary, phil}]. Consultas ?- meiaIdade(E), E:empreg[depto -> di[chefe -> E]]. E = bob. ?- mary[jointPubli@E ->> jacm]. E = bob, E = john, E = sally F-Logic como linguagem lógica Serviços de dedução: Fundamentação em uma teoria da prova completa e correta Motor de inferência para regras dedutivas com: referências a objetos nas premissas e conclusões sintaxe de ordem superior semântica da 1a ordem unificação de descrições parciais de objetos F-Logic como linguagens de consulta e manipulação de BD Serviços fornecidos: Construtores de conjuntos com semântica de inclusão Operadores de agregação Consultas devolvem todas as respostas de uma vez Consultas uniforme dos dados e dos metadados (esquema) Serviços não fornecidos: Atualizações declarativas Persistência Gerenciamento de grandes conjuntos de dados Gerenciamento de memória secundária Gerenciamento de transações F-Logic como linguagem orientada a objetos: serviços fornecidos Serviços fornecidos: Identificação única, inclusive funcionais Construtores de estruturas complexas ortogonais e extensíveis Hierarquia de classes (esquema) com herança múltipla de estado e comportamento Estado inicial e comportamento default Sobrescrita, sobrecarga e ligação dinâmica Restrições de tipos Serviços parcialmente fornecidos: Completude computacional dependentemente da implementação Verificação e inferência de tipos indiretamente via regras de ordem superior Serviços não fornecidos: Encapsulamento Acesso completo a recursos Gerenciamento de versões F-Logic como linguagem orientada a objetos: características Tudo é um objeto: objetos classes atributos valores métodos regras Não há distinção entre atributos e métodos Variável lógica pode aparecer em qualquer posição: objetos classes atributos valores métodos regras