1 / 26

236363 מערכות מסדי נתונים

236363 מערכות מסדי נתונים. 10 . תכנות לוגי ב- Datalog שקפים: אלדר פישר. הרעיון הכללי במודל הלוגי. בשפת השאילתה DRC (עבור מסדים רלציונים) התייחסנו ישירות לסדרות הערכים, כשקבענו עבורן תנאים המתארים אלו מהן יכללו בתוצאת הביטוי.

nash-burks
Download Presentation

236363 מערכות מסדי נתונים

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 236363מערכות מסדי נתונים 10. תכנות לוגי ב-Datalog שקפים: אלדר פישר

  2. הרעיון הכללי במודל הלוגי • בשפת השאילתה DRC (עבור מסדים רלציונים) התייחסנו ישירות לסדרות הערכים, כשקבענו עבורן תנאים המתארים אלו מהן יכללו בתוצאת הביטוי. • כאן אנו נכתוב תוכנית לוגית – סדרה של תנאים האמורים להתקיים עבור מספר רלציות שרק חלקן מאוחסנות מראש במאגר, בעוד האחרות מוגדרות למעשה באמצעות התנאים. אנו נדרוש עתה מהמסד חישוב של פיתרון עבור התוכנית, ז"א תכנים עבור הרלציות שאינן מאוחסנות במאגר, אשר ביחד עם תכני הרלציות המאוחסנות יקיימו את כל תנאי התוכנית. • לבסוף, השאילתה תהיה שאילתה פשוטה על הרלציות – בד"כ מהו תוכן אחת הרלציות המוגדרות ע"י התוכנית הלוגית (בד"כ נאפשר גם הטלה ו/או תנאי בחירה נוסף בשלב זה).

  3. מושגי יסוד ב-Datalog • הרלציות המשתתפות ייוצגו ב-Datalog ע"י מילים המתחילות באות קטנה, שיקראו פרדיקטים. בדומה ל-DRC, לפרדיקטים יהיו משתנים שמספרם כמספר העמודות ברלציה המתאימה, וגם כאן סדר המשתנים יקבע לפי סדר כל שהוא שקבענו על העמודות. • דוגמאות: human(X), parent(X, Y). • משתנים ב-Datalog ייוצגו ע"י מילים המתחילות באות גדולה. • פרדיקטים המתאימים לרלציות שתוכנן שמור במסד הנתונים יקראו פרדיקטים מפורשים, או EDB (Extensional DataBase). פרדיקטים המתאימים לרלציות שאינן במאגר, ושתוכנם מוגדר ע"י הפיתרון של התוכנית הלוגית הנתונה, יקראו פרדיקטים סתומים, או IDB(Intensional DataBase). • שורה בתוכן של רלציה תיקרא גם עובדה עבור הפרדיקט המתאים.

  4. Datalog – תחביר בסיסי • בתחביר הבסיסי (בהמשך גם נראה אפשרות להכללה) סוג התנאי המותר היחידי הוא מהצורה pred(X1,…,Xk)φ1,…,φn כאשר: • pred הוא פרדיקט סתום.X1,…,Xk הם סמלי משתנים כל שהם.כל φi הוא נוסחא אטומית אשר יכולה להשתמש במשתנים X1,…,Xk ובמשתנים נוספים, שנסמנם Z1,…,Zm. • הנוסחאות האטומיות המותרות הן אלו של פרדיקטים מפורשים או סתומים (עם הצבה של משתנים בפרדיקט, בדומה לנוסחאות האטומיות המתאימות לרלציות ב-DRC), השוואות בין משתנים (עם אחד מסימני ההשוואה הרגילים), והשוואות בין משתנים לקבועים. • ביטוי לדוגמא: human(Nm)  ancestor(F,Nm), F=“Adam”

  5. תחביר בסיסי – המשך • משמעות הנוסחא היא זו: לכל הצבה אפשרית של ערכים במשתנים X1,…,Xk,Z1,..,Zm, אם מתקיימים כל התנאים φ1,…, φn אז התוכן המתאים ל-pred חייב להכיל גם את ההצבה הנ"ל ל-X1,…,Xk. • בתרגום ללוגיקה מסדר ראשון משמעות התנאי היא זו: • X1,..,Xk,Z1,…,Zm ( (φ1φ2…φn)  pred(X1,…,Xk) ) • שימו לב שבמובן מסוים זוהי למעשה נוסחת Horn.

  6. סימונים מקוצרים • ניתן "להציב" ישירות קבוע במקומו של משתנה, במקום הוספה של תנאי הקובע שהמשתנה חייב להיות זהה לאותו קבוע. • למשל: • הביטוי human(X)  ancestor(“Adam”,X)שקול לביטוי human(X)  ancestor(Y,X), Y=“Adam” • הביטוי human(“Adam”)  trueשקול לביטוי human(X)  X=“Adam” • בנוסף, ניתן להשתמש ב-" _" עבור משתנה המופיע פעם אחת בלבד באחד התנאים. למשל: busy(X)  parent(X,_)

  7. פתרונות מינימלים • לא כל פיתרון עבור תוכנית לוגית הכתובה ב-Datalog הוא טוב עבורינו. למשל – היינו יכולים להציב בכל פרדיקט סתום את "רלצית כל השורות האפשריות" ולספק בכך את התוכנית, אולם הדבר לא היה נותן כלל מידע על הנתונים האגורים במסד. ברצוננו אם כך לנסח מושג של פיתרון אשר מתקבל ממנו מידע אמיתי על המסד, ושבמידת האפשר יהיה יחידי עבור הנתונים האגורים בפרדיקטים המפורשים. • כיוון אחד לצמצום מושג הפיתרון הוא הדרישה שהפיתרון יהיה מינימלי – אנו נדרוש תוכן עבור הרלציות הסתומות שלא זו בלבד שיקיים את תנאי התוכנית, אלא שבנוסף לכך לא תהיה אף תת קבוצה (ממש) שלו אשר גם היא תקיים את התנאים.

  8. נקודות שבת • פיתרון מינימלי כזה יהיה בפרט נקודת שבת עבור התוכנית. • הווה אומר: זה יהיה פיתרון עבור הרלציות הסתומות, כך שבנוסף לכך לכל שורה ברלציה סתומה קיים תנאי אשר "מצדיק" אותה: לכל α1,…,αk כך ש-pred(α1,…,αk) מתקיים, יהיה לפחות תנאי אחד pred(x1,…,xk)φ1,…,φn בתוכנית הלוגית, והצבה β1,…,βm עבור המשתנים הנוספים בתנאי זה, כך ש-φ1,…,φn כולם מתקיימים עבור הצבת הערכים α1,…,αk,β1,…,βm בהתאמה.

  9. עובדות יכיחות • גישה אחרת, שעבורה יש פיתרון יחיד למערכת, היא להתמקד רק בעובדות יכיחות – עובדה pred(α1,…,αk) (כאשר α1,…,αkסידרה של קבועים) תיקרא יכיחה אם ניתן להסיק את קיום השורה α1,…,αk ב-pred מתוך תוכן הרלציות המתאימות לפרדיקטים המפורשים, ע"י סדרה סופית של הפעלות של תנאים מתוך התוכנית הלוגית בהצבות מתאימות במשתנים. • דוגמא: נניח ש-parent(X,Y) הוא פרדיקט מפורש ושהמאגר שלנו כולל עבורו את העובדות: parent(“Avraham”, “Itzchak”) parent(“Itzchak”, “Yaakov”) • נניח גם ש-grandparent(X,Y) הוא פרדיקט סתום, ושכתבנו עבורו את התנאי grandparent(X,Y)parent(X,Z),parent(Z,Y). • את העובדה grandparent(“Avraham”,”Yaakov”) ניתן להסיק מהתנאי ע"י ההצבה Z=“Itzchak”, Y=“Yaakov”, X=“Avraham”.

  10. המשפט המרכזי • עבור כל תוכנית Datalog קיימת נקודת שבת מינימלית יחידה, וזוהי נתונה בדיוק ע"י קבוצת כל העובדות היכיחות ע"י סדרה סופית של היסקים. הוכחת משפט זה אינה במסגרת הקורס, אולם הנכם מוזמנים למצוא אותה בספרות.

  11. ביטויים בטוחים ב-Datalog • ביטויים כגון “equal(X,Y)X=Y”, או אף “anything(X)true”, יגרמו לפרדיקטים לקבל מספר אין-סופי של עובדות. על מנת להבטיח שמצב כזה לא יקרה, ושבנוסף לכך ערכי הפרדיקטים הסתומים יהיו תלויים אך ורק בפרדיקטים המפורשים (ולא בתחומי ההגדרה), אנו נצטרך להגביל עצמנו לביטויים בטוחים. • ביטוי pred(X1,…,Xk)φ1,…,φnעם משתנים נוספים Z1,…,Zm, יקרא בטוח אם כל המשתנים X1,…,Xk,Z1,…,Zm הם מתוחמים. משתנה X יקרא מתוחם אם הוא מופיע ב-φi שהוא פרדיקט (סתום או מפורש), או בהשוואה מהטיפוס “X=α” כאשר α קבוע, או בהשוואה מהטיפוס “X=Y” כאשר Y הוא משתנה מתוחם.

  12. אפשרות חישוב • האלגוריתם הבא יחשב, אם כי באיטיות, את נקודת השבת המינימלית עבור תוכנית Datalog בטוחה. • עבור כל pIDB אפס את Rp (לקבוצה ריקה). • חזור על התהליך הבא כל עוד ניתן להוסיף באמצעותו שורות: • – עבור תנאי p(X1,…,Xk)φ1,…,φn עם משתנים נוספים • Z1,…,Zm, ועבור הצבה α1,…,αk,β1,…,βm במשתנים • X1,…,Xk,Z1,…,Zm אשר מקיימת את φ1,…,φn • (ביחס ל-Rq הנוכחיות), הוסף את השורה α1,…,αk ל-Rp. • כאשר אין יותר אפשרות להוסיף אף שורה לאף רלציה Rp, • פלוט את הרלציות.

  13. מימוש של מספר פעולות של RA • ניתן לממש הטלות ב-Datalog (ביחס לפירוש נקודת השבת המינימלית) באופן הבא: • proj(X1,…,Xk)pred(X1,…,Xk,Xk+1,…,Xm) • איחודים וחיתוכים ניתן לממש כך: • intersect(X1,…,Xk) pred1(X1,…,Xk),pred2(X1,…,Xk) • union(X1,…,Xk) pred1(X1,…,Xk) • union(X1,…,Xk) pred2(X1,…,Xk) • איך נממש צירופים טבעיים ? • join(X1,…,Xk,Y1,…,Ym,Z1,…,Zn) • pred1(X1,…,Xk,Y1,…,Ym),pred2(Y1,…,Ym,Z1,…,Zn) • תרגיל למחשבה: איך נממש בחירה (selection) לפי ביטוי  ? • רמז – ראשית כדאי להעביר את  ל-Disjunctive Normal Form.

  14. גרף תלויות • לתוכנית Datalog ניתן להתאים גרף מכוון, שיקרא גרףהתלויות. בגרף זה יהיה צומת לכל פרדיקט המשתתף בתוכנית. קשת תהיה מ-pred1ל-pred2 אם ורק אם pred1 מופיע בלפחות אחד התנאים של לפחות אחת הפסוקיות המגדירות את pred2. • האם יתכנו קשתות נכנסות לצמתים המתאימים לפרדיקטים המפורשים ?

  15. sibling cousin parent גרף תלויות – דוגמא • עבור התוכנית • sibling(X,Y)  XY, parent(Z,X), parent(Z,Y) • cousin(X,Y)  parent(Xp,X), parent(Yp,Y), sibling(Xp,Yp) • cousin(X,Y)  parent(Xp,X), parent(Yp,Y), cousin(Xp,Yp) • יתקבל הגרף

  16. מימוש ב-RA של קטע תוכנית לוגית • אם פרדיקט סתום pred תלוי אך ורק בפרדיקטים שאת תוכנם אנו יודעים מראש (למשל, פרדיקטים מפורשים), אז ניתן לחשב את ערכו של pred כביטוי רלציוני (ב-RA, או ב-Safe-DRC השקול בכוחו ל-RA) המשתמש ברלציות המתאימות. • דוגמא: נניח ש-parent(X,Y) הוא פרדיקט מפורש המתאים לרלציה Parent[Father,Son] השמורה במאגר הנתונים, ונניח ש-grandparent(X,Y) מוגדר ע"י grandparent(X,Y)parent(X,Z),parent(Z,Y). אז ניתן לחשב את הרלציה המתאימה ל-grandparentבאמצעות הביטוי: • Father1,Son2(Son1=Father2(ParentParent) )

  17. תוכניות לא-רקורסיביות וחישוב ב-RA • תוכנית Datalog בעלת מעגלים (מכוונים) בגרף התלויות תיקרא רקורסיבית. תוכנית ללא מעגלים כאלה תיקרא לא-רקורסיבית. • עבור תוכנית לא רקורסיבית, ניתן יהיה לחשב את נקודת השבת המינימלית (מבחינת התוכן של הפרדיקטים הסתומים) באמצעות מספר קבוע של פעולות RA באופן הבא: • ראשית, נכתוב מיון טופולוגי של צמתי גרף התלויות. זאת אומרת: נקבע סדר טוב על הפרדיקטים כך שכל פרדיקט יהיה תלוי אך ורק בפרדיקטים הנמצאים לפניו בסדר זה. • עתה נעבור על הפרדיקטים הסתומים לפי סדרם, כשכל אחד יחושב כביטוי RA בפרדיקטים אשר חישובם יסתיים לפניו.

  18. תוכניות רקורסיביות וחישוב ב-RA • קיימות תוכניות Datalog רקורסיביות שפתרונן מניב רלציות שאין אפשרות לחשבן ע"י נוסחת RA קבועה מראש.לדוגמא: עבור הפרדיקט המפורש parent(X,Y), נגדיר את הפרדיקט הסתום ancestor(X,Y) באופן הבא: • ancestor(X,Y)parent(X,Y) • ancestor(X,Y)ancestor(X,Z),parent(Z,Y) • נקודת השבת המינימלית תיתן ל-ancestor את הסגור הטרנזיטיבי של parent: העובדה ancestor(α,β) תתקיים אם ורק אם עבור k כל שהוא קיימים α = 1,2,3,…,k = β, כך שלכל 1  i < k מתקיימת העובדה parent(i,i+1). • כזכור מדוגמת קווי הרכבות ותחנות החילוף, אין אפשרות לחשב את הסגור הטרנזיטיבי ע"י נוסחת RA, אם כי ניתן לחשבו כ"גבול" של סדרה של נוסחאות כאלו.

  19. תוספת של ביטויים אריתמטיים • להגדלת החוזק התיאורי של Datalog, יש המוסיפים אפשרות לביטויים אריתמטים פשוטים בתנאי ההשוואות של הפסוקיות. הדבר שקול לתוספת של הפרדיקטים (האין-סופיים) המוגדרים מראש mult(X,Y,Z), add(X,Y,Z), כך שלכל זוג מספרים טבעיים i,jאלו יכילו את העובדות mult(i,j,ij), add(i,j,i+j). • כמובן שהשתתפות בפרדיקט כזה אינה תוחמת את המשתנה לצרכי בדיקה של בטיחות. ראו לדוגמא את התוכנית: • positive(1)true • positive(I)positive(J),add(J,1,I) • פרטים ודוגמאות נוספות יינתנו בתרגיל.

  20. Datalog וחישוב הפרשים • נניח ש-pred1 ו-pred2הם פרדיקטים מפורשים המתאימים לרלציות T1ו-T2בהתאמה, הנמצאות במסד הנתונים. • טענה: לא קיימת תוכנית Datalog אשר מחשבת את T1\T2. • תקציר ההוכחה: נשים לב שבתחביר הבסיסי, שיטת החישוב של הפרדיקטים הסתומים היא מונוטונית – הוספת עובדות לפרדיקטים המפורשים אינה יכולה לגרוע עובדות מהפרדיקטים הסתומים. מצד שני, תוספת של שורות ל-T2 אכן גורעת שורות מ-T1\T2, כך שלא נוכל לייצר באמצעות תוכנית Datalog פרדיקט שערכו יובטח להיות זהה ל-T1\T2.

  21. תוספת של שלילות ל-Datalog • על מנת לאפשר את כתיבתן של שאילתות שאינן מונוטוניות, אנו נאפשר גם כתיבתם של תנאים המורכבים משלילות של פרדיקטים. • באופן פורמלי: פסוקית ב-Datalog עם שלילות היא פסוקית מהצורה pred(X1,…,Xk)φ1,…,φn, כאשר כל φi הוא או השוואה, או פרדיקט (שמוצבים בו משתנים כל שהם), או שלילה של פרדיקט. גם כאן משמעות הפסוקית היא שעבור פיתרון קביל של התוכנית הלוגית, הגרירה חייבת להתקיים לכל הצבה במשתנים. • כאשר נבדוק את הבטיחות של פסוקית, הופעה של משתנה בשלילה של פרדיקט לא תחשב כמתחמת אותו, אלא רק הופעה בפרדיקט ללא שלילה תחשב כמתחמת את המשתנה.

  22. בעיות עם שלילות • כאשר אנו מאפשרים שלילות, אפשר בקלות להגיע למצב שבו אין לנו נקודות שבת כלל. לדוגמא: • lier(X)human(X),¬lier(X) • גם במקרים שבהם קיימים פתרונות, יתכנו נקודות שבת מינימליות רבות שאין עבורן דרך טובה לבחור אחת.לדוגמא: • naysayer(X)human(X),¬yeahsayer(X) • yeahsayer(X)human(X),¬naysayer(X)

  23. תוכניות Datalog מרובדות (Stratified) • ריבוד (stratification) עבור תוכנית Datalog עם שלילות הוא פונקציה מקבוצת הפרדיקטים אל המספרים הטבעיים המקיימת את התנאים הבאים: • אם pred1תלוי ב-pred2, אז ערך הריבוד הניתן ל-pred2 אינו עולה על זה של pred1. • אם pred1תלוי ב-pred2 באמצעות שלילה, ז"א שהשלילה של pred2מופיעה באחת הפסוקיות המגדירות את pred1, אז הריבוד הניתן ל-pred2קטן ממש מזה של pred1. • ניתן להוכיח (ראו בספרות) את הטענה הבאה: תוכנית Datalog היא ניתנת לריבוד אם ורק אם גרף התלויות שלה אינו כולל מעגל עם קשתות הנובעות משלילות.

  24. ריבוד ונקודות שבת • גם עבור תוכניות Datalog מרובדות קיימות דוגמאות עם מספר נקודות שבת מינימליות. עם זאת, תמיד מובטח שפלט האלגוריתם הבא יהיה נקודת שבת מינימלית שאינה תלויה בריבוד הספציפי: • עבור על כל רמות הריבוד של התוכנית, מהראשונה עד האחרונה. • – בשלב ה-i, חשב פיתרון מינימלי עבור כל פסוקיות ה-IDB • מהרמה ה-i, תוך שימוש בערכים שחושבו עבור הרמות הקודמות. • אם תוכנית ה-Datalog המרובדת בטוחה, אז ניתן לממש את האלגוריתם ללא התיחסות לקבוצות אין-סופיות, והתוצאה תהיה תלויה אך ורק בערכי הפרדיקטים המפורשים ובתוכנית.נקודת השבת הנמצאת ע"י אלגוריתם זה נקראת: • נקודת השבת המושלמת – Perfect Fixed Point.

  25. החוזק התיאורי של Datalog – סיכום קצר • כל הטענות הבאות נכונות ל-Datalog ללא ההרחבות האריתמטיות. • ניתן לבטא בביטויי Datalog בטוחים וחסרי שלילה פעולות שלא ניתן לבטאן ב-RA. עם זאת, לא כל ביטוי RA ניתן לבטא בביטוי Datalog. • החוזק התיאורי של ביטויי Datalog בטוחים, חסרי שלילה, ולא רקורסיביים, זהה לזה של ביטויי RA המשתמשים בפעולות , , , ,  בלבד. • החוזק התיאורי של ביטויי Datalog בטוחים ולא רקורסיביים עם שלילות זהה לזה של ביטויי RA כלליים. • וויתור על הבטיחות מגדיל את החוזק התיאורי (ועם שלילות ניתן יהיה לבטא בפרט כל ביטוי ב-DRC), אבל עלול לגרום לתוצאות אין-סופיות ולתוצאות שאינן תלויות בתחום הגדרת המשתנים.

  26. מספר מילים על המודל הלוגי • הסיבה לחוזק התיאורי של Datalog נעוצה בכך ששפה זו מתייחסת לתחביר לוגי המהווה הרחבה של הלוגיקה מסדר ראשון אשר שמשה אותנו עבור DRC. • הרחבה זו קרויה Fixed Point Logic, ונחקרה ע"י הלוגיקאים כאחת מהאפשרויות לפתור את חוסר היכולת לבטא סגור טרנזיטיבי בלוגיקה מסדר ראשון.

More Related