الصياغة والدلالات في البرمجة المنطقية
هذه مقالة غير مراجعة.(مايو 2025) |
البرمجة المنطقية هي نموذج برمجة يعتمد على لغات تستند إلى المنطق الرسمي، وتشمل من بينها Datalogو Prolog. وتتناول هذه المقالة بناء الجملة ودلالات المجموعة الفرعية الإعلانية البحتة من هذه اللغات. ومن الجدير بالذكر أن اسم "البرمجة المنطقية" يُستخدم أيضًا للإشارة إلى لغة برمجة محددة تتوافق بشكل كبير مع المجموعة الفرعية التصريحية من Prolog، مما قد يسبب بعض الالتباس. ولسوء الحظ، سيتعين استخدام هذا المصطلح بكلا المعنيين في هذه المقالة.
تتكون برامج المنطق التصريحي بالكامل من قواعد من النموذج
H :- B1, ..., BN.
حيث يمكن قراءة كل قاعدة من هذه القواعد باعتبارها نتيجة ضمنية:
المعنى هو "إذا كان كل حد في جسم القاعدة (Bi) صحيحًا، إذن فإن رأس القاعدة (H) يكون صحيحًا". تقوم برامج البرمجة المنطقية بحساب مجموعة الحقائق التي تستلزمها قواعدها.
تضيف العديد من تطبيقات Datalog و برولوغواللغات ذات الصلة ميزات إجرائية مثل عامل القطع في برولوغ أو ميزات غير منطقية مثل واجهة وظيفة أجنبية. إن الدلالات الرسمية لمثل هذه الامتدادات تقع خارج نطاق هذه المقالة.
سجل البيانات
عدلDatalog هي أبسط لغات البرمجة المنطقية التي حظيت بدراسة واسعة. وهناك ثلاثة تعريفات رئيسية لدلالات Datalog، وهي كلها متكافئة. أما بناء الجملة ودلالات لغات البرمجة المنطقية الأخرى فهي عبارة عن امتدادات وتعميمات لتلك الخاصة بلغة Datalog.
بناء الجملة
عدليتكون برنامج Datalog من قائمة من القواعد (جمل هورن). [1]إذا كانت C و V مجموعتين قابلتين للعد من الثوابت والمتغيرات على التوالي، وكانت R عبارة عن مجموعة قابلة للعد من رموز المسند، فإن قواعد BNF التالية تعبر عن بنية برنامج Datalog:
<program> ::= <rule> <program> | ""
<rule> ::= <atom> ":-" <atom-list> "."
<atom> ::= <relation> "(" <term-list> ")"
<atom-list> ::= <atom> | <atom> "," <atom-list> | ""
<term> ::= <constant> | <variable>
<term-list> ::= <term> | <term> "," <term-list> | ""
تُعرف الذرات أيضًا باسم الحدودية (literals). وتُسمى الذرة الموجودة على يسار الرمز :-
رأس القاعدة (head)؛ أما الذرات الموجودة على اليمين فتُسمى جسم القاعدة (body). ويجب أن يستوفي كل برنامج Datalog الشرط الذي ينص على أن كل متغير يظهر في رأس القاعدة يجب أن يظهر أيضًا في جسم القاعدة (يُطلق على هذا الشرط أحيانًا اسم تقييد النطاق (range restriction)) [1] [2]
تُسمى القواعد ذات الأجسام الفارغة حقائق (facts). على سبيل المثال، القاعدة التالية هي حقيقة:
r(x) :- .
السكر النحوي
عدل
توسع العديد من تطبيقات البرمجة المنطقية القواعد النحوية المذكورة أعلاه للسماح بكتابة الحقائق بدون :-
، مثل:
r(x) :- .
يسمح العديد من تطبيقات Datalog أيضًا بكتابة العلاقات الصفرية (0-ary relations) بدون أقواس، مثل هذا:
p :- q.
هذه مجرد اختصارات نحوية (syntactic sugar) سكر نحوي؛ وليس لها أي تأثير على دلالات البرنامج.
مثال
عدل
حيث انهو يقوم البرنامج التالي بحساب path
العلاقة، وهو الإغلاق المتعدي edge
العلاقة.
edge(x, y).
edge(y, z).
path(A, B) :-
edge(A, B).
path(A, C) :-
path(A, B),
edge(B, C).
الدلالات
عدلهناك ثلاثة أساليب مستخدمة على نطاق واسع لدلالات برامج Datalog: النظرية النموذجية ، والنقطة الثابتة ، والنظرية الإثباتية . يمكن إثبات أن هذه الأساليب الثلاثة متكافئة.[3]
تُسمى الذرة أرضية (ground) إذا لم يكن أي من مصطلحاتها الفرعية متغيرًا. وبشكل بديهي، تحدد كل الدلالات معنى البرنامج المنطقي (الذي لا يتضمن النفي) على أنه مجموعة جميع الذرات الأساسية التي يمكن استنتاجها من قواعد البرنامج، بدءًا من الحقائق.
النموذج النظري
عدلe(x, y).
e(y, z).
p(A, B) :-
e(A, B).
p(A, C) :-
p(A, B),
e(B, C).
تُسمى القاعدة أرضية (ground) إذا كانت جميع ذراتها (الرأس والجسم) أرضية - أي لا تحتوي على أي متغيرات. وتُعتبر القاعدة الأرضية R1 مثالًا أساسيًا (ground instance) لقاعدة أخرى R 2 إذا كانت R 1 هي نتيجة استبدال جميع المتغيرات الموجودة في
R 2بثوابت معينة.
قاعدة هيربراند ( Herbrand base) لبرنامج Datalog هي مجموعة جميع الذرات الأرضية (الذرات التي لا تحتوي على متغيرات) التي يمكن إنشاؤها باستخدام الثوابت التي تظهر في البرنامج. ويُعرف التفسير (interpretation) أيضًا باسم مثيل قاعدة البيانات (database instance) وهو عبارة عن مجموعة فرعية من قاعدة هيربراند. وتكون الذرة الأساسية صحيحة في التفسير I إذا كانت عنصرًا من I. وتكون القاعدة صحيحة في التفسير I إذا كان لكل مثال أساسي لتلك القاعدة، فإنه عندما تكون جميع الذرات في جسم القاعدة صحيحة في I، فإن رأس القاعدة يكون صحيحًا أيضًا في I.
نموذج برنامج Datalog P هو تفسير I للبرنامج P الذي يحتوي على جميع الحقائق الأساسية الموجودة في P، ويجعل جميع قواعد P صحيحة في I. وتنص دلالات نظرية النموذج(Model-theoretic semantics) على أن معنى برنامج Datalog هو نموذجه الأدنى (least model) (أو تقاطع جميع نماذجه). [4]
على سبيل المثال، هذا البرنامج:
edge(x, y).
edge(y, z).
path(A, B) :-
edge(A, B).
path(A, C) :-
path(A, B),
edge(B, C).
هل يوجد هذا الكون هيربراند : x
، y
، z
وهذه هي قاعدة هيربراند: edge(x,x
، edge(x, y
، ... edge(z, z)
، path(x x)
، .. path(z, z)
وهذاايضا نموذج هيربراند الأدنى: edge(x, y)
، edge(y,z)
، path(x,y)
، path(y,z)
، path(x,z)
نقطة ثابتة
عدلليكن I مجموعة جميع التفسيرات لبرنامج Datalog P، أيI = P(H)، حيث H هي قاعدة هيربراند لـ P و P هو مشغل مجموعة القوى (power set operator). مشغل النتائج المباشرة (immediate consequence operator) لـ P هو الخريطة التالية TP من I إلى I: لكل مثال أرضي لكل قاعدة في P، إذا كانت كل جملة في جسم القاعدة موجودة في تفسير الإدخال، فقم بإضافة رأس المثال الأرضي إلى تفسير الإخراج. هذه الخريطة TP رتيبة فيما يتعلق بالترتيب الجزئي المعطى من خلال تضمين المجموعة الفرعية (⊆) على I. ووفقًا لنظرية كناستر-تارسكي (Knaster-Tarski theorem)، تحتوي هذه الخريطة على أقل نقطة ثابتة؛ ووفقًا <b>لنظرية كليين للنقطة الثابتة،</b> (Kleene fixpoint theorem)، فإن أقل نقطة ثابتة هي الحد الأعلى للسلسلة: TP(∅),TP ,...إن أقل نقطة ثابتة لـ TP تتطابق مع نموذج هيربراند الأدنى (least Herbrand model) للبرنامج P. [5]
تشير دلالات نقطة الإصلاح (Fixpoint semantics) إلى خوارزمية لحساب نموذج هيربراند الأدنى (least Herbrand model): ابدأ بمجموعة الحقائق الأساسية الموجودة في البرنامج، ثم أضف بشكل متكرر جميع العواقب التي يمكن استنتاجها من تطبيق القواعد حتى يتم الوصول إلى نقطة الإصلاح (حيث لا يمكن إضافة المزيد من الحقائق). تُسمى هذه الخوارزمية <b>بالتقييم الساذج</b> (naive evaluation).
إثبات نظري
عدلpath(x, z)
من البرنامجedge(x, y).
edge(y, z).
path(A, B) :-
edge(A, B).
path(A, C) :-
path(A, B),
edge(B, C).
بالنظر إلى برنامج P، فإن شجرة إثبات (proof tree) للذرة الأرضية A هي شجرة ذات جذر مُسمى بـ A، وأوراق مُسماة بذرات أرضية تمثل رؤوس الحقائق في P، وفروع ذات أطفال A1,...,An مُصنفة بواسطة ذرات أرضية G بحيث توجد حالة أرضية لقاعدة في P يكون رأسها A وجسمها
G :- A 1, ...
, A n .
بالنسبة لقاعدة في P تُعرّف دلالات نظرية الإثبات (Proof-theoretic semantics) معنى برنامج Datalog بأنه مجموعة الذرات الأساسية التي يمكن استنتاجها من مثل هذه الأشجار. وتتوافق هذه المجموعة تحديدًا مع نموذج هيربراند الأدنى (least Herbrand model).[6]
قد يكون المرء مهتمًا بمعرفة ما إذا كانت ذرة أرضية معينة تنتمي إلى نموذج هيربراند الأدنى (least Herbrand model) لبرنامج Datalog أم لا، ربما دون الحاجة إلى حساب النموذج بأكمله. وتشير القراءة من أعلى إلى أسفل لأشجار الإثبات الموضحة سابقًا إلى خوارزمية لحساب نتائج مثل هذه الاستعلامات، وهذه القراءة تحديدًا تزودنا بخوارزمية حل SLD (SLD-resolution)، والتي تشكل الأساس لتقييم استعلامات Prolog.
طرق أخرى
عدلعمومية.مممممم تمت دراسة دلالات Datalog أيضًا في سياق نقاط التثبيت على الحلقات شبه الدائرية (semirings) الأكثر عمومية.[7] يوفر هذا التوجه إطارًا جبريًا لدراسة دلالات Datalog، حيث يتم استبدال القيم المنطقية (صحيح/خاطئ) بعناصر من الحلقة شبه الدائرية، وعمليات الاتحاد والتقاطع بعمليات الجمع والضرب في الحلقة شبه الدائرية على التوالي. يتيح هذا التعميم نمذجة مفاهيم إضافية مثل التكلفة أو الاحتمالية ضمن قواعد Datalog.
البرمجة المنطقية
عدلفي حين أن اسم "البرمجة المنطقية" يُستخدم للإشارة إلى النموذج الكامل للغات البرمجة بما في ذلك Datalog و Prolog، فإنه عند مناقشة الدلالات الرسمية، يشير عمومًا إلى امتداد Datalog يتضمن رموز الوظائف (function symbols). وتُسمى البرامج المنطقية أيضًا جمل هورن (Horn clauses). وترتبط البرمجة المنطقية كما نوقشت في هذه المقالة ارتباطًا وثيقًا بالمجموعة الفرعية "الخالصة" أو التصريحية من Prolog.
بناء الجملة
عدليمتد بناء جملة البرمجة المنطقية ليشمل بناء جملة Datalog عن طريق إضافة استخدام رموز الوظائف (function symbols). كما تتخلى البرمجة المنطقية عن تقييد النطاق (range restriction) الموجود في Datalog، مما يسمح بظهور متغيرات في رؤوس القواعد لا تظهر في أجسامها. [8]
كل نموذج مستقر (stable model) هو أيضًا نموذج هيربراند أدنى (least Herbrand model). برنامج Datalog الذي لا يحتوي على نفي يمتلك نموذجًا مستقرًا واحدًا فقط، وهو بالتحديد نموذج هيربراند الأدنى الخاص به. وتُعرّف دلالات النموذج المستقر (stable model semantics) معنى برنامج منطقي يتضمن النفي بأنه نموذجه المستقر، إن وُجد. ومع ذلك، قد يكون من المفيد دراسة جميع النماذج المستقرة للبرنامج (أو على الأقل عدد منها)؛ وهذا هو الهدف الأساسي لـ برمجة مجموعة الإجابات (Answer Set Programming - ASP).
النفي
عدلتتمتع البرمجة المنطقية (التي لا تتضمن النفي) بالخاصية المرغوبة المتمثلة في اتفاق التعريفات الثلاثة الرئيسية لدلالات البرامج المنطقية (دلالات نظرية النموذج، ودلالات نقطة الإصلاح، ودلالات نظرية الإثبات). في المقابل، هناك العديد من المقترحات المتضاربة فيما يتعلق بدلالات البرامج المنطقية التي تتضمن النفي. ويكمن مصدر هذا الخلاف في أن البرامج المنطقية الخالية من النفي لها نموذج هيربراند الأدنى الفريد، ولكن بشكل عام، لا تمتلك برامج البرمجة المنطقية (أو حتى Datalog) التي تتضمن النفي مثل هذا النموذج الفريد.
بناء الجملة
عدل
يُكتب النفي باستخدام الكلمة المفتاحية not
ويمكن أن يظهر أمام أي ذرة في جسم القاعدة.
<atom-list> ::= <atom> | "not" <atom> | <atom> "," <atom-list> | ""
الدلالات
عدلالنفي الطبقي
عدليُعتبر البرنامج المنطقي الذي يتضمن النفي طبقيًا (stratified) عندما يكون من الممكن تعيين كل علاقة (predicate) إلى طبقة معينة، بحيث إذا ظهرت علاقة R منفية (not R
) في جسم قاعدة تحدد علاقة S، فإن الطبقة المخصصة لـ R تكون أقل من الطبقة المخصصة لـ S.[9] ويمكن توسيع كل من دلالات نظرية النموذج (model-theoretic semantics) و دلالات نقطة الإصلاح (fixpoint semantics) للغة Datalog للتعامل مع النفي الطبقي، وقد تم إثبات أن هذه الامتدادات متكافئة.
تستخدم العديد من تطبيقات Datalog نموذج تقييم من الأسفل إلى الأعلى مستوحى من دلالات نقطة الإصلاح (fixpoint semantics). ونظرًا لأن هذه الدلالات قادرة على التعامل مع النفي الطبقي (stratified negation)، فإن العديد من تطبيقات Datalog تنفذ آلية النفي الطبقي.
على الرغم من أن النفي الطبقي (stratified negation) هو امتداد شائع للغة Datalog، إلا أن هناك برامج منطقية معقولة لا يمكن تقسيمها إلى طبقات. يصف البرنامج التالي لعبة بين لاعبين، حيث يفوز أحد اللاعبين إذا لم يكن لدى خصمه أي حركات متاحة:[10]
move(a, b).
win(X) :- move(X, Y), not win(Y).
هذا البرنامج ليس طبقيًا (stratified)، ولكن يبدو من المعقول أن نستنتج أن a
يجب أن يفوز في اللعبة.
دلالات الإكمال
عدلدلالات النموذج المثالي
عدلدلالات النموذج المستقر
عدلتُعرّف دلالات النموذج المستقر (Stable Model Semantics) شرطًا لتحديد أي من نماذج هيربراند (Herbrand models) لبرنامج معين يمكن اعتبارها "مستقرة". وبشكل بديهي، تمثل النماذج المستقرة "مجموعات المعتقدات المتماسكة التي يمكن أن يتبناها وكيل عقلاني، بناءً على البرنامج المنطقي المقدم كفرضيات." [11]
قد يحتوي البرنامج المنطقي الذي يتضمن النفي على عدة نماذج مستقرة مختلفة، أو قد لا يمتلك أي نموذج مستقر على الإطلاق. على سبيل المثال، البرنامج التالي:
p :- not q.
q :- not p.
يحتوي على نموذجين مستقرين{ 𝑝
}،{ 𝑞}
برنامج القاعدة الواحدة
p :- not p.
ليس لديه نماذج مستقرة.
كل نموذج مستقر (stable model) هو أيضًا نموذج هيربراند الأدنى (least Herbrand model). برنامج Datalog الذي لا يتضمن نفيًا يمتلك نموذجًا مستقرًا وحيدًا، وهو نفسه نموذج هيربراند الأدنى الخاص به. وتُعرّف دلالات النموذج المستقر (stable model semantics) معنى البرنامج المنطقي الذي يحتوي على نفي بأنه نموذجه المستقر، وذلك في حال وجود نموذج مستقر وحيد. ومع ذلك، قد يكون من المفيد استكشاف جميع النماذج المستقرة لبرنامج ما (أو على الأقل عدد منها)؛ وهذا هو الهدف من برمجة مجموعة الإجابات (Answer Set Programming - ASP).
.
دلالات راسخة
عدلتمديدات أخرى
عدللقد تم اقتراح ودراسة العديد من التوسعات الأخرى للغة Datalog، والتي تشمل:
- المتغيرات التي تدعم الثوابت والوظائف الصحيحة (بما في ذلك <b>DatalogZ</b>).[12][13] يسمح هذا التوسع بإجراء عمليات حسابية مباشرة ضمن قواعد Datalog.
- قيود عدم المساواة في أجسام القواعد. يتيح ذلك تحديد شروط يجب ألا تكون فيها قيم معينة متساوية.
- والوظائف التجميعية (Aggregate functions). تسمح هذه الوظائف بإجراء عمليات مثل العد والمتوسط والحد الأقصى والحد الأدنى على مجموعات من القيم المستنبطة.
تسمح برمجة منطق القيود (Constraint Logic Programming - CLP) بظهور قيود على مجالات معينة، مثل الأعداد الحقيقية أو الصحيحة، مباشرةً ضمن نصوص القواعد. هذا يدمج قوة البرمجة المنطقية مع قدرة حل القيود، مما يتيح التعبير عن وحل المشكلات التي تتضمن علاقات بين المتغيرات تخضع لقيود معينة.
انظر أيضا
عدل- هيكل هيربراند
- البرمجة المنطقية
- النفي كفشل
- بناء الجملة والدلالات في لغة البرولوج
مراجع
عدل- ^ ا ب Ceri, Gottlob & Tanca 1989، صفحة 146.
- ^ Eisner, Jason; Filardo, Nathaniel W. (2011). "Dyna: Extending Datalog for Modern AI". In de Moor, Oege; Gottlob, Georg; Furche, Tim; Sellers, Andrew (eds.). Datalog Reloaded, First International Workshop, Datalog 2010, Oxford, UK, March 16-19, 2010. Lecture Notes in Computer Science (بالإنجليزية). Berlin, Heidelberg: Springer. Vol. 6702. pp. 181–220. DOI:10.1007/978-3-642-24206-9_11. ISBN:978-3-642-24206-9. Archived from the original on 2023-12-16.
- ^ van Emden، M. H.؛ Kowalski، R. A. (1 أكتوبر 1976). "The Semantics of Predicate Logic as a Programming Language". Journal of the ACM. ج. 23 ع. 4: 733–742. DOI:10.1145/321978.321991. ISSN:0004-5411. S2CID:11048276.
- ^ Ceri, Gottlob & Tanca 1989، صفحة 149.
- ^ Ceri, Gottlob & Tanca 1989، صفحة 150.
- ^ Abiteboul، Serge (1996). Foundations of databases. Addison-Wesley. ISBN:0-201-53771-0. OCLC:247979782.
- ^ Khamis، Mahmoud Abo؛ Ngo، Hung Q.؛ Pichler، Reinhard؛ Suciu، Dan؛ Wang، Yisu Remy (1 فبراير 2023). "Convergence of Datalog over (Pre-) Semirings". arXiv:2105.14435 [cs.DB].
- ^ Abiteboul 1996، صفحة 299.
- ^ Halevy، Alon Y.؛ Mumick، Inderpal Singh؛ Sagiv، Yehoshua؛ Shmueli، Oded (1 سبتمبر 2001). "Static analysis in datalog extensions". Journal of the ACM. ج. 48 ع. 5: 971–1012. DOI:10.1145/502102.502104. ISSN:0004-5411. S2CID:18868009.
- ^ Leone, N; Rullo, P (1 Jan 1992). "Safe computation of the well-founded semantics of datalog queries". Information Systems (بالإنجليزية). 17 (1): 17–31. DOI:10.1016/0306-4379(92)90003-6. ISSN:0306-4379.
- ^ Gelfond، Michael؛ Lifschitz، Vladimir (1988). "The Stable Model Semantics for Logic Programming". في Kowalski, Robert؛ Bowen, Kenneth (المحررون). Proceedings of International Logic Programming Conference and Symposium. MIT Press. ص. 1070–1080. مؤرشف من الأصل في 2022-08-02.
- ^ Kaminski، Mark؛ Grau، Bernardo Cuenca؛ Kostylev، Egor V.؛ Motik، Boris؛ Horrocks، Ian (12 نوفمبر 2017). "Foundations of Declarative Data Analysis Using Limit Datalog Programs". arXiv:1705.06927 [cs.AI].
- ^ Grau، Bernardo Cuenca؛ Horrocks، Ian؛ Kaminski، Mark؛ Kostylev، Egor V.؛ Motik، Boris (25 فبراير 2020). "Limit Datalog: A Declarative Query Language for Data Analysis". ACM SIGMOD Record. ج. 48 ع. 4: 6–17. DOI:10.1145/3385658.3385660. ISSN:0163-5808. S2CID:211520719.