FLORID:caminhos, negação e estratificação Idevan Gonçalves Freire Junior

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Métodos Iterativos.
Avaliador de Expressões
Paulo Marques Hernâni Pedroso
Curso: Banco de Dados I Análise de Sistemas PUC Campinas
Tópicos de Lógica Proposicional
1 Funções Trajectória de Projéctil DI/FCT/UNL 1º Semestre 2004/2005.
Java: Pacotes e Modificadores de Visibilidade
Cálculo Relacional Datalog não-recursivo
DIAGRAMA DE ESTADOS DIAGRAMA ESTADO TRANSIÇÃO ENTRE ESTADOS.
Orientação a Objetos Introdução. Objetos: o que são? Olhando o mundo real pode-se ver vários objetos: mesa, cadeiras, alunos, professores etc. Esses objetos.
Árvores.
Atribuição de Responsabilidades em Projeto OO
Professora: Aline Vasconcelos IF Fluminense
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes.
Departamento de Informática
Recursividade Conceitos e Aplicações.
Diagrama de Classes.
Linguagem de Programação II
Relações em uma Gramática
Introdução ao -calculus
Abordagem Estratégica ao Teste de Software
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Modelagem de Interações
INF 1771 – Inteligência Artificial
UFRPE – Modelos de Qualidade Teresa Maciel
Diagramas de Sequência e Comunicação
Informática Teórica Engenharia da Computação
Aula prática - análise contextual
Linguagens de Programação
Sistemas Operacionais
Compiladores, Aula Nº 5 João M. P. Cardoso
Sobrecarga e Encapsulamento
Interface Chaimom Antônio da Silva. Interface - Tópicos Definição Objetivos Regras Boas Práticas Implementação.
Gramáticas Livres de Contexto
Análise e Projeto de Sistemas UNIVERSIDADE DE CRUZ ALTA Ciência da Computação 2010/1.
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Linguagem de Expressões 2
Classes, Objetos, Atributos e Métodos JAVA
Sistemas Especialistas
Capítulo II Gramáticas e Linguagens
Prof. Silvestri – todos os direitos reservados SISTEMAS DISTRIBUIDOS Aula 5 Eduardo Silvestri
UML Diagrama de classes.
UML - Unified Modeling Language
Sistemas Operacionais
© Ricardo Pereira e Silva
Analise Semântica aula-10-analise-semântica.pdf.
Aula prática 14 Orientação a Objetos – C++ Parte 2
Sistemas Especialistas Podem ser definidos como programas de computador desenvolvidos para representar o conhecimento humano num dado domínio específico.
Semântica de uma fórmula da lógica da 1a ordem via modelo de Herbrand
Métodos Formais.
INE Fundamentos de Matemática Discreta para a Computação
Programação Lógica com Prolog
Integração de Ferramentas CASE
Faculdade Pernambucana - FAPE Setembro/2007
Fundamentos de linguagens de programação
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP .NET Framework
Conceitos de Orientação a Objetos zConceito de tipo zTipos Abstratos de Dados zMódulos/Pacotes zEncapsulamento.
Projeto de Banco de Dados
Interpretação do Teorema de Herbrand
Array e ArrayList LPOO – 01/09/14.
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Felipe Nunes Flores – Programa de Educação Tutorial.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

FLORID:caminhos, negação e estratificação Idevan Gonçalves Freire Junior

Caminhos * Objetos podem ser acessaods por seu nome ou por expressões de caminho * Expressão de Caminho (ou Caminho) é o acesso de um objeto através de métodos de outros objetos. benjamin.father.father.motherrebekah god.people?

Caminhos * Podem conter outros métodos * É possível seriar caminhos pela aplicação sucessiva de métodos * Alguns caminhos podem indicar objetos sem um id-term como nome do objeto

Aninhando Caminhos * Todo caminho corresponde a um object value * É possível aninhar caminhos em moléculas-F tão bem como em moléculas-P onde id-terms sejam permitidos father->jacob]. abraham[son->>{jacob.father}]. male(jacob.father). jacob.father.father = abraham.

