--- tags: BD, lista 4 --- # Bazy Danych lista4 ## ZADANIA 9/10 : <span style="color:green">1</span>, <span style="color:green">2</span>, <span style="color:green">3</span>, <span style="color:green">4</span>, <span style="color:green">5</span>, <span style="color:green">6</span>, <span style="color:green">7</span>, <span style="color:green">8</span>, <span style="color:green">9</span> **Zadanie 1** :rocket: Rozważmy następujące zapytanie w Datalogu. ``` T(X, Y) :- E(X,Y). T(X, Y) :- T(X,Z), T(Z,Y). ``` 1. Przypomnij definicję semantyki dla Datalogu, a następnie pokaż, że dla każdego ``i ∈ N+`` zachodzi ```T_i = {(a, b)| istnieje ścieżka z a do b o długości ≤ 2^(i−1) }``` * datalog - "deklaratywny", "bazodanowy" jęyk zapytań rozszerzający język zapytań koniunkcyjnych o rekurencję. * program datalogowy skłąda się z głowy i ciała * głowa - relacja, którą definiujemy * ciało - zbiór reguł (symboli relacyjnych), które wyrażają jakieś koniunkcyjne zapytanie, każda zmienna występująca w głowie musi pojawić się także w ciele i dopuszczamy, że definowany w głowie symbol relacyjny występuje też w ciele (rekurencja) * SEMANTYKA datalogu: * **procedularna** [określa procedurę jak wyliczyć wynik danego programu w datalogu] * 1. Początkowo wszystkie relacje, które definujemy w programie, są puste. * 2. ?Zaaplikuj wszystkie reguły dla każdej relacji relacji, równocześnie.? * 3. Powtarzaj dopóki conajmniej jedna relacja zyskuje nowy element. * deklaratywna Dowdód indukcyjny : * Teza indukcyjna: dla ``n`` zachodzi ``T_n = {(a, b)| istnieje ścieżka z a do b o długości ≤ 2^(n−1)}`` * dla ``n = 0`` ``T_0 = {}`` * załóżmy, że teza indukcyjna zachodzi dla ``n`` * Aplikuję reguły aby wyliczyć ``T_(n+1)``: * ``T_(n+1) = {(a,b)| E(a,b) lub istnieje z t.że T_n(a,z) i T_n(z,b)}`` = * ``{(a,b)| E(a,b) lub istnieje ścieżka z a do b dł <= 2^(n−1) + 2^(n−1) = 2^n}`` = * ``{(a,b)| istnieje ścieżka z a do b dł <= 2^n}`` **Zadanie 2** :rocket: Zwróci wierzchołki, do których można dojść ścieżką z n lub ścieżką z m. ``` T(X) :- E(n,X). T(X) :- E(m,X). T(X) :- T(Z), T(Z,X). ``` **Zadanie 3** :rocket: Zwróci wierzchołki, do których można dojść ścieżką z n i ścieżką z m. **ŹLE** ZNaleźć wszystkie ścieżki najpierw potem wierzchołki które mają scieżkę do m i n ``` T(X) :- E(n,X), E(m,X). T(X) :- T(Z), T(Z,X). ``` **Zadanie 4** :rocket: Zwróci pary wierzchołków, do których można dojść z wierzchołka n ścieżkami o tej samej długości. ``` T(X,Y) :- E(n,X), E(n,Y). T(X,Y) :- T(a,b), E(a,X), E(b,Y). ``` **Zadanie 5** :rocket: Zwróci pary wierzchołków x, y , takie, że z wierzchołka n do x oraz do y można dojść ścieżkami, które mają różną długość. T(X,Y) - jest ścieżka równej długości z x do y (z poprzedniego zadania) T'(x,y) - jest jaka kolwiek ścieżka z x do y T''(x,y) - jest ścieżka równej długości z n do a oraz z n do y, oraz jest dowolna ścieżka z a do x ``` T'(x,y) :- E(x,y) T'(x,y) :- T'(x,z), E(z,y) T''(x,y) :- T(a,y), T'(a,x) T''(x,y) :- T(x,b), T'(b,y) ``` **Zadanie 6** :rocket: Zwróć pary wierzchołków x, y takie, że nie istnieje ścieżka z x do y. Nie da się napisać takie zapytania w datalogu, bo: * im większa baza danych, im więcej wpisów tym mniejsza może być odpowiedź (wszystkie występujące wcześniej krawędzie nadal występują i dodajemy nowe). Wynik zapytania powinien pozostać taki sam lub się zmniejszyć. A zapytania w datalogu są monotoniczne im większa baza tym większy więkzy lub nie mniejszy wynik. (CZY TO Z WYKŁADU??). **Zadanie 7** :rocket: Zwróć pary wierzchołków x, y , takie, że z x do y można przejść jednokolorową ścieżką. T'(x,y,c) - jest ścieżka z x do y koloru c. T(x,y) - jest ścieżka w jednym kolorze z x do y. ``` T'(x,y,c) :- E(x,y,c) T'(x,y,c) :- T'(x,z,c), E(z,y,c) T(x,y) :- T'(x,y,c) ``` **Zadanie 8** :rocket: Zwróć pary wierzchołków x, y takie, że każda ścieżka z x do y składa się z krawędzi co najmniej dwóch kolorów. Nie da się bo po zwiększeniu się bazy może zmienjszyć się wynik zapytania, a zapytania w datalogu są monotoniczne. **Zadanie 9** :rocket: Zwróć pary wierzchołków x, y , takie, że z x do y można przejść ścieżką składającą się z krawędzi nie więcej niż dwóch kolorów. T'(x,y,c) - jest ścieżka z x do y koloru c. T''(x,y,c,c') - jest ścieżka tylko z kolorami c i c' na krawędziach z x do y T(x,y) - jest ścieżka w jednym lub 2 kolorach z x do y ``` T'(x,y,c) :- E(x,y,c) T'(x,y,c) :- T'(x,z,c), E(z,y,c) T''(x,y,c,c') :- T'(x,z,c), T'(z,y,c') T''(x,y,c,c') :- T'(x,z,c'), T'(z,y,c) T''(x,y,c,c') :- T''(x,z,c,c'), T''(z,y,c,c') T(x,y) :- T'(x,y,c) T(x,y) :- T''(x,z,c,c') ``` ## MATERIAŁY * kalkulator algebry relacji: https://dbis-uibk.github.io/relax/help#relalg-reference