חורף-תשס"ג236363- dbms, שפות שאילתא: datalog1 datalog תכנות לוגי:...

Post on 19-Dec-2015

232 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

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