350 likes | 549 Views
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
E N D
Frame Logic: uma linguagem lógica orientada a objetos para construção e consultas dedutivasde 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 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]. 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].
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 ->> 'fsr@cin.ufpe.br', 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 Representação de Conhecimento com Objetos e Lógica: Lógicas Descritivas Modelo de Dados Objeto- Relacional: SQL’99 Modelo de Dados Dedutivo: Datalog Programação em Lógica: Prolog Representação de Conhecimento com Regras: Sistemas de Produção, Shell de Sistemas Especialistas Modelo de Dados Orientado a Objetos: OQL Representação de Conhecimento com Objetos: Frames, Redes Semânticas Representação de Conhecimento com Lógica: Provadores de Teorema Modelo de Dados Relacional: SQL´92 Programação Orientada a Objeto: Java
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 • 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 • 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 Engenharia de Ontologias
Programação com Linguagem • Declarativa de Alto-Nível: • prototipagem rápido (desenvolvimento em espiral) • especificação = implementação • Outras vantagens: • Máquinas de inferência built-in para dedução, abdução e indução • Programação AutomáticaEstrutural e Comportamental • a partir de: • modelos UML • Projeto SWAIP • exemplos de entrada/saída • Projeto Cigolf (Aprendizagem) • Métodos Formais: • robustez • Metodologias OO: • metodologia completa desde requisitos até teste • escalabilidade, reusabilidade, desenvolvimento distribuído • formalismos e CASE divulgados no mainstream F-Logic e Engenharia de Ontologias Programação em Lógica Orientada a Objetosem F-Logic
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
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 Implementações de F-Logic
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
Modelagem orientado a relações com átomos-P: married(isaac,rebekah). male(jacob). sonOf(isaac,rebekah,jacob). Modelagem orientado a objetos com átomos-F: isaac[married_to - rebekah]. jacob:man. isaac[son@(rebekah) - jacob]. Modelagens alternativas com átomos-P e moléculas-F
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
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]. Consultas e expressões de caminhos: exemplos
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
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 ?- Herança: exemplo
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 Exemplo introdutório: um BD acadêmico
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
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 linguagens de consulta e manipulação de BD
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: serviços fornecidos
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 F-Logic como linguagem orientada a objetos: características