Aninhando Caminhos * Se o caminho ocorre ao nível do método ou da classe, deve ser cercado por parênteses Exemplo de definição do método twice : X[(M.twice)->Z] :- X[M->Y[M->Z]] * Pode ser chamado por outros métodos como a aplicação do método original duas vezes

Aninhando Caminhos i)jacob:(god.people). ii)jacob:god.people. iii)(jacob:god).people. A primeira molécula-F declara jacob do tipo a aplicação do método people sobre o objeto god A segunda equivale a terceira, declarando que o objeto jacob é um membro da classe god e indica a aplicação do método people a ele * Os dois últimos caminhos não são moléculas-F (não terminam com lista de especificação)

Aninhando Caminhos * Objetos intermediados num caminho podem ter listas de especicação, tornando-as moléculas-F jacob:man[father->isaac].mother * É útil num corpo de regra para restringir o conjunto de objetos casando um caminho com uma propriedade estabelecida

Criação de Objetos com Caminhos * Caminhos numa rule head ou num fato pode induzir a criação de novos objetos * Ocorre quando um caminho consiste de um objeto host com a aplicação de método ainda não defindo abraham.father:man. jacob:(god.people). Os objetos abraham.father e god.people não possuem id- terms base como nome do objeto e são acessados através dos caminhos * Poderoso na conexão de variáveis

Caminhos em Queries * Ajuda a descrever a informação em questões de forma mais concisa * Podem poupar variáveis para resultados intermediários ?- isaac.father[father->X]. * Sem o caminho, deve-se amarrar uma variável Y explicitamente ao objeto ?- isaac[father->Y], Y[father->X].

Caminhos Multivalorados * Caminhos multivalorados são construídos a partir de métodos multivalorados, sempre indicado por dois pontos em seqüência isaac..son * Casa com cada objeto de um conjunto de objetos * Um caminho é multivalorado se seu correspondente não aninhado contém ao menos uma aplicação de método multivalorado.

Caminhos Multivalorados jacob[son->>{joseph}].father.double):person jacob.(father.double) jacob[father->abraham..son].mother jacob.mother isaac:man..son[mother->rebekah]..son isaac..son..son

Caminhos Multivalorados Semânticas de Caminhos Multivalorados: * Um caminho multivalorado indica um caminho de objetos. ?- sarah[son->>abraham..son]. * Cada objeto do conjunto é um resultado possível do método

Caminhos com Métodos Herdáveis * Caminhos pode conter métods herdáveis * Os métods são indicados por exclamações (!) ao invés de pontos person!believes_in O caminho acima indica o objeto god

Programas Um programa F-logic é uma coleção de fatos e regras em ordem arbitrária * Semântica de Ponto Fixo * Negação * Estratificação * Herança

Semântica de Ponto Fixo * A avaliação bottom-up inicia com um objeto base vazio * Fatos e regras com corpo vazio são sempre consideradas como true * Fatos e regras são avaliados iterativamente * Existindo bindings variáveis tornando o corpo da regra válido no objeto base, esses bindings são propagados no head da regra

Semântica de Ponto Fixo * A avaliação das regras continua enquanto novas informações forem obtidas * A avaliação de um programa F-logic (sem negação) alcança um ponto fixo que coincide com o objeto base minimal único daquele programa * O objeto base minimal é o menor conjunto de átomos-P e -F tais que todas as propriedades do fecho e todos os fatos e regras do programa são satisfeitos

Negação * Negação em FLORID é manipulada de acordo com a semântica inflacionária * Toda variável dentro de um subgoal negado deve ser limitado por outros subgoals * Apenas instâncias base de subgoals negados são considerados durante a avaliação * Uma instância é avaliada como true, sse o objeto base não contém a informação correspondente no momento da avaliação

Negação isaac[father]->abraham]. isaac:orphan :- not isaac[father->abraham]. ?- sys.eval[]. ?- isaac:orphan.

