חורף-תשס"ג236363- dbms, שפות שאילתא: datalog1 datalog תכנות לוגי:...
Post on 19-Dec-2015
232 Views
Preview:
TRANSCRIPT
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 1
Datalog
תכנות באמצעות נוסחאות לוגיות.תכנות לוגי :Datalog.שפה לתכנות לוגי של מסדי נתונים :
פרדיקטים( פונקציות המקבלות ערך בוליאני :True/False.)
:דוגמא לתוכנית
woman(‘Sue’).
man(‘Bob’).
man(‘Ed’).
married_to(‘Sue’, ‘Bob’).
married_man(Y) ← married_to(X, Y).
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 2
custדוגמא: פרדיקט
:נתונה הרלציה הבאה
-הייצוג בDatalog ע"י הפרדיקט :cust:cust)‘Moshe Cohen’, 12345, ‘CS’(.cust)‘Avi Barak’, 23456, ‘EE’(.cust)‘Avi Barak’, 34567, ‘MED’(.
Cust_NameCust_IdFaculty
Moshe Cohen12345CS
Avi Barak23456EE
Avi Barak34567MED
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 3
סוגי פרדיקטים
פרדיקטEDB )Extensional Database(:אנו אומרים במפורש עבור אלו ערכים הפרדיקטcust
).Trueמתקיים )ז"א מקבל ערך הערכים נתונים מראש במסד נתונים ולא כחלק
עצמהDatalogמתוכנית ה-
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 4
פרדיקטים המשך...
פרדיקטIDB )Intentional Database(: במקום רשימת ערכים מפורשת, מגדירים חוקים
(rules שקובעים מתי הפרדיקט מקבל ערך )True.( הערכים באים מתוך תחוםDomain של ערכים )
מותרים.נגדיר חוקדוגמא :
faculty)F( ← cust)N, I, F(.
:אז יתקיימו העובדות
faculty)‘CS’(.
faculty)‘EE’(.
faculty)‘MED’(.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 5
Datalogמזהים ב-Identifiers
מזהים המתחילים באות קטנה מייצגים.פרדיקטים
משתניםמזהים המתחילים באות גדולה מייצגים.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 6
Datalogחוקים ב-
לכל השמה של ערכים מהתחום למשתנים המופיעיםבחוק, אם מתקיים גוף החוק )התנאים שבזנב החץ( אז
מתקיים ראש החוק )ראש החץ(.בחוק דוגמא :faculty)F( ← cust)N, I, F( לכל השמה של
,cust)N, I , אם מתקיים N, I, Fערכים מהתחום למשתניםF( אז מתקיים faculty)F(.
-מכיוון שcust)N, I, F(מתקיים עבור ההשמה
N = ‘Moshe Cohen’, I = 12345, F = ‘CS מתקיים גם ’faculty)F( עבור אותה השמה, כלומר faculty)‘CS’(.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 7
- המשךDatalogחוקים ב-
עובדה שנתונה במפורש, כמו
cust)‘Moshe Cohen’, 12345, ‘CS’( .
)’cust)‘Moshe Cohen’, 12345, ‘CS . ←שקולה לחוק :
החוקfaculty)F( ← cust)N, I, F(: שקול לנוסחה הלוגית ∀ N,I,F )cust)N, I, F( → faculty)F((
וגם ל- ∀ F ) )∃N,I cust)N, I, F((→ faculty)F((
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 8
משמעות החוק – המשך
N,I,F)cust)N, I, F( → faculty)F((
N,I,F)cust)N, I, F( faculty)F((
F,I)N)cust)N, I, F(( faculty)F((
F,I))∃N cust)N, I, F(( faculty)F((
N- ב חופשי משתנה faculty(F)אינו
x x
x ((x)) (x (x))
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 9
F,I)∃N cust)N, I, F( faculty)F((
F )I )∃N cust)N, I, F(( faculty)F((
F ))∃I,N cust)N, I, F(( faculty)F((
F ))∃I,N cust)N, I, F(( → faculty)F((
I- ב חופשי משתנה faculty(F)אינו
x x
x ((x)) (x (x))
משמעות החוק – המשך
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 10
קשרים לוגיים
אם בגוף החוק מופיעים כמה תנאים, יש קשר של"וגם" ביניהם.
אם קיימים כמה חוקים עבור אותו פרדיקטIDB אז יש קשר של "או" בין גופי החוקים.
דוגמא: פרוש החוקים p)X( ← q)X, Y(, r)Y(. p)X( ← r)X(.
)) X, Y )))q)X, Y( r)Y(( r)X(( →p)Xהוא:
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 11
Datalogמשמעות של תוכנית
משמעות של תוכניתDatalog היא אוסף העובדות המשתמע ממנה.
הגדרה פורמלית למשמעות של שפה נקראת(.semanticsסמנטיקה )
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 12
משמעות - המשך
דוגמא: משמעות התוכנית cust)‘Moshe Cohen’, 12345, ‘CS’(.
cust)‘Avi Barak’, 23456, ‘EE’(.cust)‘Avi Barak’, 34567, ‘MED’(.faculty)F( ← cust)N, I, F(.
היא {cust)‘Moshe Cohen’, 12345, ‘CS’(, cust)‘Avi Barak’, 23456, ‘EE’(,
cust)‘Avi Barak’, 34567, ‘MED’(, faculty)‘CS’(, faculty)‘EE’(, faculty)‘MED’(}
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 13
בטיחות
מטרה: קבלת תוצאות סופיות ולא תלויות בתחום(domain independent.)
דוגמא: תוצאת החוק q)X, Y( ← p)X(.
היא תלויה בתחום: אםp)X( מתקיים עבור ערך X Y מתקיים עבור כל ערך )q)X, Yכלשהו, אז
בתחום. פתרון: הגדרת כללים סינטקטיים המבטיחים
בטיחות.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 14
בטיחות - המשך
חוקDatalog אם כל המשתנים בטוח הוא .מתוחמים הם המופיעים בחוק
משתנהX אם מתקיים אחד מהתנאים:מתוחם הוא מופיע בגוף החוק בתוך תנאי מהצורהp)…, X, …(
פרדיקט(p)כאשר הוא מופיע בהשוואה מהצורהX=y או y=X כאשר ,y
הוא קבוע או משתנה מתוחם אחר.( בדוגמא הנ"לq)X, Y( ← p)X( ,)Y ,לא מתוחם
ולכן החוק לא בטוח.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 15
שאילתות
-שאילתות בDatalog. "?" מתחילות בתו פלט: כל ההשמות שעבורן הערך של פרדיקט
.trueמסוים הוא דוגמא: אם הוגדר הפרדיקטfather)f, s( כאשר , f
, אז השאילתהf שם של בן של sשם של אב ו-
?father)‘John’, X(.
. Johnתחזיר את כל הבנים של
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 16
תוצאת השאילתה:
Father)‘John’, ‘Bob’(.
Father)‘John’, ‘Fred’(.
Father)‘John’, ‘Ann’(.
….
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 17
שאילתות המשך...
השאילתה
?father)Y, ‘John’(.
’. Johnתיתן את האבא של ‘השאילתה
?father)X, Y(.תחזיר את כל הזוגות של אב ובן.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 18
שאילתות המשך...
השאילתה ?father)‘John’, ‘Dave’(.
הוא האבא של John אם )’father)‘John’, ‘Daveתחזיר Dave.אחרת לא תחזיר דבר ,
-תשובה ריקה שקולה לfalse וכל תשובה אחרת , .trueהיא
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 19
Datalogאריתמטיקה ב-
ניתן להשתמש בפעולות אריתמטיות פשוטות, כגון
בגוף החוק.+, -, *, / :דוגמא
.six)X( ← X = 3 * 2 הפרדיקט
.6 שווה ל-X כאשר trueמקבל למעשה ניתן להסתכל על פעולות אריתמטיות כעל
פרדיקטים אינסופיים המוגדרים מראש במערכת. למשל, + יכול להיות מוגדר ע"י הפרדיקטadd)X, Y, Z(
)X + Y = Z. add)X, Y, Z ←בצורה הבאה:
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 20
דוגמאות
:דוגמא
. )add)5, 7, Zהשאילתא ?
, כלומר נקבל את 5+7 את תוצאת החישוב של Zתחזיר ב-. )add)5, 7, 12התשובה
ע"י אותו פרדיקט נוכל לבצע גם את הפעולהההפוכה-חיסור.
נבצע את השאילתא:5 – 12דוגמא: כדי לחשב את
?add)5, Y, 12(. ,יחד עם זאתDatalog אינו כלי לפתרון משוואות! במקרים
פחות פשוטים הוא לא יצליח.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 21
רקורסיה
בחוק המגדיר פרדיקטIDB ניתן להשתמש בפרדיקטי EDB ובפרדיקטי IDB אחרים )ואפילו רקורסיבית באותו
שאותו מגדיר החוק(.IDBפרדיקט
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 22
סגור טרנזיטיבי
-ע"י רקורסיה ניתן להגדיר בDatalog.סגור טרנזיטיבי :דוגמא
נתון: הפרדיקטfather)F, S(. נגדיר: פרדיקט חדשancestor)A, D(:ע"י
ancestor)A, D( ← father)A,D(.
ancestor)A, D( ← father)A,M(, ancestor)M, D(. הפרדיקטancestor)A, D( יתקיים כאשר A שם של בן אדם
שם של צאצא שלו.Dו-
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 23
Datalog - עם שלילה Datalog
Datalog היא הרחבה של Datalog המאפשרת ,( לפני תנאי המופיע בגוף שימוש בסימן שלילה)
החוק.-דוגמא: בDatalogאפשר להגדיר את החוק
p)X( ← q)X(, r)X(. לכל ערךX בתחום, אם מתקיים q)X( ולא
.)X(p אז מתקיים )r)Xמתקיים
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 24
Datalogהמשך -
שימו לב: כאשר מגדירים חוקים עם שלילה שבהםלא כל המשתנים מופיעים בראש החוק, התוצאה
עלולה להיות שונה מהצפוי. :דוגמא
נתון הפרדיקט married_to)X, Y( המבטא כי האישה X .Yנשואה לגבר
ברצוננו להגדיר פרדיקטbachelor עבור הגברים הרווקים.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 25
1דוגמא - ניסיון
bachelor)Y(←man)Y(, married_to)X, Y(. :טענהbachelor מתקיים לכל הגברים במסד
הנתונים.-הסבר: החוק שקול ל
∀X,Y))man)Y( ⋀married_to)X, Y(( → bachelor)Y((
-וגם ל∀Y))man)Y( X)⋀∃ married_to)X,Y((( → bachelor)Y((
ולכן מספיק שקיים בתחום ערך אחדX שעבורו לא .)y(bachelor כדי שנקבל )married_to)X, Yמתקיים
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 26
דוגמא - הפתרון הנכון
נגדיר פרדיקט עזרmarried_man: married_man)Y( ← married_to)X, Y(. bachelor)Y( ← man)Y(, married_man)Y(.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 27
Datalogבטיחות של
-כמו בDatalog.ללא שלילות שימו לב: הופעה בתנאי מהצורהp)…, X, …(
להיות מתוחם.Xאינה לכשעצמה גורמת ל-
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 28
בטיחות - דוגמא
החוק q)X( ← p)X(.
איננו מתוחם.Xאיננו בטוח: המשתנה הפרדיקטq)X( יתקיים עבור כל התחום, פרט
.)p)X המקיימים xלערכי החוק
q)X( ← p)X(, s)X, Z(. מתוחם.Xהוא בטוח, כי
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 29
משמעות: שלילה מרובדת
לתוכניתDatalog.עלולות להיות מספר משמעויות שונות ( נתונה התוכניתX מעל התחום D = {0, 1}:)
p)0(.q)X( ←p)X(.
:במקרה הזה יש לתוכנית שתי משמעויות שונות {p)0(, q)1(} {p)0(, p)1(}
מבחינה לוגית, החוק האחרון שקול לחוקp)X( ←q)X(.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 30
דוגמא נוספת
woman)‘Sue’(.
man)‘Bob’(.
man)‘Ed’(.
married_to)‘Sue’, ‘Bob’(.
married_man)Y( ← married_to)X, Y(.
bachelor)Y( ← man)Y(, married_man)Y(.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 31
דוגמא המשך...
גם לתוכנית זו לפי הסמנטיקה שלDatalog שתי משמעויות שונות:
1. {woman)‘Sue’(, man)‘Bob’(, man)‘Ed’(,
married_to)‘Sue’, ‘Bob’(, married_man)‘Bob’(, bachelor)‘Ed’(}
2. {woman)‘Sue’(, man)‘Bob’(, man)‘Ed’(,
married_to)‘Sue’, ‘Bob’(, married_man)‘Bob’(, married_man)‘Ed’(}
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 32
Datalogמשמעות של תוכנית
.מסקנה: דרושה סמנטיקה אחרת השיטה: ריבוד התוכנית- חלוקת הפרדיקטים
לרבדים )שכבות( כך ש: אם קיים חוק מהצורהp)X( ← … q)X( אז הפרדיקט …
q נמצא ברובד נמוך יותר או שווה לרובד של p. אם קיים חוק מהצורהp)X( ← … q)X( אז …
נמצא ברובד שהוא )ממש( נמוך יותר qהפרדיקט .pמהרובד של
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 33
שלילה מרובדת - המשך
.לא כל תוכנית ניתנת לריבוד פרדיקטים שמוגדרים בצורה מעגלית עלולים
להיות בלתי ניתנים לריבוד. המשמעות מושגת ע"י חישוב הפרדיקטים לפי
סדר הרבדים, מהנמוך לגבוה.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 34
דוגמא
:ריבוד לתוכנית מהדוגמא הקודמת הפרדיקטים 0רובד :woman, man, married_to. הפרדיקט 1רובד :married_man. הפרדיקט 2רובד :bachelor.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 35
חישוב המשמעות של התוכנית:
0רובד:{woman)‘Sue’(, man)‘Bob’(, man)‘Ed’(, married_to)‘Sue’,
‘Bob’(}
0+1רובד:{woman)‘Sue’(, man)‘Bob’(, man)‘Ed’(, married_to)‘Sue’,
‘Bob’(, married_man)‘Bob’(}
0+1+2רובד:{woman)‘Sue’(, man)‘Bob’(, man)‘Ed’(, married_to)‘Sue’,
‘Bob’(, married_man)‘Bob’(, bachelor)‘Ed’(}
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 36
שלילה מרובדת – הערות
לתוכניתDatalog יכולים להיות כמה ריבודים שונים.
למשל, בדוגמא לעיל יכולנו להוריד את הפרדיקטmarried_man ואת 0 לרובד bachelor 1 לרובד.
.כל הריבודים יובילו לאותה משמעות הריבוד הדחוס ביותר שבו כל הפרדיקטים נמצאים
ברובד הנמוך ביותר האפשרי, הוא היעיל ביותר.
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 37
Datalogfסימני פונקציה – . הרחבה שלDatalog מבנהמאפשר להגדיר( structure.של רשימת הערכים )נתבונן בפרדיקטדוגמא :
person(name, house_no, street, city, id_no)
( נרצה לייצג את השלישייהhouse_no, street, city ) כישות, שמשמעותה – כתובת:לוגית אחת
person(name, addr(house_no, street, city), id_no) לכן, במקום העובדה
person(‘ 2389763, ‘ויצמן’, ‘חיפה’, 17ראובן’, ).נוכל לרשום:
person(‘ראובן’, addr(17, ‘ויצמן’, ‘חיפה’), 2389763).
חורף-תשס"ג 236363- DBMS, שפות שאילתא: Datalog 38
Datalogfהמשך –
:מותר לקנן סימני פונקציה, למשלperson(‘ראובן’, addr(street_addr(17, ‘ויצמן’), ‘חיפה’), 2389763)
:סימני פונקציה יכולים להופיע בראש החוק, למשלhaifa_res(N, street_addr(H,S)) person(N,addr(H,S,‘חיפה’),I).
סימני פונקציה אינם פונקציות )אלא רק איגוד שלמספר ערכים לערך אחד( ואינם פרדיקטים )אלא
ייצוג של "טיפוס" מורכב(. באמצעותDatalogf נוכל להגדיר רשימות ולחשב
פונקציות סטטיסטיות. נושאים אלו הינם מעבר למסגרת הקורס.
top related