300 likes | 400 Views
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.
E N D
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. jacob.son@(rachel,11) joseph benjamin.father.father.mother rebekah 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 jacob.son@(rachel,11)[mother->rachel; father->jacob]. abraham[son->>{jacob.father}]. jacon[son@(joseph.mother)->>{benjamim}]. 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 jacob..son@(laban..daughter:woman) jacob..son@(laban..daughter)
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[].”