Negação e Estratificação * Outro conceito para manipular a negação é a semântica bem-fundada que não é suportada por FLORID, mas pode ser simulada * A estratificação é uma abordagem muito comum, mas a estratificação automática não pode ser feita por FLORID FLORID fornece um comando para estratificação explícita ?- sys.strat.doIt[] que divide o programa em duas ou mais camadas

Negação e Estratificação * A informação requisitada por um subgoal negado deve sempre ser derivado em camadas mais baixas que a camada que o contém * O comando de estratificação causa a avaliação das regras dentro da camada mais alta a fim de ser adiada até o ponto fixo da camada mais baixa ser computada * As regras e fatos da camada mais baixa não são mais considerados durante o restante da avaliação

Negação e Estratificação isaac[father->abraham]. ?- sys.strat.doIt[]. isaac:orphan :- not isaac[father->abraham]. ?- sys.eval[]. ?- isaac:orphan.

Estratificação O comando ?- sys.strat.doIt[]. pode ser utilizado em programas F-logic sem negação para acelerar a avaliação * O comando aumenta a eficiência quando todos os subgoals numa regra dependem apenas do que há nas regras de mesma camada ou mais baixa

Estratificação X[ancestor->>Y] :- X[father->Y]. X[ancestor->>Y] :- X[mother->Y]. ?- sys.strat.doIt[]. X[ancestor->>Y] :- X.father[ancestor->>Y]. X[ancestor->>Y] :- X.mother[ancestor->>Y]. ?- sys.strat.doIt[]. X[descendant->>Y] :- Y[ancestor->>X].

Herança * Uma nova informação deve ser herdada de uma classe para uma instância ou uma subclasse apenas quando esta informação for necessária para avaliar um corpo de regra ou responder uma requisição person[believes_in*->god]. abraham:person * Gatilhos de Herança servem para descrever uma aplicação de método a um determinado objeto * Informação é herdada apenas se um gatilho está ativo e dispara

Herança * Duas condições a serem satisfeitas para um método herdável ativar um gatilho de herança: i)Deve existir um subgoal apropriado em um corpo de regra ou query que case com o método herdável ?- X[believes_in->Y]. ii)O método herdável ainda não está definido para o objeto que herdaria o método * O disparo do gatilho é adiado até a avaliação do programa ter alcançado um ponto fixo * Regras lógicas têm prioridade sobre herança

Herança abraham:person[belives_in->god;descendant->>{isaac:person}]. ahab:person. X[believes_in->god] :- abraham[descendant->>X:person]. god[loves->>X] :- X[believes_in->god]. ?- sys.eval[]. ?- god[loves->>X].

Herança * Se todos os gatilhos ativos disparam ao mesmo tempo, uma informação contraditória pode ser passada john:king. peter:king. king[lives*->palace]. peter[lives->abroad] :- john[lives->palace]. john[lives->abroad] :- peter[lives->palace]. ?- sys.eval[]. ?- X[lives->Y]. * A solução é disparar um gatilho por vez

Herança A performance da avaliação pode se tornar muito lenta se muitos gatilhos de herança estiverem ativos por são disparados sucessivamente, apenas um por vez.

Verificação de Tipos * Verificação de tipos automática não é implementada em FLORID * Motivo: verificação de tipos estáticos não é possível para programas F-logics gerais, graças à possibilidade de gerar novas igualdades dinamicamente por regras * Para verificar se qualquer método em um objeto base está tipado corretamente, examina-se a Segurança de Tipo e a Corretude de Tipo

Verificação de Tipos * Segurança de Tipo: significa que não existem métodos sem uma assinatura correspondente no objeto base * Corretude de Tipo: implica que o objeto resultante de um método deve ser uma instância de todas as classes resultantes da assinatura apropriada Para retardar a avaliação da verificação de tipo até o ponto fixo utiliza-se o comando de estratificação: ?- sys.strat.doIt[].