1 / 30

FLORID: caminhos, negação e estratificação

FLORID: caminhos, negação e estratificação. Idevan Gonçalves Freire Junior {igfj@di.ufpe.br}. 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.

kishi
Download Presentation

FLORID: caminhos, negação e estratificação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FLORID: caminhos, negação e estratificação Idevan Gonçalves Freire Junior {igfj@di.ufpe.br}

  2. 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. jacob.son@(rachel,11) joseph benjamin.father.father.mother rebekah god.people ?

  3. 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

  4. 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 jacob.son@(rachel,11)[mother->rachel; father->jacob]. abraham[son->>{jacob.father}]. jacon[son@(joseph.mother)->>{benjamim}]. male(jacob.father). jacob.father.father = abraham.

  5. 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

  6. 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)

  7. 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

  8. 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

  9. 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].

  10. 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.

  11. 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 jacob..son@(laban..daughter:woman) jacob..son@(laban..daughter)

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

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

  19. 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

  20. 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

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

  22. 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

  23. 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].

  24. 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

  25. 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

  26. 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].

  27. 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

  28. 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.

  29. 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

  30. 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[].”

More Related