200 likes | 318 Views
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),....
E N D
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),.... P(x) :- ...., not(P2(x)), ... Predicados do estrato 2 Q(x):- ...not( P(x) ),... Q(x) :- ..., not(P2(x)), .... Predicados do estrato 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)
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
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
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)
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
p(x) :- q(x,y), s(y), ¬ r(x) r(x):- q(x,y), ¬(p(x) Não é estratificável Exemplo
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”.
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
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
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
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
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
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 }
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.
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)
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}
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}
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