1 / 20

Datalog Recursivo

Datalog Recursivo. AULA 6 PGC 107 - Sistemas de Banco de Dados Profa. Sandra de Amo Pós-graduação em Ciência da Computação – UFU 2012-2. Estratificação. P1(x) :- ...., P2(x),... P1(x) :- ..., P3(x),... P2(x) :- .... P3(x):-. Predicados do estrato 1. P(x) :- ...., P1(x),....

noah
Download Presentation

Datalog Recursivo

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. Datalog Recursivo AULA 6 PGC 107 - Sistemas de Banco de Dados Profa. Sandra de Amo Pós-graduação em Ciência da Computação – UFU 2012-2

  2. Estratificação P1(x) :- ...., P2(x),... P1(x) :- ..., P3(x),... P2(x) :- .... P3(x):- ... Predicados do estrato 1 P(x) :- ...., P1(x),.... P(x) :- ...., not(P2(x)), ... Predicados do estrato 2 Q(x):- ...not( P(x) ),... Q(x) :- ..., not(P2(x)), .... Predicados do estrato 3 ... ....

  3. Estratificação Seja P um programa (consulta) Datalog Seja idb(P) = predicados intensionais de P Uma estratificação de P é uma partição das regras de P em subprogramas P1,...,Pn juntamente com uma aplicação F : idb(P)  {1,...,n} • Para cada predicado R, todas as regras que definem R estão no mesmo subprograma, • Se R(x) :- ...., R’(y), .... então F(R’) ≤ F(R) • Se R(x) :- ...., not(R’(y)), ... então F(R’) < F(R)

  4. r1 S(x) :- R1(x), not(R(x)) r2 T(x) :- R2(x), not(R(x)) r3 U(x) :- R3(x), not(T(x)) r4 V(x):- R4(x), not(S(x)), not(U(x)) Possíveis estratificações {r1}, {r2}, {r3}, {r4} {r2}, {r1}, {r3}, {r4} {r2}, {r3}, {r1}, {r4} {r1,r2}, {r3}, {r4} {r2}, {r1, r3}, {r4} Exemplo

  5. r1 S(x) :- R1’(x), not(R(x)) r2 T(x) :- R2’(x), not(R(x)) r3 U(x) :- R3’(x), not(T(x)) r4 V(x):- R4’(x), not(S(x)), not(U(x)) Grafo de precedência com sinal V U S T

  6. Teorema Seja P um programa com estratificação F • Se existe um caminho de R para S então F(R) ≤ F(S) • Se existe um caminho de R para S contendo arco negativo, então F(R) < F(S)

  7. Teste: P é estratificável ? Um programa é estratificável se e somente se não existe ciclo no grafo de dependência com sinal contendo uma aresta negativa

  8. p(x) :- q(x,y), s(y), ¬ r(x) r(x):- q(x,y), ¬(p(x) Não é estratificável Exemplo

  9. Como encontrar uma estratificação • Início: para toda relação R do programa, estrato(R) = 1 • Se uma regra com R na cabeça possui uma relação negada Q em seu corpo, e estrato(Q) ≥ estrato(P), então incrementa estrato(P). • Se uma regra com R na cabeça possui uma relação não-negada Q em seu corpo, e estrato(Q) > estrato(P), então redefina estrato(P) := estrato(Q). • Se os estratos de cada relação se estabilizam, então o algoritmo pára e retorna a estratificação produzida. • Se os estratos não se estabilizam e atingem um valor maior do que o número de predicados, o algoritmo pára e responde: “Programa não estratificável”.

  10. Algoritmo Para cada relação p faça estrato(p):= 1; Repita Para cada regra r com cabeça p faça Para cada relação negada q no corpo de rfaça estrato(p) := max(estrato(p), 1+estrato(q)); Para cada relação não-negada q no corpo de r faça estrato(p) := max(estrato(p), estrato(q)); Até quenão exista mais mudanças dos estratos de nenhuma relação ou algum estrato excede o número total de relações

  11. P(x):- R(x), ¬ Q(x) Q(x):- R(x), P(x) Início Estrato(P) = 1 Estrato(P) = 1 Estrato(R) = 1 Iteração 1 Estrato(P) = 2 Estrato(Q) = 2 Iteração 2 Estrato(P) = 3 Estrato(Q) = 3 Iteração 3 Estrato(P) = 4 Estrato(Q) = 4 Como o número de relações do programa é 3 e estrato(P) = 4 então o algoritmo pára e retorna “Não estratificável”. Exemplo

  12. S(x) :- R1(x), not(R(x)) T(x) :- R2(x), not(R(x)) U(x) :- R(x), not(T(x)) V(x):- R(x), not(S(x)), not(U(x)) Início Estrato(S) = 1 Estrato(R) = 1 Estrato(R1) = 1 Estrato(R2) = 1 Estrato(T) = 1 Estrato(U) = 1 Estrato(V) = 1 Iteração 1 Estrato(S) = 2 Estrato(R)=Estrato(R1)=1 Estrato(R2) = 1 Estrato(T) = 2 Estrato(U) = 3 Estrato(V) = 4 Iteração 2 Estrato(S) = 2 Estrato(R)=Estrato(R1)=1 Estrato(R2) = 1 Estrato(T) = 2 Estrato(U) = 3 Estrato(V) = 4 Como não há mais modificações no estrato de nenhuma relação, o programa é estratificável e uma estratificação é: Estrato 1 = {R, R1, R2} Estrato 2 = {S,T} Estrato 3 = {U} Estrato 4 ={V} Exemplo

  13. Programas semi-positivos Um programa é semi-positivo se as negações no corpo de suas regras só aparecem em predicados extensionais Programas semi-positivos têm modelo minimal único Resposta ao programa = modelo minimal do programa = calculado através do método da resolução

  14. Exemplo s(x) :- p(x), ¬ r(x) t(x) :- s(x), ¬ r(x) Extensionais = {p, r} Intensionais = {s,t} Relação resposta = t R = {a, b} P = {b, c} T0 = {r(a), r(b), p(b), p(c)} T1 = T0U {s(c)} T2 = T1U {t(c)} T3 = T2 Portanto T2 é o ponto fixo do programa = modelo minimal Resposta: {t(c)} Programas semi-positivos – Como calcular a resposta

  15. Resposta – Método Negação por Falha s(x) :- p(x), ¬ r(x) t(x) :- s(x), ¬ r(x) r(a) :- r(b) :- p(b) :- p(c) :- t(x) x  x1 s(x1),¬ r(x1) x1  x2 p(x2),¬ r(x2), ¬ r(x2) x2  c x2  b p(c),¬ r(c), ¬ r(c) p(b),¬ r(b), ¬ r(b) ¬ r(c), ¬ r(c) ¬ r(b), ¬ r(b) ¬ r(c) falha Resposta = {x  x1, x1  x2 , x2  c} = □ { x  c }

  16. Estratos podem ser vistos como programas positivos • Cada estrato em um programa estratifiável pode ser visto como programa semi-positivo • Resposta de um programa estratificável = composição das respostas de seus estratos.

  17. Exemplo Quais as cidades que não estão conectadas a São Paulo por rotas aéreas ? conecta(x,y) :- voo(x,y) conecta(x,y) :- voo(x,z), conecta(z,y) Query(x) :- ¬ conecta(x, SP) (regra não é segura !) Transformando em regras seguras : Query(x) :- voo(x,z), ¬ conecta(x, SP) Query(x) :- voo(z,x), ¬ conecta(x, SP)

  18. Exemplo - continuação (r1) conecta(x,y) :- voo(x,y) (r2) conecta(x,y) :- voo(x,z), conecta(z,y) (r3) Query(x) :- voo(x,z), ¬ conecta(x, SP) (r4) Query(x) :- voo(z,x), ¬ conecta(x, SP) Estrato 0 = { voo(a,b), voo(b,c), voo(c,SP), voo(b,d) } Estrato 1 = { r1, r2} Estrato 2 = {r3, r4}

  19. Exemplo - Continuação Resolvendo Estrato 1 : programa positivo conecta = {(a,b), (b,c), (b,d), (a,c), (a,d), (b,d), (b,SP), (a,SP), (c,SP)} Resolvendo Estrato 2 = programa semi-positivo Query = {d}

  20. r1 S(x) :- R1(x), not(R(x)) r2 T(x) :- R2(x), not(R(x)) r3 U(x) :- R3(x), not(T(x)) r4 V(x):- R4 (x), not(S(x)), not(U(x)) R1 = {a, b, c} R = {a} R2 = {a, d} R3 = {a, c} R4 = {a,d} Exercício

More Related