Adatbzisrendszerek elmleti alapjai 3 elads Konjunktv lekrdezsek Datalog
Adatbázisrendszerek elméleti alapjai 3. előadás Konjunktív lekérdezések Datalog programok
Konjunktív lekérdezések, Datalog programok Konjunktív lekérdezések Datalog Lekérdezések ekvivalenciája és tartalmazása Lekérdezések és nézetek minimalizálása Lekérdezések bonyolultsága 6. előadás 2
Konjunktív lekérdezések (CQ) Az első rendű logikai (FO) lekérdezések (relációs kalkulusok) részosztálya. Megfelel a SELECT-DISTINCT-FROM-WHERE SQL lekérdezéseknek. A gyakorlatban előforduló legtöbb lekérdezés ilyen. Az optimalizáló algoritmusok leggyakrabban konjunktív lekérdezésekre használhatók, ezért bontsuk fel a lekérdezéseket CQ részlekérdezésekre. CQ lekérdezések jól meghatározható, elméletileg bizonyítható tulajdonságokkal rendelkeznek. 3
Konjunktív lekérdezések definíciója Definíció: a konjunktív lekérdezésekhez tartozó DRC formulákat rekurzívan definiáljuk: : : = R(t 1, . . . , tar(R)) | ti = tj | ’ | x. ahol és ’ konjunktív lekérdezéshez tartozó formula. Vegyük észre, hogy nem szerepel: , , Lekérdezésen időnként a lekérdezéshez tartozó formulát értjük. Vegyük észre, hogy CQ FO 4
Példák konjunktív lekérdezésekre Konjunktív lekérdezések (van-e valami kapcsolat köztük? ) : q(x, y) = z. (R(x, z) u. (R(z, u) R(u, y))) q(x, y) = z. u. (R(x, z) R(z, u) R(u, y)) Nem konjunktív lekérdezések (miért? ): q(x, y) = z. (R(x, z) R(y, z)) q(x) = T(x) z. S(x, z) 5
Konjunktív lekérdezések Tetszőleges CQ lekérdezés ekvivalens (átírható) ilyen alakú CQ lekérdezéssel: q(x 1, . . . , xn) = y 1. y 2. . . yp. (R 1(t 11, . . . , t 1 m) . . . Rk(tk 1, . . . , tkm)) (Vagyis az összes kvantor a formula elején szerepel. ) Ugyanez Datalog jelöléssel: Datalog szabály q(x 1, . . . , xn) : - R 1(t 11, . . . , t 1 m), . . . , Rk(tk 1, . . . , tkm) fej törzs (test) 6
Példák a Datalog jelölésre Employee(x), Managed. By(x, y), Manager(y) (Az adatbázisban dolgozókat, főnököket, és a „kinek ki a főnöke” relációt tároljuk. ) Keressük meg az összes dolgozót, akinek ugyanaz a főnöke, mint “Smith”-nek: A(x) : - Managed. By(“Smith”, y), Managed. By(x, y) 7
Példák a Datalog jelölésre Employee(x), Managed. By(x, y), Manager(y) Az igazgató a főnöke legyen. Keressük meg az összes dolgozót, akinek ugyanaz az igazgatója, mint “Smith”-nek: A(x) : - Managed. By(“Smith”, y), Managed. By(y, z), Managed. By(x, u), Managed. By(u, z) 8
A CQ és az SQL közti viszony CQ: A(x) : - Managed. By(“Smith”, y), Managed. By(x, y) SQL: Fontos a “distinct”! select distinct m 2. name from Managed. By m 1, Managed. By m 2 where m 1. name=“Smith” AND m 1. manager=m 2. manager 9
A CQ és az SQL közti viszony Véletlen volt, hogy át tudtuk írni, vagy a CQ lekérdezések pontosan a SELECT-DISTINCT-FROM-WHERE lekérdezéseknek felelnek meg? 10
CQ és a relációs algebra (RA) A CQ pontosan a s. C, A, műveletekkel felírható relációs algebrai kifejezéseknek felel meg, (nem szerepel benne: , –) A(x) : - Managed. By(“Smith”, y), Managed. By(x, y) $2. name sname=“Smith” Managed. By $1. manager=$2. manager Managed. By 11
A CQ kiterjesztései CQ : a lekérdezésben használható nem egyenlő is Kik azok a főnökök, akiknek LEGALÁBB 2 beosztottjuk van? A(y) : - Managed. By(x, y), Managed. By(z, y), x z CQ< : a lekérdezésben használható egyenlőtlenség is Mely dolgozók keresnek többet mint a főnökük? A(y) : - Managed. By(x, y), Salary(x, u), Salary(y, v), u>v) CQ : a lekérdezésben használható tagadás is Kik azok, akik ugyanabban az irodában dolgoznak, mint Alice, de nem ugyanaz a főnökük? A(y) : - Office(“Alice”, u), Office(y, u), Managed. By(“Alice”, x), Managed. By(y, x) 12
A CQ kiterjesztései UCQ: Konjunktív lekérdezések uniói Datalog program: A(name) : - Employee(name, dept, age, salary), age > 50 A(name) : - Retired. Employee(name, address) A Datalog jelölésével kényelmesen lehet kifejezni az uniót (nem kell ) Megjegyzés: Ha túl sokat terjesztünk ki, akkor az elsőrendű logikához jutunk. Óvatosnak kell lennünk: a kis kiterjesztések is erősen megváltoztathatják a CQ bizonyos elméleti tulajdonságait. 13
Lekérdezések ekvivalenciája és tartalmazása Az optimalizálás miatt szükséges 1977 óta foglalkoznak vele A q 1 és q 2 lekérdezések ekvivalensek, ha minden D adatbázisra: q 1(D) = q 2(D). Jelölés: q 1 q 2 14
Lekérdezések ekvivalenciája SELECT DISTINCT x. name, x. manager FROM Employee x, Employee y WHERE x. dept = ‘Sales’ and x. office = y. office and x. floor = 5 and y. dept = ‘Sales’ Hmmmm…. Lehet-e ezt egyszerűbben írni? 15
Lekérdezések tartalmazása A q 1 lekérdezést tartalmazza a q 2, ha minden D adatbázisra: q 1(D) q 2(D). A q 1 és q 2 ekvivalensek, ha minden D adatbázisra: q 1(D) = q 2(D) Jelölés: q 1 q 2, q 1 q 2 Nyilván: q 1 q 2 és q 2 q 1 ⇔ q 1 q 2 Továbbá: q 1 q 2 q 1 ⇔ q 1 q 2 Most csak a tartalmazással foglalkozunk. 16
Példák lekérdezések tartalmazására 1. példa: Igaz-e, hogy q 1 q 2 ? q 1(x) : - R(x, u), R(u, v), R(v, w) q 2(x) : - R(x, u), R(u, v) 2. példa: Igaz-e, hogy q 1 q 2 ? q 1(x) : - R(x, u), R(u, v), R(v, x) q 2(x) : - R(x, u), R(u, x) 3. példa: Igaz-e, hogy q 1 q 2 ? q 1(x) : - R(x, u), R(u, u) q 2(x) : - R(x, u), R(u, v), R(v, w) 4. példa: Igaz-e, hogy q 1 q 2 ? q 1(x) : - R(x, u), R(u, ”Smith”) q 2(x) : - R(x, u), R(u, v) 17
Lekérdezések tartalmazása Tétel: A lekérdezések tartalmazása FO-ban eldönthetetlen Tétel: A lekérdezések tartalmazása CQ-ban eldönthető és NP-teljes. 18
Algoritmus a lekérdezések tartalmazásának eldöntésére Hogyan döntsük el, hogy q 1 q 2 igaz-e? A q 1 kanonikus adatbázisa: Dq 1 = (D, R 1 D, …, Rk. D) ◦ D = q 1 -ben szereplő összes változó és konstans ◦ R 1 D, …, Rk. D = q 1 törzse A q 1 kanonikus sora: tq 1 (q 1 feje) 19
Példa kanonikus adatbázisra q 1(x, y) : - R(x, u), R(v, y) Kanonikus adatbázis: Dq 1 = (D, RD) ◦ D={x, y, u, v} ◦ RD = x u v y Kanonikus sor: tq 1 = (x, y) 20
Példa kanonikus adatbázisra q 1(x) : - R(x, u), R(u, ”Smith”), R(u, ”Fred”), R(u, u) Dq 1 = (D, R) ◦ D={x, u, ”Smith”, ”Fred”} ◦R= x u u “Smith” u “Fred” u u tq 1 = (x) 21
Tartalmazás eldöntése Tétel: q 1 q 2 akkor és csak akkor, ha tq 1 q 2(Dq 1). Példa: q 1(x, y) : - R(x, u), R(v, y) q 2(x, y) : - R(x, u), R(v, w), R(t, y) D={x, y, u, v} R= x u v y tq 1 = (x, y) Igen, q 1 q 2 22
Lekérdezések homomorfizmusa Egy f: var(q 2) var(q 1) const(q 1) függvény lekérdezésekre való f : q 2 q 1 kiterjesztése homomorfizmus, ha: ◦ f(body(q 2)) body(q 1) ◦ f(tq 1) = tq 2 A homomorfizmus-tétel: q 1 q 2 akkor és csak akkor, ha létezik f : q 2 q 1 homomorfizmus 23
Példák lekérdezések homomorfizmusára var(q 1) = {x, u, v, y} var(q 2) = {x, u, v, w, t, y} q 1(x, y) : - R(x, u), R(v, y) q 2(x, y) : - R(x, u), R(v, w), R(t, y) Ezért q 1 q 2 24
Példák lekérdezések homomorfizmusára var(q 1) const(q 1) = {x, u, “Smith”} var(q 2) = {x, u, v, w} q 1(x) : - R(x, u), R(u, ”Smith”), R(u, ”Fred”), R(u, u) q 2(x) : - R(x, u), R(u, v), R(u, ”Smith”), R(w, u) Ezért q 1 q 2 25
A homomorfizmus-tétel Tétel: A konjunktív lekérdezések tartalmazása: (1) eldönthető (miért ? ) (2) NP-ben van (miért ? ) (3) NP-nehéz Röviden: NP-teljes 26
Lekérdezések tartalmazása UCQban q 1 q 2 q 3 . . q 1’ q 2’ q 3’ . . Megjegyzés: q 1 q 2 q 3 . . q pontosan akkor, ha q 1 q és q 2 q és q 3 q és …. Tétel: q q 1’ q 2’ q 3’ . . pontosan akkor, ha létezik olyan k, hogy: q qk’ Következik, hogy a tartalmazás UCQ-ban eldönthető és NP-teljes. 27
Lekérdezések tartalmazása CQ<ban q 1() : - R(x, y), R(y, x) q 2() : - R(x, y), x <= y q 1 q 2 , de itt nincs homomorfizmus ! A tartalmazást így ellenőrizhetjük: - Tekintsük q 1 változóinak minden lehetséges sorrendjét. - Mindegyikre nézzük meg, hogy q 1 -et tartalmazza-e q 2. - Ha mind teljesül, akkor q 1 q 2. Még mindig eldönthető, de nehezebb, mint NP: most p 2 -beli. 28
Lekérdezés minimalizálása Definíció: Egy q konjunktív lekérdezés minimális, ha minden más vele ekvivalens q’ konjunktív lekérdezésben legalább annyi predikátum (‘részcél’) van, mint q-ban. Minimálisak-e ezek a lekérdezések ? q(x) : - R(x, y), R(y, z), R(x, x) q(x) : - R(x, y), R(y, z), R(x, ’Alice’) 29
Lekérdezés minimalizálása Lekérdezés minimalizálásának algoritmusa Válasszunk q-ból egy g részcélt. Töröljük g-t és legyen q’ az így kapott új lekérdezés. Tudjuk, hogy q q’. (miért ? ) Ha q’ q , akkor g-t véglegesen töröljük. Megjegyzés: nem számít, hogy milyen sorrendben vizsgáljuk a részcélokat. 30
Lekérdezés minimalizálása a gyakorlatban Ma semelyik adatbázisrendszer nem végez minimalizálást !!! Oka: ◦ Nehéz (NP-teljes) ◦ A felhasználók nem írnak nem-minimális lekérdezéseket. Nézetek használata esetén viszont előfordulhatnak nem-minimális lekérdezések. 31
Lekérdezés minimalizálása nézetekhez Kik azok a csónakosok, akiknek a főnöke is csónakos? (Boldog csónakosok) CREATE VIEW Happy. Boaters SELECT DISTINCT E 1. name, E 1. manager FROM Employee E 1, Employee E 2 WHERE E 1. manager = E 2. name and E 1. boater=‘YES’ and E 2. boater=‘YES’ Ez a lekérdezés minimális. 32
Lekérdezés minimalizálása nézetekhez Most számítsuk ki a Nagyon boldog csónakosokat. SELECT DISTINCT H 1. name FROM Happy. Boaters H 1, Happy. Boaters H 2 WHERE H 1. manager = H 2. name Ez a lekérdezés is minimális. Mi történik az SQL-ben, amikor egy nézeten futtatunk lekérdezést ? 33
Lekérdezés minimalizálása nézetekhez A nézet kibontása: SELECT DISTINCT E 1. name FROM Employee E 1, Employee E 2, Employee E 3, Employee E 4 WHERE E 1. manager = E 2. name and E 1. boater = ‘YES’ and E 2. boater = ‘YES’ and E 3. manager = E 4. name and E 3. boater = ‘YES’ and E 4. boater = ‘YES’ and E 1. manager = E 3. name Ez a lekérdezés már nem minimális ! E 3 E 1 E 4 E 2 felesleges. (E 2=E 3) E 2 34
Monoton lekérdezések Definíció: Egy q lekérdezés monoton, ha: Bármely két D, D’ adatbázis esetén: ha D D’ , akkor q(D) q(D’) Az alábbi lekérdezések közül melyik monoton? x. R(x, x) x. y. z. u. (R(x, y) R(y, z) R(z, u)) x. y. R(x, y) 35
Monoton lekérdezések Tétel: Minden konjunktív lekérdezés monoton. Erősebb: minden UCQ lekérdezés monoton. 36
Hogyan nyűgözzük le a hallgatóinkat vagy a főnökünket Keressük azokat az ivókat, akik szeretnek legalább egy olyan sört, amelyet nem szolgálnak fel a “Black Cat” bárban. SELECT L. drinker FROM Likes L WHERE L. beer not in (SELECT S. beer FROM Serves S WHERE S. bar = ‘Black Cat’) Meg lehet-e oldani ezt egyszerű SELECT-FROM -WHERE lekérdezéssel (vagyis al-lekérdezés nélkül) ? 37
Az FO kifejező ereje A következő lekérdezéseket nem lehet FOban kifejezni: Tranzitív lezárt: Paritás: az R-beli élek száma páros. ◦ x. y. létezik olyan x 1, . . . , xn , hogy: R(x, x 1) R(x 1, x 2) . . . R(xn-1, xn) R(xn, y) 38
Datalog Támogatja a rekurziót, így már ki tudjuk számolni a tranzitív lezártat. Egy Datalog program (lekérdezés) Datalog szabályokból áll: P 1(t 1) : - body 1 P 2(t 2) : - body 2. . Pn(tn) : - bodyn Elnevezések: EDB = Extenzionális adatbázis predikátumok ◦ Az adatbázis predikátumai. (Az adatbázis tábláinak felelnek meg. ) IDB = Intenzionális adatbázis predikátumok ◦ A programban definiált predikátumok. 39
Datalog Employee(x), Managed. By(x, y), Manager(y) Azok a felsőbb szintű főnökök, akik alkalmazottak is: EDBs HMngr(x) : - Manager(x), Managed. By(y, x), Managed. By(z, y) Answer(x) : - HMngr(x), Employee(x) IDBs 40
Datalog Employee(x), Managed. By(x, y), Manager(y) Minden személy: Person(x) : - Manager(x) Person(x) : - Employee(x) Manger Employee 41
Nem-rekurzív szabályok kibontása Gráf: R(x, y) P(x, y) : - R(x, u), R(u, v), R(v, y) A(x, y) : - P(x, u), P(u, y) Így lehet kibontani: A(x, y) : - R(x, u), R(u, v), R(v, w), R(w, m), R(m, n), R(n, y) 42
Nem-rekurzív szabályok kibontása Gráf: R(x, y) P(x, y) : - R(x, u), R(u, y) A(x, y) : - P(x, y) Most a kibontásban van egy unió: A(x, y) : - R(x, y) u(R(x, u) R(u, y)) 43
Rekurzió a Datalogban Gráf: R(x, y) Tranzitív lezárt: P(x, y) : - R(x, y) P(x, y) : - P(x, u), R(u, y) Tranzitív lezárt: P(x, y) : - R(x, y) P(x, y) : - P(x, u), P(u, y) 44
Rekurzió a Datalogban Logikai fák: Leaf 0(x), Leaf 1(x), AND(x, y 1, y 2), OR(x, y 1, y 2), Root(x) Írjunk egy programot, ami kiszámolja: Answer() : - igaz, ha a gyökércsúcs értéke 1 One(x) Answer() : - Leaf 1(x) : - AND(x, y 1, y 2), One(y 1), One(y 2) : - OR(x, y 1, y 2), One(y 1) : - OR(x, y 1, y 2), One(y 2) : - Root(x), One(x) 45
Feladat Logikai fák: Leaf 0(x), Leaf 1(x), AND(x, y 1, y 2), OR(x, y 1, y 2), Not(x, y), Root(x) Írjunk Datalog programot, amely kiszámolja azon csúcsok halmazát, melyek értéke “igaz” vagy “egy”. Tipp: Számoljuk ki One(x)-et és Zero(x)-et. Itt Leaf 0 -t kell használni. 46
A Datalog változatai nincs rekurzió van rekurzió nincs Nem-rekurzív Datalog = UCQ (miért ? ) Datalog van Nem-rekurzív Datalog = FO Datalog 47
Nem-rekurzív Datalog Konjunktív lekérdezések uniója = UCQ ◦ A tartalmazás eldönthető és NP-teljes. Nem-rekurzív Datalog ◦ Ekvivalens az UCQ-val. ◦ Ezért a tartalmazás itt is eldönthető. ◦ Ez is NP-teljes-e ? 48
Nem-rekurzív Datalog Egy nem-rekurzív Datalog: T (x, y) : - R(x, u), R(u, y) 1 T 2(x, y) : - T 1(x, u), T 1(u, y). . . Tn(x, y) : - Tn-1 (x, u), Tn-1 (u, y) Answer(x, y) : - Tn(x, y) Kibontása CQ-vá: Answer(x, y) : - R(x, u 1), R(u 1, u 2), R(u 2, u 3), . . . R(um, y) Mekkora ez a lekérdezés ? 49
Lekérdezések bonyolultsága Legyen egy FO-beli lekérdezés. És D = (D, R 1 D, …, Rk. D) egy modell. Mennyire bonyolult a (D) eredményét kiszámítani? Vardi osztályozása: Adat szerinti bonyolultság: Legyen rögzített. Számoljuk ki (D)-t |D| függvényében. Lekérdezés szerinti bonyolultság: Legyen D rögzített. Számoljuk ki (D)-t | | függvényében. Együttes bonyolultság: Számoljuk ki (D)-t |D| és | | függvényében. Melyik a legfontosabb az adatbázisokban ? 50
Példa (x) R= u. (R(u, x) y. ( v. S(y, v) R(x, y))) 3 8 7 5 0 8 09 7 6 89 8 98 7 4 0 S= 43 4 5 58 8 6 9 79 6 67 4 7 6 8 Hogyan tovább ? 51
Általános kiértékelési algoritmus minden egyes i részkifejezésére, (i = 1, …, m) számoljuk ki i eredményét egy Ti(x 1, …, xn) táblába Eredmény: Tm Tétel: Ha -ben k változó van, akkor a (D) kiszámításának ideje: O(| |*|D|k) Adat szerinti bonyolultság = O(|D|k) = (polinomiális) Lekérdezés szerinti bonyolultság = O(| |*ck) = (exponenciális) 52
Általános kiértékelési algoritmus Példa: (x) u. (R(u, x) y. ( v. S(y, v) R(x, y))) 1(u, x) 2(y, v) 3(x, y) 4(y) 5(x, y) 6(x) 7(u, x) 8(x) R(u, x) S(y, v) R(x, y) v. 2(y, v) 4(y) 3(x, y) y. 5(x, y) 1(u, x) 6(x) u. 7(u, x) (x) 53
Bonyolultság Tétel: Ha -ben k változó van, akkor (D)-t O(| |*|D|k) idő alatt ki lehet számítani. Megjegyzés: A változók száma számít! 54
Figyeljünk a változókra Számítsunk ki minden m hosszú láncot. Chainm(x, y) : - R(x, u 1), R(u 1, u 2), R(u 2, u 3), . . . R(um-1, y) m+1 változót használtunk. Lehetséges-e újraírni kevesebb változóval ? 55
Számoljuk a változókat FOk = FO, amelyben csak az x 1, …, xk változókat használhatjuk. Írjuk le az előbbi kifejezést FO 3 -ban: Chainm(x, y) : - u. R(x, u) ( x. R(u, x) ( u. R(x, u)… ( u. R(u, y)…)) 56
Lekérdezések bonyolultsága Megjegyzés: elég csak a logikai értékű lekérdezéseket vizsgálni. ◦ Ha a lekérdezés nem logikai, akkor: for a 1 in D, …, ak in D if (a 1, …, ak) in (D) /* ez egy logikai lekérdezés */ then output (a 1, …, ak) 57
A kiszámítási bonyolultság osztályai Emlékezzünk vissza a bonyolultság osztályaira: (futásidő és tárigény) AC 0 LOGSPACE (logaritmikus tárigényű) NLOGSPACE (nemdeterminisztikusan logaritmikus tárigényű) PTIME (polinom idejű) NP (nemdeterminisztikusan polinom idejű) PSPACE (polinom tárigényű) EXPTIME (exponenciális idejű) EXPSPACE (exponenciális tárigényű) (Kalmár) Elemi függvények Turing-kiszámítható függvények 58
A lekérdező nyelvek adat szerinti bonyolultsága Cikk: A logikának a számítástudománybeli szokatlan hatékonyságáról PSPACE FO(PFP) = datalog , * PTIME FO(LFP) = datalog AC 0 FO = nem-rek. datalog Fontos: minél bonyolultabb egy nyelv, annál nehezebb optimalizálni 59
Nézetek Employee(x), Managed. By(x, y), Manager(y) L(x, y) : - Managed. By(x, u), Managed. By(u, y) Nézetek E(x, y) : - Managed. By(x, y), Employee(y) Lekérdezés Q(x, y) : - Managed. By(x, u), Managed. By(u, v), Managed. By(v, w), Managed. By(w, y), Employee(y) Hogyan tudjuk Q-t megválaszolni, ha csak L-t és E-t ismerjük? 60
Nézetek Lekérdezések átírása nézetek használatával (ha lehetséges): Q(x, y) : - L(x, u), L(u, y), E(v, y) Lekérdezések megválaszolása: ◦ Néha nem tudjuk CQ-ban vagy FO-ban kifejezni, de mégis meg tudjuk válaszolni. 61
Átírás keresése Tétel: Ha adottak a V 1, …, Vn nézetek és a Q lekérdezés, akkor annak eldöntése, hogy Q-t ki lehet-e fejezni V 1, …, Vn használatával, NPteljes. 62
Biztos válaszok Néha nem tudunk válaszolni, de közel tudunk kerülni. V 1(x, y) : - E(x, u), E(u, v), E(v, y) V 2(x, y) : - E(x, u), E(u, y), Black(y) Q(x) : - E(x, u), E(u, v), E(v, w), E(w, s) Nem tudjuk megválaszolni Q-t, de közelítéseket találhatunk…. 63
Biztos válaszok V 1(x, y) : - E(x, u), E(u, v), E(v, y) V 2(x, y) : - E(x, u), E(u, y), Black(y) Q(x) : - E(x, u), E(u, v), E(v, w), E(w, s) Q(x) : - V 2(x, u), V 2(u, v) Q(x) : - V 1(x, u), V 1(u, v) Ezek mind „biztos” válaszokat adnak… 64
Biztos válaszok Definíció: Ha adottak V 1, …, Vn, a válaszaik A 1, …, An és egy Q lekérdezés, akkor egy t sor biztos sor Q-hoz pontosan akkor, ha minden D adatbázis-példányra: Ha A 1=V 1(D) és … és An =Vn(D) akkor t Q(D) CWD (Zárt világ feltételezés) Ha A 1 V 1(D) és … és An Vn(D) akkor t Q(D) OWD (Nyílt világ feltételezés) 65
Biztos válaszok kiszámítása nyílt világ feltételezés mellett V 1(x, y) : - E(x, u), E(u, v), E(v, y) V 2(x, y) : - E(x, u), E(u, y), Black(y) Q(x) : - E(x, u), E(u, v), E(v, w), E(w, s) E(x, f(x, y)) E(f(x, y), g(x, y)) E(g(x, y) E(x, h(x, y)) E(h(x, y) Black(y) : - V 1(x, y) : - V 2(x, y) Szabályok fordítottjai Egyesített Datalog program 66
Biztos válaszok kiszámítása nyílt világ feltételezés mellett Most két lehetőségünk van: Futtassuk az egyesített “Datalog” programot. ◦ Valójában egy Prolog program. ◦ Megjegyzés: az adat szerint polinomiális idejű. Előbb alakítsuk át a Datalog programot, hogy Q csak olyan értékeket adjon vissza, amelyek nem Skolem Termek. 67
Zárt világ feltételezés mellett máshogyan számolunk V 1(x) : - R(x, u) V 2(y) : - R(v, y) Q(x, y) : - R(x, y) A 1 = {a} A 2 = {b} Biztos válaszok Q-ra nyílt világ feltételezés mellett: nincs Biztos válaszok Q-ra zárt világ feltételezés mellett : (a, b) Miért ? 68
- Slides: 68