A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 Datalog Recursivo AULA 6 PGC Sistemas de Banco de Dados Profa. Sandra de Amo Pós-graduação em Ciência da Computação – UFU

2 P1(x) :-...., P2(x),... P1(x) :-..., P3(x),... P2(x) :-.... P3(x):-... Estratificação P(x) :-...., P1(x),.... P(x) :-...., not(P2(x)),... Q(x):-...not( P(x) ),... Q(x) :-..., not(P2(x)), Predicados do estrato 1 Predicados do estrato 2 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} (1) Para cada predicado R, todas as regras que definem R estão no mesmo subprograma, (2) Se R(x) :-...., R(y),.... então F(R) F(R) (3) Se R(x) :-...., not(R(y)),... então F(R) < F(R)

4 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)) Possíveis estratificações {r1}, {r2}, {r3}, {r4} {r2}, {r1}, {r3}, {r4} {r2}, {r3}, {r1}, {r4} {r1,r2}, {r3}, {r4} {r2}, {r1, r3}, {r4}

5 Grafo de precedência com sinal 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)) S V T U

6 Teorema Seja P um programa com estratificação F (1) Se existe um caminho de R para S então F(R) F(S) (2) 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 Exemplo p(x) :- q(x,y), s(y), ¬ r(x) r(x):- q(x,y), ¬(p(x) Não é estratificável

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 r faç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é que não exista mais mudanças dos estratos de nenhuma relação ou algum estrato excede o número total de relações

11 Exemplo P(x):- R(x), ¬ Q(x) Q(x):- R(x), P(x) Início 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.

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

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 Programas semi-positivos – Como calcular a resposta 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} T 0 = {r(a), r(b), p(b), p(c)} T 1 = T 0 U {s(c)} T 2 = T 1 U {t(c)} T 3 = T 2 Portanto T 2 é o ponto fixo do programa = modelo minimal Resposta: {t(c)}

15 Resposta – Método Negação por Falha t(x) s(x) :- p(x), ¬ r(x) t(x) :- s(x), ¬ r(x) r(a) :- r(b) :- p(b) :- p(c) :- s(x1), ¬ r(x1) p(x2), ¬ r(x2), ¬ r(x2) p(b), ¬ r(b), ¬ r(b) ¬ r(b), ¬ r(b) falha p(c), ¬ r(c), ¬ r(c) ¬ r(c), ¬ r(c) x x1 x1 x2 x2 b x2 c ¬ r(c) 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 Exercício 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}


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google