florid:caminhos, negação e estratificação idevan gonçalves freire junior {[email protected]}
TRANSCRIPT
FLORID:FLORID: caminhos, negação ecaminhos, negação eestratificaçãoestratificação
Idevan Gonçalves Freire Junior{[email protected]}
CaminhosCaminhos
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 ?
CaminhosCaminhos
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 CaminhosAninhando 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 permitidosjacob.son@(rachel,11)[mother->rachel; father->jacob].
abraham[son->>{jacob.father}].
jacon[son@(joseph.mother)->>{benjamim}].
male(jacob.father).
jacob.father.father = abraham.
Aninhando CaminhosAninhando 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 CaminhosAninhando 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 CaminhosAninhando Caminhos
Objetos intermediados num caminho podem ter listas de especicação, tornando-as moléculas-Fjacob: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 CaminhosCriaçã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 defindoabraham.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 Caminhos em QueriesQueries
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 MultivaloradosCaminhos Multivalorados
Caminhos multivalorados são construídos a partir de métodos multivalorados, sempre indicado por dois pontos em seqüênciaisaac..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 MultivaloradosCaminhos 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 MultivaloradosCaminhos 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áveisCaminhos 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 pontosperson!believes_in
O caminho acima indica o objeto god
ProgramasProgramas
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 FixoSemâ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 FixoSemâ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çãoNegaçã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çãoNegação
isaac[father]->abraham].
isaac:orphan :- not isaac[father->abraham].
?- sys.eval[].
?- isaac:orphan.
Negação e EstratificaçãoNegaçã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çãoNegaçã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çãoNegação e Estratificação
isaac[father->abraham].
?- sys.strat.doIt[].
isaac:orphan :- not isaac[father->abraham].
?- sys.eval[].
?- isaac:orphan.
EstratificaçãoEstratificaçã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çãoEstratificaçã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çaHeranç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çãoperson[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çaHeranç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çaHeranç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çaHerança
Se todos os gatilhos ativos disparam ao mesmo tempo, uma informação contraditória pode ser passadajohn: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çaHeranç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 TiposVerificaçã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 TiposVerificaçã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[].”