10. תכנות לוגי ב-Datalog שקפים: אלדר פישר 236363 מערכות מסדי נתונים 10. תכנות לוגי ב-Datalog שקפים: אלדר פישר
הרעיון הכללי במודל הלוגי בשפת השאילתה DRC (עבור מסדים רלציונים) התייחסנו ישירות לסדרות הערכים, כשקבענו עבורן תנאים המתארים אלו מהן יכללו בתוצאת הביטוי. כאן אנו נכתוב תוכנית לוגית – סדרה של תנאים האמורים להתקיים עבור מספר רלציות שרק חלקן מאוחסנות מראש במאגר, בעוד האחרות מוגדרות למעשה באמצעות התנאים. אנו נדרוש עתה מהמסד חישוב של פיתרון עבור התוכנית, ז"א תכנים עבור הרלציות שאינן מאוחסנות במאגר, אשר ביחד עם תכני הרלציות המאוחסנות יקיימו את כל תנאי התוכנית. לבסוף, השאילתה תהיה שאילתה פשוטה על הרלציות – בד"כ מהו תוכן אחת הרלציות המוגדרות ע"י התוכנית הלוגית (בד"כ נאפשר גם הטלה ו/או תנאי בחירה נוסף בשלב זה).
מושגי יסוד ב-Datalog הרלציות המשתתפות ייוצגו ב-Datalog ע"י מילים המתחילות באות קטנה, שיקראו פרדיקטים. בדומה ל-DRC, לפרדיקטים יהיו משתנים שמספרם כמספר העמודות ברלציה המתאימה, וגם כאן סדר המשתנים יקבע לפי סדר כל שהוא שקבענו על העמודות. דוגמאות: human(X), parent(X, Y). משתנים ב-Datalog ייוצגו ע"י מילים המתחילות באות גדולה. פרדיקטים המתאימים לרלציות שתוכנן שמור במסד הנתונים יקראו פרדיקטים מפורשים, או EDB (Extensional DataBase). פרדיקטים המתאימים לרלציות שאינן במאגר, ושתוכנם מוגדר ע"י הפיתרון של התוכנית הלוגית הנתונה, יקראו פרדיקטים סתומים, או IDB (Intensional DataBase). שורה בתוכן של רלציה תיקרא גם עובדה עבור הפרדיקט המתאים.
Datalog – תחביר בסיסי בתחביר הבסיסי (בהמשך גם נראה אפשרות להכללה) סוג התנאי המותר היחידי הוא מהצורה pred(X1,…,Xk)φ1,…,φn כאשר: pred הוא פרדיקט סתום. X1,…,Xk הם סמלי משתנים כל שהם. כל φi הוא נוסחא אטומית אשר יכולה להשתמש במשתנים X1,…,Xk ובמשתנים נוספים, שנסמנם Z1,…,Zm. הנוסחאות האטומיות המותרות הן אלו של פרדיקטים מפורשים או סתומים (עם הצבה של משתנים בפרדיקט, בדומה לנוסחאות האטומיות המתאימות לרלציות ב-DRC), השוואות בין משתנים (עם אחד מסימני ההשוואה הרגילים), והשוואות בין משתנים לקבועים. לדוגמא: benadam(Nm) ancestor(F,Nm), F=“Adam”
דוגמא לתוכנית התוכנית הבאה מגדירה מספר פרדיקטים סתומים על בסיס הפרדיקטים המפורשים parent(X,Y) ו-human(X). פרדיקטים אחרים יוגדרו בדוגמאות בהמשך. grandparent(X,Y)parent(X,Z),parent(Z,Y) sibling(X,Y) XY, parent(Z,X), parent(Z,Y) ancestor(X,Y) parent(X,Y) ancestor(X,Y) parent(X,Z), ancestor(Z,Y) כרגע עוד לא הגדרנו מהי משמעות התוכנית, ואיך (והאם) מבטיחים שהפרדיקטים הסתומים אכן יקבלו את התוכן המרומז משמותיהם.
משמעות התחביר משמעות הנוסחא pred(X1,…,Xk)φ1,…,φn היא זו: לכל הצבה אפשרית של ערכים במשתנים X1,…,Xk,Z1,..,Zm, אם מתקיימים כל התנאים φ1,…, φn אז התוכן המתאים ל-pred חייב להכיל גם את ההצבה הנ"ל ל-X1,…,Xk. בתרגום ללוגיקה מסדר ראשון משמעות התנאי שחייב להתקיים עבור התוכן של pred היא זו: X1,..,Xk,Z1,…,Zm ( (φ1φ2…φn) pred(X1,…,Xk) ) שימו לב שבמובן מסוים זוהי למעשה נוסחת Horn.
סימונים מקוצרים ניתן "להציב" ישירות קבוע במקומו של משתנה, במקום הוספה של תנאי הקובע שהמשתנה חייב להיות זהה לאותו קבוע. למשל: הביטוי benadam(X) ancestor(“Adam”,X) שקול לביטוי benadam(X) ancestor(Y,X), Y=“Adam” הביטויים benadam(“Adam”) true או פשוט benadam(“Adam”) שקולים ל-benadam(X) X=“Adam” בנוסף, ניתן להשתמש ב-" _ " עבור משתנה המופיע פעם אחת בלבד באחד התנאים. למשל: busy(X) parent(X,_)
חיסרון במושג הפיתרון לא כל פיתרון עבור תוכנית לוגית הכתובה ב-Datalog הוא טוב עבורינו. למשל, אנו יכולים להציב בכל פרדיקט סתום את "רלצית כל השורות האפשריות" ולספק בכך את התוכנית, אולם הדבר לא נותן כלל מידע על הנתונים האגורים במסד. ברצוננו אם כך לנסח מושג של פיתרון אשר מתקבל ממנו מידע אמיתי על המסד, ושבמידת האפשר יהיה יחיד עבור הנתונים האגורים בפרדיקטים המפורשים.
נקודות שבת על מנת לצמצם את קבוצת הפיתרונות האפשריים נדרוש פיתרון שיהיה גם נקודת שבת עבור התוכנית. הווה אומר: פיתרון עבור הרלציות הסתומות, כך שבנוסף לכך לכל שורה ברלציה סתומה קיים תנאי אשר "מצדיק" אותה: לכל α1,…,αk כך ש-pred(α1,…,αk) מתקיים, יהיה לפחות תנאי אחד pred(x1,…,xk)φ1,…,φn בתוכנית הלוגית, והצבה β1,…,βm עבור המשתנים הנוספים בתנאי זה, כך ש-φ1,…,φn כולם מתקיימים עבור הצבת הערכים α1,…,αk,β1,…,βm בהתאמה. עדיין יתכנו פתרונות גרועים לתוכנית. למשל, אם ב-parent יש "מעגל", אז ancestorיכול להכיל שורות נוספות עם תכונה ראשונה זהה לזו של שורות המעגל, ואלו "יצדיקו" זו את זו. נסתכל על המצב המעגלי p(x)<-q(x) ו-q(x)<-p(x) אזי כל הצבה ל-p ו-q כך ש-p=q תביא לנקודת שבת. אבל זו לא נקודה מינימלית כי כל השמטה של x מסויים גם מ-p וגם מ-q תביא לקבוצת עובדות המקיימות את כל הכללים שהיא תת קבוצה של הקבוצה המקורית. לכן נקודת שבת אינה דווקא נקודה מינימלית.
פתרונות מינימלים כיוון נוסף לצמצום מושג הפיתרון הוא הדרישה שהפיתרון יהיה מינימלי – אנו נדרוש תוכן עבור הרלציות הסתומות שלא זו בלבד שיקיים את תנאי התוכנית, אלא שבנוסף לכך לא תהיה אף תת קבוצה (ממש) שלו אשר גם היא תקיים את התנאים. פיתרון מינימלי הוא בפרט נקודת שבת עבור התוכנית. כעיקרון יכולים להיות מספר פתרונות מינימלים. מיד נראה משפט הקובע שכאן הפיתרון המינימלי הוא אכן יחיד.
עובדות יכיחות גישה אחרת לפירוש התוכנית היא להתמקד רק בעובדות יכיחות. עובדה pred(α1,…,αk) (כאשר α1,…,αk סידרה של קבועים) תיקרא יכיחה אם ניתן להסיק את קיום העובדה α1,…,αk ב-pred מתוך תוכן הרלציות המתאימות לפרדיקטים המפורשים, ע"י סדרה סופית של הפעלות של תנאים מתוך התוכנית הלוגית בהצבות מתאימות במשתנים. הרעיון: עבור שורה pred(X1,…,Xk)φ1,…,φn בתוכנית, והצבה α1,…,αk במשתנים X1,…,Xk, אם יש הצבה β1,…,βm במשתנים הנוספים Z1,..,Zm כך שמתקיימים כל φ1,…,φn, אז נוסיף את pred(α1,…,αk) כעובדה שחייבת להיות בתוכן pred. עובדה יכיחה היא עובדה שנוכל להגיע אליה לאחר מספר סופי של צעדים כאלה.
דוגמא ליכיחות דוגמא: נניח שעבור הפרדיקט המפורש parent(X,Y) (בדוגמת התוכנית מקודם) המאגר שלנו כולל את העובדות: parent(“Avraham”, “Itzchak”) parent(“Itzchak”, “Yaakov”) נוכיח עתה עובדות עבור ancestor. מהצבת X=“Avraham” ו-Y=“Itzchak” בתנאי התוכנית ancestor(X,Y) parent(X,Y) נקבל ancestor(“Avraham”,“Itzchak”). מהצבת X=“Avraham”, Y=“Yaakov” ו-Z=“Itzchak” בתנאי ancestor(X,Y) parent(X,Z), ancestor(Z,Y) נקבל ancestor(“Avraham”,“Yaakov”).
המשפט המרכזי קבוצת כל העובדות היכיחות ע"י סדרה סופית של היסקים היא פיתרון עבור תוכנית ה-Datalog. יתרה מכך, הקבוצה הזו היא הפיתרון המינימלי היחיד של התוכנית. במצב מעגלי כגון p(x)<-q(x) ו-q(x)<-p(x) אזי כל הצבה ל-p ו-q כך ש-p=q תביא לנקודת שבת. לעומת זאת לא תהיה כאן ולו עובדה יכיחה אחת. (כי אין שום ערך התחלתי לאף אחד מהטבלאות) לכן זו תהיה נקודת שבת אך לא נקודת שבת מינמלית. כאשר אין שלילות פתרון מינימלי ונקודת שבת מינימלית הן זהות. ע"פ הספר database and knowlede – base systems vol 1 Jeffrey D. Ullman (p. 100) ב-datalog משמעות התוכנית היא ע"פ נקודת מינימלית ולא ע"פ נקודת שבת מינימלית. הוכחת משפט זה אינה במסגרת הקורס, אולם הנכם מוזמנים למצוא אותה בספרות.
סיכום מושגי הפיתרון פיתרון (ללא תנאים נוספים) – יכול להיות אפילו "רלציית" כל הערכים האפשריים. נקודת שבת – פיתרון עם התנאי הנוסף "לכל עובדה בתוכן הפרדיקטים הסתומים יש שורה בתוכנית והצבה המצדיקה אותה" (יכול להיות שהצידוק משתמש בעובדה עצמה). קצת יותר חלש מ"פיתרון שאי אפשר להסיר ממנו עובדה אחת כך שיישאר פיתרון". פיתרון מינימלי – פיתרון שאי אפשר להסיר ממנו כמות כל שהיא של עובדות מהפרדיקטים הסתומים כך שיישאר פיתרון (ובפרט הוא נקודת שבת). לפי המשפט מקודם תמיד יש בדיוק פיתרון אחד כזה, והוא קבוצת העובדות היכיחות. כאשר מאפשרים שלילות (ראו בהמשך) המצב מסובך יותר.
ביטויים בטוחים ב-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 הוא משתנה מתוחם.
אפשרות חישוב האלגוריתם הבא יחשב, אם כי באיטיות, את נקודת השבת המינימלית עבור תוכנית Datalog בטוחה. עבור כל pIDB אפס את Rp (לקבוצה ריקה). חזור על התהליך הבא כל עוד ניתן להוסיף באמצעותו שורות: עבור תנאי p(X1,…,Xk)φ1,…,φn עם משתנים נוספים Z1,…,Zm, ועבור הצבה α1,…,αk,β1,…,βm במשתנים X1,…,Xk,Z1,…,Zm אשר מקיימת את φ1,…,φn (ביחס ל-Rq הנוכחיות), הוסף את השורה α1,…,αk ל-Rp. הערכים שצריך לבדוק בהצבות הנ"ל הם רק אלו המופיעים במסד הנתונים עבור רלציות ה-EDB, ובתוכנית עצמה. כאשר אין יותר אפשרות להוסיף אף שורה לאף רלציה Rp, פלוט את הרלציות.
מימוש של מספר פעולות של 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.
גרף תלויות לתוכנית Datalog ניתן להתאים גרף מכוון, שיקרא גרף התלויות. בגרף זה יהיה צומת לכל פרדיקט המשתתף בתוכנית. קשת תהיה מ-pred1 ל-pred2 אם ורק אם pred1 מופיע בלפחות אחד התנאים של לפחות אחת הפסוקיות המגדירות את pred2. האם יתכנו קשתות נכנסות לצמתים המתאימים לפרדיקטים המפורשים ?
גרף תלויות – דוגמא עבור התוכנית (כאשר parent הוא הפרדיקט המפורש היחיד): sibling(X,Y) XY, 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) יתקבל הגרף sibling parent cousin
מימוש ב-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(ParentParent) )
תוכניות לא-רקורסיביות וחישוב ב-RA תוכנית Datalog בעלת מעגלים (מכוונים) בגרף התלויות תיקרא רקורסיבית. תוכנית ללא מעגלים כאלה תיקרא לא-רקורסיבית. עבור תוכנית לא רקורסיבית, ניתן יהיה לחשב את נקודת השבת המינימלית (מבחינת התוכן של הפרדיקטים הסתומים) באמצעות מספר קבוע של פעולות RA באופן הבא: ראשית, נכתוב מיון טופולוגי של צמתי גרף התלויות. זאת אומרת: נקבע סדר טוב על הפרדיקטים כך שכל פרדיקט יהיה תלוי אך ורק בפרדיקטים הנמצאים לפניו בסדר זה. עתה נעבור על הפרדיקטים הסתומים לפי סדרם, כשכל אחד יחושב כביטוי RA בפרדיקטים אשר חישובם יסתיים לפניו.
תוכניות רקורסיביות וחישוב ב-RA קיימות תוכניות Datalog רקורסיביות שפתרונן מניב רלציות שאין אפשרות לחשבן ע"י נוסחת RA קבועה מראש. לדוגמא: עבור הפרדיקט המפורש parent(X,Y) הגדרנו כזכור את הפרדיקט הסתום ancestor(X,Y) באופן הבא: ancestor(X,Y)parent(X,Y) ancestor(X,Y)parent(X,Z),ancestor(Z,Y) נקודת השבת המינימלית תיתן ל-ancestor את הסגור הטרנזיטיבי של parent: העובדה ancestor(α,β) תתקיים אם ורק אם עבור k כל שהוא קיימים α = 1,2,3,…,k = β, כך שלכל 1 i < k מתקיימת העובדה parent(i,i+1). כזכור מדוגמת קווי הרכבות ותחנות החילוף, אין אפשרות לחשב את הסגור הטרנזיטיבי ע"י נוסחת RA, אם כי ניתן לחשבו כ"גבול" של סדרה של נוסחאות כאלו.
חוזק תיאורי – סיכום ביניים את כל ביטויי ה-RA המונוטונים, ז"א אלו המורכבים מהפעולות הרלציוניות , , , , בלבד, ניתן לחשב ע"י תוכניות Datalog לא רקורסיביות (בדומה לדוגמאות שראינו). מצד שני, את הפיתרון של כל תוכנית Datalog לא רקורסיבית ניתן לחשב ע"י פעולות RA כנ"ל. תוכניות Datalog רקורסיביות יכולות לתת תוצאות שאין עבורן ביטוי RA.
תוספת של ביטויים אריתמטיים להגדלת החוזק התיאורי של Datalog, יש המוסיפים אפשרות לביטויים אריתמטים פשוטים בתנאי ההשוואות של הפסוקיות. הדבר שקול לתוספת של הפרדיקטים (האין-סופיים) המוגדרים מראש mult(X,Y,Z), add(X,Y,Z), כך שלכל זוג מספרים טבעיים i,j אלו יכילו את העובדות mult(i,j,ij), add(i,j,i+j). כמובן שהשתתפות בפרדיקט כזה אינה תוחמת את המשתנה לצרכי בדיקה של בטיחות. ראו לדוגמא את התוכנית: positive(1)true positive(I)positive(J),add(J,1,I) פרטים ודוגמאות נוספות יינתנו בתרגיל. כאשר לא נאמר אחרת אנו נניח שעומד לרשותנו Datalog טהור ללא ההרחבות האריתמטיות.
Datalog וחישוב הפרשים נניח ש-pred1 ו-pred2 הם פרדיקטים מפורשים המתאימים לרלציות T1 ו-T2 בהתאמה, הנמצאות במסד הנתונים. טענה: לא קיימת תוכנית Datalog אשר מחשבת את T1\T2. תקציר ההוכחה: נשים לב שבתחביר הבסיסי, מושג הפיתרון עבור הפרדיקטים הסתומים הוא מונוטוני – הוספת עובדות לפרדיקטים המפורשים אינה יכולה לגרוע עובדות מהפרדיקטים הסתומים. מצד שני, תוספת של שורות ל-T2 אכן גורעת שורות מ-T1\T2, כך שלא נוכל לייצר באמצעות תוכנית Datalog פרדיקט שערכו יובטח להיות זהה ל-T1\T2.
תוספת של שלילות ל-Datalog על מנת לאפשר את כתיבתן של שאילתות שאינן מונוטוניות, אנו נאפשר גם כתיבתם של תנאים המורכבים משלילות של פרדיקטים. באופן פורמלי: פסוקית ב-Datalog עם שלילות היא פסוקית מהצורה pred(X1,…,Xk)φ1,…,φn, כאשר כל φi הוא או השוואה, או פרדיקט (שמוצבים בו משתנים כל שהם), או שלילה של פרדיקט. גם כאן משמעות הפסוקית היא שעבור פיתרון קביל של התוכנית הלוגית, הגרירה חייבת להתקיים לכל הצבה במשתנים. כאשר נבדוק את הבטיחות של פסוקית, הופעה של משתנה בשלילה של פרדיקט לא תחשב כמתחמת אותו, אלא רק הופעה בפרדיקט ללא שלילה תחשב כמתחמת את המשתנה.
שלילות ומשתנים חסרי שם לפי הסימונים שנלמדו עד עתה, לא ניתן יהיה להשתמש במשתנים חסרי שם (סימון "_") בפרדיקטים המופיעים בשלילה, מכיוון שאלו יתאימו למשתנים לא מתוחמים. נהוג להשתמש בשלילה בסימון "_" במשמעות אחרת המערבת תוספת של פרדיקט עזר סתום. לדוגמה, הנוסחא ¬parent(X,_) (כחלק משורה בתוכנית) פירושה יהיה ¬parent2(X), כאשר parent2 הוא פרדיקט סתום חדש שהתנאי היחידי המגדיר אותו הוא parent2(X)parent(X,_).
בעיות עם שלילות כאשר אנו מאפשרים שלילות, אפשר בקלות להגיע למצב שבו אין לנו פתרונות שהם נקודות שבת כלל. לדוגמא: lier(X)human(X),¬lier(X) גם במקרים שבהם קיימות נקודות שבת, יתכנו נקודות שבת מינימליות רבות שאין עבורן דרך טובה לבחור אחת. לדוגמא: naysayer(X)human(X),¬yeahsayer(X) yeahsayer(X)human(X),¬naysayer(X)
תוכניות Datalog מרובדות (Stratified) ריבוד (stratification) עבור תוכנית Datalog עם שלילות הוא פונקציה מקבוצת הפרדיקטים אל המספרים הטבעיים המקיימת את התנאים הבאים: אם pred1 תלוי ב-pred2, אז ערך הריבוד הניתן ל-pred2 אינו עולה על זה של pred1. אם pred1 תלוי ב-pred2 באמצעות שלילה, ז"א שהשלילה של pred2 מופיעה באחת הפסוקיות המגדירות את pred1, אז הריבוד הניתן ל-pred2 קטן ממש מזה של pred1. ניתן להוכיח (ראו בספרות) את הטענה הבאה: תוכנית Datalog היא ניתנת לריבוד אם ורק אם גרף התלויות שלה אינו כולל מעגל עם קשתות הנובעות משלילות.
ריבוד ונקודות שבת גם עבור תוכניות Datalog מרובדות קיימות דוגמאות עם מספר נקודות שבת מינימליות. עם זאת, תמיד מובטח שפלט האלגוריתם הבא יהיה נקודת שבת מינימלית שאינה תלויה בריבוד הספציפי: עבור על כל רמות הריבוד של התוכנית, מהראשונה עד האחרונה. – בשלב ה-i, חשב פיתרון מינימלי עבור כל פסוקיות ה-IDB מהרמה ה-i, תוך שימוש בערכים שחושבו עבור הרמות הקודמות. אם תוכנית ה-Datalog המרובדת בטוחה, אז ניתן לממש את האלגוריתם ללא התיחסות לקבוצות אין-סופיות, והתוצאה תהיה תלויה אך ורק בערכי הפרדיקטים המפורשים ובתוכנית. נקודת השבת הנמצאת ע"י אלגוריתם זה נקראת: נקודת השבת המושלמת – Perfect Fixed Point.
החוזק התיאורי של Datalog – סיכום ניתן לבטא בביטויי Datalog בטוחים וחסרי שלילה פעולות שלא ניתן לבטאן ב-RA. עם זאת, לא כל ביטוי RA ניתן לבטא בביטוי Datalog. החוזק התיאורי של ביטויי Datalog בטוחים, חסרי שלילה, ולא רקורסיביים, זהה לזה של ביטויי RA המשתמשים בפעולות , , , , בלבד. החוזק התיאורי של ביטויי Datalog בטוחים ולא רקורסיביים עם שלילות זהה לזה של ביטויי RA כלליים. וויתור על הבטיחות מגדיל את החוזק התיאורי (ועם שלילות ניתן יהיה לבטא בפרט כל ביטוי ב-DRC), אבל עלול לגרום לתוצאות אין-סופיות ולתוצאות שאינן תלויות בתחום הגדרת המשתנים.
מספר מילים על המודל הלוגי הסיבה לחוזק התיאורי של Datalog נעוצה בכך ששפה זו מתייחסת לתחביר לוגי המהווה הרחבה של הלוגיקה מסדר ראשון אשר שמשה אותנו עבור DRC. הרחבה זו קרויה Fixed Point Logic, ונחקרה ע"י הלוגיקאים כאחת מהאפשרויות לפתור את חוסר היכולת לבטא סגור טרנזיטיבי בלוגיקה מסדר ראשון.