Datalog Recursivo

20
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

description

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),.... - PowerPoint PPT Presentation

Transcript of Datalog Recursivo

Page 1: Datalog Recursivo

Datalog Recursivo

AULA 6PGC 107 - Sistemas de Banco de Dados

Profa. Sandra de Amo Pós-graduação em Ciência da Computação – UFU

2012-2

Page 2: Datalog Recursivo

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

...

Page 3: Datalog Recursivo

EstratificaçãoSeja P um programa (consulta) DatalogSeja idb(P) = predicados intensionais de P

Uma estratificação de P é uma partição das regras de Pem 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)

Page 4: Datalog Recursivo

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

Page 5: Datalog Recursivo

Grafo de precedência com sinalr1 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

Page 6: Datalog Recursivo

TeoremaSeja 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)

Page 7: Datalog Recursivo

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

Page 8: Datalog Recursivo

Exemplop(x) :- q(x,y), s(y), ¬ r(x)

r(x):- q(x,y), ¬(p(x)

Não é estratificável

Page 9: Datalog Recursivo

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”.

Page 10: Datalog Recursivo

AlgoritmoPara 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

Page 11: Datalog Recursivo

ExemploP(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”.

Page 12: Datalog Recursivo

ExemploS(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ícioEstrato(S) = 1 Estrato(R) = 1Estrato(R1) = 1 Estrato(R2) = 1Estrato(T) = 1 Estrato(U) = 1Estrato(V) = 1

Iteração 1Estrato(S) = 2 Estrato(R)=Estrato(R1)=1Estrato(R2) = 1 Estrato(T) = 2 Estrato(U) = 3 Estrato(V) = 4

Iteração 2Estrato(S) = 2 Estrato(R)=Estrato(R1)=1Estrato(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}

Page 13: Datalog Recursivo

Programas semi-positivosUm 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

Page 14: Datalog Recursivo

Programas semi-positivos – Como calcular a resposta Exemplos(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 = T0 U {s(c)}

T2 = T1 U {t(c)}

T3 = T2

Portanto T2 é o ponto fixo do programa = modelo minimal

Resposta: {t(c)}

Page 15: Datalog Recursivo

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 bx2 c

¬ r(c)Resposta = {x x1, x1 x2 , x2 c}

={ x c }

Page 16: Datalog Recursivo

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.

Page 17: Datalog Recursivo

ExemploQuais 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)

Page 18: Datalog Recursivo

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}

Page 19: Datalog Recursivo

Exemplo - ContinuaçãoResolvendo 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}

Page 20: Datalog Recursivo

Exercícior1 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}