البرمجة المنطقية
البرمجة المنطقية هي نموذج برمجة وقاعدة بيانات وتمثيل المعرفة يعتمد على المنطق الرسمي . البرنامج المنطقي هو مجموعة من الجمل في شكل منطقي، تمثل المعرفة حول بعض مجالات المشكلات. يتم إجراء الحساب من خلال تطبيق التفكير المنطقي على تلك المعرفة لحل المشكلات في المجال. تشمل عائلات لغات البرمجة المنطقية الرئيسية Prolog و Answer Set Programming (ASP) و Datalog . في كل هذه اللغات، تتم كتابة القواعد في شكل جمل :
A :- B1, ..., Bn.
وتقرأ كجملات إخبارية في شكل منطقي:
A if B1 and ... and Bn.
Aيُطلق على رأس القاعدة، و، ...، يُطلق عليه الجسم ، وتُسمى حرفيًا أو شرطيًا. عندما تكون n = 0، تُسمى القاعدة حقيقة وتُكتب في الشكل المبسط:
B1BnBi
A.
تحتوي الاستعلامات (أو الأهداف) على نفس بناء الجملة الخاص بمجموعات القواعد ويتم كتابتها عادةً في النموذج:
?- B1, ..., Bn.
في أبسط حالات جمل القرن (أو الجمل "المحددة")، تكون كل من A وB 1 و... وB n صيغًا ذرية من النموذج p(t 1 و... وt m )، حيث p هو رمز مسند يُسمِّي علاقة، مثل "الأمومة"، وt i هي مصطلحات تُسمِّي أشياء (أو أفرادًا). تتضمن المصطلحات كلًا من الرموز الثابتة، مثل "charles"، والمتغيرات، مثل X، التي تبدأ بحرف كبير.
على سبيل المثال، خذ في الاعتبار برنامج جملة Horn التالي:
mother_child ( elizabeth , charles ).
father_child ( charles , william ).
father_child ( charles , harry ).
parent_child ( X , Y ) :-
mother_child ( X , Y ).
parent_child ( X , Y ) :-
father_child ( X , Y ).
grandparent_child ( X , Y ) :-
parent_child ( X , Z ),
parent_child ( Z , Y ).
عند طرح استعلام، ينتج البرنامج إجابات. على سبيل المثال، بالنسبة للاستعلام ?- parent_child(X, william)، تكون الإجابة الوحيدة هي
X = تشارلز
يمكن طرح استعلامات مختلفة. على سبيل المثال، يمكن الاستعلام عن البرنامج لتوليد الأجداد وتوليد الأحفاد. ويمكن استخدامه أيضًا لتوليد جميع أزواج الأحفاد والأجداد، أو ببساطة للتحقق مما إذا كان زوج معين هو زوج من هذا القبيل:
الجد_الطفل ( X ، وليام ).
X = إليزابيث
؟- grandparent_child ( إليزابيث ، Y ).
Y = وليام ؛
Y = هاري .
؟- grandparent_child ( X , Y ).
X = إليزابيث
Y = وليام ؛
X = إليزابيث
Y = هاري .
?- grandparent_child ( william , harry ).
لا
?- grandparent_child ( elizabeth , harry ).
نعم
على الرغم من أن برامج منطق جملة هورن هي برامج تورينج كاملة ، [1] [2] بالنسبة لمعظم التطبيقات العملية، يجب توسيع برامج جملة هورن لتشمل برامج المنطق "العادية" ذات الشروط السلبية. على سبيل المثال، يستخدم تعريف الشقيق شرطًا سلبيًا، حيث يتم تعريف المسند = بواسطة الجملة X = X:
الأخ ( X ، Y ) :-
الوالد_الطفل ( Z ، X )،
الوالد_الطفل ( Z ، Y )،
ليس ( X = Y ).
تتمتع لغات البرمجة المنطقية التي تتضمن شروطًا سلبية بقدرات تمثيل المعرفة للمنطق غير الرتيب .
في ASP وDatalog، تحتوي البرامج المنطقية على قراءة إعلانية فقط ، ويتم تنفيذها عن طريق إجراء إثبات أو مولد نموذج لا يُقصد التحكم في سلوكه بواسطة المبرمج. ومع ذلك، في عائلة لغات Prolog، تحتوي البرامج المنطقية أيضًا على تفسير إجرائي كإجراءات تقليل الهدف. من وجهة النظر هذه، يُفهم البند A :- B 1 ,...,B n على أنه:
- حل
A، حل ، و... وحل .B1Bn
الشروط السلبية في أجسام البنود لها أيضًا تفسير إجرائي، يُعرف بالنفي بسبب الفشل : يُعتبر الحرفي السلبي not Bصحيحًا إذا وفقط إذا Bفشل الحرفي الإيجابي في الصحة.
كان الكثير من الأبحاث في مجال البرمجة المنطقية معنيًا بمحاولة تطوير دلالات منطقية للنفي باعتباره فشلًا وتطوير دلالات أخرى وتنفيذات أخرى للنفي. كانت هذه التطورات مهمة بدورها لدعم تطوير الأساليب الرسمية للتحقق من البرامج القائمة على المنطق وتحويل البرامج .
تاريخ
إن استخدام المنطق الرياضي لتمثيل وتنفيذ برامج الكمبيوتر هو أيضًا سمة من سمات حساب لامدا ، الذي طوره ألونسو تشرش في ثلاثينيات القرن العشرين. ومع ذلك، فإن أول اقتراح لاستخدام الشكل الشرطي للمنطق لتمثيل برامج الكمبيوتر قدمه كورديل جرين . [3] استخدم هذا بديهية لمجموعة فرعية من لغة ليسب ، جنبًا إلى جنب مع تمثيل لعلاقة الإدخال والإخراج، لحساب العلاقة من خلال محاكاة تنفيذ البرنامج في ليسب. من ناحية أخرى، استخدم فوستر وإلكوك في Absys مزيجًا من المعادلات وحساب لامدا في لغة برمجة تأكيدية لا تضع أي قيود على الترتيب الذي يتم به تنفيذ العمليات. [4]
يمكن إرجاع البرمجة المنطقية، بتركيبها النحوي الحالي من الحقائق والقواعد، إلى المناقشات التي دارت في أواخر الستينيات وأوائل السبعينيات حول التمثيلات التقريرية مقابل التمثيلات الإجرائية للمعرفة في الذكاء الاصطناعي . كان أنصار التمثيلات التقريرية يعملون بشكل ملحوظ في جامعة ستانفورد ، بالاشتراك مع جون مكارثي وبرتراند رافائيل وكورديل جرين، وفي إدنبرة ، مع جون آلان روبنسون (زائر أكاديمي من جامعة سيراكيوز ) وبات هايز وروبرت كوالسكي . كان أنصار التمثيلات الإجرائية متمركزين بشكل أساسي في معهد ماساتشوستس للتكنولوجيا ، تحت قيادة مارفن مينسكي وسيمور بابيرت . [5]
على الرغم من أنها كانت مبنية على طرق إثبات المنطق، إلا أن Planner ، التي طورها كارل هيويت في معهد ماساتشوستس للتكنولوجيا، كانت أول لغة تظهر ضمن هذا النموذج الإجرائي. [6] تميزت Planner باستدعاء موجه للأنماط للخطط الإجرائية من الأهداف (أي تقليل الهدف أو التسلسل العكسي ) ومن التأكيدات (أي التسلسل الأمامي ). كان التنفيذ الأكثر تأثيرًا لـ Planner هو المجموعة الفرعية من Planner، والتي تسمى Micro-Planner، والتي نفذها جيري سوسمان ويوجين شارنياك وتيري وينوجراد . استخدم وينوجراد Micro-Planner لتنفيذ برنامج فهم اللغة الطبيعية الرائد SHRDLU . [7] من أجل الكفاءة، استخدم Planner بنية تحكم رجوعية بحيث لا يتعين تخزين سوى مسار حسابي واحد ممكن في كل مرة. أدى Planner إلى ظهور لغات البرمجة QA4 ، [8] Popler، [9] Conniver، [10] QLISP، [11] ولغة Ether المتزامنة. [12]
حاول هايز وكوالسكي في إدنبرة التوفيق بين النهج التصريحي القائم على المنطق لتمثيل المعرفة والنهج الإجرائي لبلاني. طور هايز (1973) لغة معادلة، جولوكس، حيث يمكن الحصول على إجراءات مختلفة عن طريق تغيير سلوك مُثبت النظرية. [13]
في غضون ذلك، كان آلان كولميراور في مرسيليا يعمل على فهم اللغة الطبيعية ، باستخدام المنطق لتمثيل الدلالات واستخدام الدقة للإجابة على الأسئلة. خلال صيف عام 1971، دعا كولميراور كوالسكي إلى مرسيليا، واكتشفا معًا أنه يمكن استخدام الشكل الشرطي للمنطق لتمثيل القواعد النحوية الرسمية وأنه يمكن استخدام مثبتات نظرية الدقة للتحليل. لاحظوا أن بعض مثبتات النظرية، مثل الدقة الفائقة، [14] تتصرف كمحللات من أسفل إلى أعلى والبعض الآخر، مثل SL resolution (1971) [15] تتصرف كمحللات من أعلى إلى أسفل.
في صيف عام 1972 التالي، عمل كوالسكي مرة أخرى مع كولميراور على تطوير التفسير الإجرائي للدلالات في شكل جملة. كما أصبح من الواضح أن مثل هذه الجمل يمكن تقييدها بجمل محددة أو جمل هورن ، وأن حل SL يمكن تقييده (وتعميمه) على حل SLD . تم وصف تفسير كوالسكي الإجرائي وSLD في مذكرة عام 1973، نُشرت عام 1974. [16]
استخدم كولميراور مع فيليب روسيل التفسير الإجرائي كأساس لـ Prolog، والذي تم تنفيذه في صيف وخريف عام 1972. كان أول برنامج Prolog، والذي تمت كتابته أيضًا في عام 1972 وتم تنفيذه في مرسيليا، عبارة عن نظام فرنسي للإجابة على الأسئلة. اكتسب استخدام Prolog كلغة برمجة عملية زخمًا كبيرًا من خلال تطوير المترجم بواسطة David HD Warren في إدنبرة عام 1977. أظهرت التجارب أن Edinburgh Prolog يمكن أن تنافس سرعة معالجة لغات البرمجة الرمزية الأخرى مثل Lisp . [17] أصبح Edinburgh Prolog هو المعيار الفعلي وأثر بشدة على تعريف معيار ISO Prolog.
اكتسبت البرمجة المنطقية اهتمامًا دوليًا خلال ثمانينيات القرن العشرين، عندما اختارتها وزارة التجارة والصناعة الدولية اليابانية لتطوير برنامج مشروع أنظمة الكمبيوتر من الجيل الخامس (FGCS). كان هدف مشروع FGCS هو استخدام البرمجة المنطقية لتطوير تطبيقات الذكاء الاصطناعي المتقدمة على أجهزة الكمبيوتر المتوازية الضخمة . على الرغم من أن المشروع استكشف في البداية استخدام Prolog، إلا أنه تبنى لاحقًا استخدام البرمجة المنطقية المتزامنة ، لأنه كان أقرب إلى بنية كمبيوتر FGCS.
ومع ذلك، فإن ميزة الاختيار الملتزم للبرمجة المنطقية المتزامنة تداخلت مع الدلالات المنطقية للغة [18] ومع ملاءمتها لتمثيل المعرفة وتطبيقات حل المشكلات. وعلاوة على ذلك، فشلت أنظمة الكمبيوتر المتوازية التي تم تطويرها في المشروع في التنافس مع التطورات الجارية في تطوير أجهزة كمبيوتر أكثر تقليدية للأغراض العامة. وقد أدت هاتان المشكلتان معًا إلى فشل مشروع FGCS في تحقيق أهدافه. وانخفض الاهتمام بكل من البرمجة المنطقية والذكاء الاصطناعي على مستوى العالم. [19]
في غضون ذلك، استمرت مناهج البرمجة المنطقية الأكثر تصريحية، بما في ذلك تلك القائمة على استخدام Prolog، في إحراز تقدم مستقل عن مشروع FGCS. على وجه الخصوص، على الرغم من تطوير Prolog للجمع بين التمثيلات التصريحية والإجرائية للمعرفة، إلا أن التفسير التصريحي البحت لبرامج المنطق أصبح محورًا للتطبيقات في مجال قواعد البيانات الاستنتاجية . أصبح العمل في هذا المجال بارزًا حوالي عام 1977، عندما نظم هيرفي جالير وجاك مينكر ورشة عمل حول المنطق وقواعد البيانات في تولوز. [20] تمت إعادة تسمية المجال في النهاية باسم Datalog .
وقد اكتسب هذا التركيز على القراءة المنطقية التصريحية للبرامج المنطقية زخمًا إضافيًا من خلال تطوير برمجة المنطق المقيد في ثمانينيات القرن العشرين وبرمجة مجموعة الإجابات في تسعينيات القرن العشرين. كما تلقى أيضًا تأكيدًا متجددًا في التطبيقات الحديثة لـ Prolog [21]
تأسست جمعية البرمجة المنطقية (ALP) في عام 1986 للترويج للبرمجة المنطقية. وكانت مجلتها الرسمية حتى عام 2000 هي مجلة البرمجة المنطقية . وكان رئيس تحريرها المؤسس هو جيه آلان روبنسون . [22] وفي عام 2001، تمت إعادة تسمية المجلة إلى مجلة البرمجة المنطقية والجبرية ، وأصبحت المجلة الرسمية لجمعية البرمجة المنطقية نظرية وممارسة البرمجة المنطقية ، التي نشرتها مطبعة جامعة كامبريدج .
المفاهيم
تتمتع برامج المنطق بتنوع غني من الدلالات وطرق حل المشكلات، فضلاً عن مجموعة واسعة من التطبيقات في البرمجة وقواعد البيانات وتمثيل المعرفة وحل المشكلات.
الخوارزمية = المنطق + التحكم
التفسير الإجرائي للبرامج المنطقية، والذي يستخدم الاستدلال العكسي لتقليص الأهداف إلى أهداف فرعية، هو حالة خاصة لاستخدام استراتيجية حل المشكلات للتحكم في استخدام التمثيل المنطقي التصريحي للمعرفة للحصول على سلوك الخوارزمية . وبشكل عام، يمكن تطبيق استراتيجيات مختلفة لحل المشكلات على نفس التمثيل المنطقي للحصول على خوارزميات مختلفة. وبدلاً من ذلك، يمكن الحصول على خوارزميات مختلفة باستخدام استراتيجية معينة لحل المشكلات باستخدام تمثيلات منطقية مختلفة. [23]
الاستراتيجيتان الرئيسيتان لحل المشكلات هما التفكير الرجعي (تقليص الهدف) والتفكير التقدمي ، والمعروفان أيضًا باسم التفكير من أعلى إلى أسفل ومن أسفل إلى أعلى، على التوالي.
في الحالة البسيطة لبرنامج عبارة هورن الاقتراحية وهدف ذري على مستوى أعلى، يحدد الاستدلال العكسي شجرة و-أو ، والتي تشكل مساحة البحث لحل الهدف. الهدف على مستوى أعلى هو جذر الشجرة. بالنظر إلى أي عقدة في الشجرة وأي عبارة يتطابق رأسها مع العقدة، توجد مجموعة من العقد الفرعية المقابلة للأهداف الفرعية في نص العبارة. يتم تجميع هذه العقد الفرعية معًا بواسطة "و". يتم تجميع المجموعات البديلة من الأبناء المقابلة للطرق البديلة لحل العقدة معًا بواسطة "أو".
يمكن استخدام أي استراتيجية بحث للبحث في هذه المساحة. يستخدم Prolog استراتيجية تسلسلية، حيث يتم النظر في بديل واحد وهدف فرعي واحد فقط في كل مرة. على سبيل المثال، يمكن حل الأهداف الفرعية بالتوازي، ويمكن أيضًا تجربة البنود بالتوازي. تسمى الاستراتيجية الأولىوالاستراتيجية الثانية تسمى بالتوازيأو بالتوازي . كما أن استراتيجيات البحث الأخرى، مثل التتبع الذكي،[24]أو البحث الأفضل أولاً لإيجاد الحل الأمثل،[25]ممكنة أيضًا.
في الحالة الأكثر عمومية وغير القائمة على القضايا، حيث يمكن للأهداف الفرعية أن تشترك في المتغيرات، يمكن استخدام استراتيجيات أخرى، مثل اختيار الهدف الفرعي الذي يتم تمثيله بشكل أكبر أو الذي يتم تمثيله بشكل كافٍ بحيث يتم تطبيق إجراء واحد فقط. [26] تُستخدم مثل هذه الاستراتيجيات، على سبيل المثال، في البرمجة المنطقية المتزامنة .
في أغلب الحالات، يكون الاستدلال العكسي من الاستعلام أو الهدف أكثر كفاءة من الاستدلال الأمامي. ولكن في بعض الأحيان، مع برمجة Datalog وAnswer Set، قد لا يكون هناك استعلام منفصل عن مجموعة البنود ككل، ومن ثم فإن توليد كل الحقائق التي يمكن استخلاصها من البنود يعد استراتيجية معقولة لحل المشكلات. إليك مثال آخر، حيث يتفوق الاستدلال الأمامي على الاستدلال العكسي في مهمة حسابية أكثر تقليدية، حيث يكون الهدف ?- fibonacci(n, Result)هو العثور على رقم فيبوناتشي رقم n :
فيبوناتشي ( 0 , 0 ).
فيبوناتشي ( 1 ، 1 ).
فيبوناتشي ( N ، النتيجة ) :-
N > 1 ،
N1 هو N - 1 ،
N2 هو N - 2 ،
فيبوناتشي ( N1 ، F1 )،
فيبوناتشي ( N2 ، F2 )،
النتيجة هي F1 + F2 .
هنا تمثل العلاقة fibonacci(N, M)الدالة fibonacci(N) = M، والمسند N is Expressionهو تدوين برولوجي للمسند الذي يُنشئ المتغير Nإلى قيمة Expression.
نظرًا لهدف حساب عدد فيبوناتشي n، فإن التفكير العكسي يقلل الهدف إلى الهدفين الفرعيين المتمثلين في حساب أعداد فيبوناتشي n-1 وn-2. إنه يقلل الهدف الفرعي المتمثل في حساب عدد فيبوناتشي n-1 إلى الهدفين الفرعيين المتمثلين في حساب أعداد فيبوناتشي n-2 وn-3، مما يؤدي إلى حساب عدد فيبوناتشي n-2 بشكل زائد. تستمر هذه العملية المتمثلة في تقليل هدف فرعي واحد من فيبوناتشي إلى هدفين فرعيين من فيبوناتشي حتى تصل إلى الرقمين 0 و1. تعقيدها من الدرجة 2 n . على النقيض من ذلك، يولد التفكير الأمامي تسلسل أعداد فيبوناتشي، بدءًا من 0 و1 دون أي إعادة حساب، وتعقيدها خطي بالنسبة إلى n.
لا يمكن لـ Prolog إجراء الاستدلال الأمامي بشكل مباشر. لكنه يستطيع تحقيق تأثير الاستدلال الأمامي في سياق الاستدلال الخلفي عن طريق الجدولة : يتم الاحتفاظ بالأهداف الفرعية في جدول، جنبًا إلى جنب مع حلولها. إذا تم مواجهة هدف فرعي مرة أخرى، يتم حله مباشرة باستخدام الحلول الموجودة بالفعل في الجدول، بدلاً من إعادة حل الأهداف الفرعية بشكل زائد عن الحاجة. [27]
العلاقة مع البرمجة الوظيفية
يمكن اعتبار البرمجة المنطقية تعميمًا للبرمجة الوظيفية، حيث تكون الوظائف حالة خاصة للعلاقات. [28] على سبيل المثال، يمكن تمثيل الدالة، mother(X) = Y، (كل X له أم Y واحدة فقط) بالعلاقة mother(X, Y). في هذا الصدد، تشبه البرامج المنطقية قواعد البيانات العلائقية ، والتي تمثل أيضًا الوظائف كعلاقات.
بالمقارنة مع بناء الجملة العلائقية، فإن بناء الجملة الوظيفية أكثر إحكاما بالنسبة للوظائف المتداخلة. على سبيل المثال، في بناء الجملة الوظيفية، يمكن كتابة تعريف الجدة الأمومية في الشكل المتداخل:
الجدة_الأمية ( X ) = الأم ( الأم ( X )).
يجب كتابة نفس التعريف في التدوين العلائقي في النموذج المسطح غير المتداخل:
الجدة_الأمية ( X ، Y ) :- الأم ( X ، Z )، الأم ( Z ، Y ).
ومع ذلك، يمكن اعتبار بناء الجملة المتداخل بمثابة حل لبنية الجملة غير المتداخلة. على سبيل المثال، يحول برنامج Ciao Prolog بناء الجملة الوظيفية إلى شكل علائقي وينفذ برنامج المنطق الناتج باستخدام استراتيجية التنفيذ القياسية في Prolog. [29] وعلاوة على ذلك، يمكن استخدام نفس التحويل لتنفيذ العلاقات المتداخلة غير الوظيفية. على سبيل المثال:
الجد ( X ) := الوالد ( الوالد ( X )).
الوالد ( X ) := الأم ( X ).
الوالد ( X ) := الأب ( X ).
الأم ( تشارلز ) := إليزابيث .
الأب ( تشارلز ) := فيليب .
الأم ( هاري ) := ديانا .
الأب ( هاري ) := تشارلز .
؟- الجد ( X ، Y ).
X = هاري ،
Y = إليزابيث .
X = هاري ،
Y = فيليب .
العلاقة مع البرمجة العلائقية
تم استخدام مصطلح البرمجة العلائقية لتغطية مجموعة متنوعة من لغات البرمجة التي تعامل الدوال كحالة خاصة من العلاقات. بعض هذه اللغات، مثل miniKanren [28] والبرمجة الخطية العلائقية [30] هي لغات برمجة منطقية بالمعنى المقصود في هذه المقالة.
ومع ذلك، فإن لغة العلاقات RML هي لغة برمجة إلزامية [31] حيث أن بنيتها الأساسية هي عبارة عن تعبير علاقاتي، وهو مشابه للتعبير في منطق المسند من الدرجة الأولى.
تعتمد لغات البرمجة العلائقية الأخرى على حساب العلائقية [32] أو الجبر العلائقي. [33]
دلالات برامج جملة القرن
عند النظر إلى الأمر من منظور منطقي بحت، هناك طريقتان لدلالات التصريح لبرامج منطق جملة هورن: الطريقة الأولى هي دلالات النتيجة المنطقية الأصلية ، والتي تفهم حل هدف ما على أنه يُظهر أن الهدف هو نظرية صحيحة في جميع نماذج البرنامج.
في هذا النهج، تكون الحوسبة إثباتًا للنظرية في المنطق من الدرجة الأولى ؛ وكل من الاستدلال العكسي ، كما هو الحال في حل SLD، والاستدلال الأمامي ، كما هو الحال في الدقة الفائقة، هي طرق صحيحة وكاملة لإثبات النظرية. في بعض الأحيان، يُنظر إلى مثل هذه الطرق لإثبات النظرية أيضًا على أنها توفر دلالات نظرية إثبات منفصلة (أو تشغيلية) لبرامج المنطق. ولكن من وجهة نظر منطقية، فهي طرق إثبات، وليست دلالات.
النهج الآخر للدلالات التصريحية لبرامج جمل هورن هو دلالات قابلية الإشباع ، والتي تفهم حل هدف ما على أنه إظهار أن الهدف صحيح (أو مُرضٍ) في نموذج مقصود (أو قياسي) للبرنامج. بالنسبة لبرامج جمل هورن، يوجد دائمًا مثل هذا النموذج القياسي: إنه النموذج الأدنى الفريد للبرنامج.
من الناحية غير الرسمية، النموذج الأدنى هو نموذج لا يحتوي، عندما يُنظر إليه على أنه مجموعة من كل الحقائق (الخالية من المتغيرات) الصحيحة في النموذج، على مجموعة أصغر من الحقائق التي تعد أيضًا نموذجًا للبرنامج.
على سبيل المثال، تمثل الحقائق التالية النموذج الأدنى لمثال العلاقات الأسرية في مقدمة هذه المقالة. كل الحقائق الأخرى الخالية من المتغيرات خاطئة في النموذج:
الأم_الطفل ( إليزابيث ، تشارلز ) .
الأب_الطفل ( تشارلز ، وليام ) . الأب_الطفل ( تشارلز ، هاري ). الوالد_الطفل ( إليزابيث ، تشارلز ). الوالد_الطفل ( تشارلز ، وليام ). الوالد_الطفل ( تشارلز ، هاري ). الجد_الطفل ( إليزابيث ، وليام ). الجد_الطفل ( إليزابيث ، هاري ).
تحتوي دلالات قابلية الإرضاء أيضًا على توصيف بديل أكثر رياضية باعتباره النقطة الأقل ثباتًا للوظيفة التي تستخدم القواعد في البرنامج لاستخلاص حقائق جديدة من الحقائق الموجودة في خطوة واحدة من الاستدلال.
ومن الجدير بالملاحظة أن نفس أساليب حل المشكلات التي تعتمد على الاستدلال الأمامي والاستدلال الخلفي، والتي تم تطويرها في الأصل لدلالات العواقب المنطقية، يمكن تطبيقها على دلالات قابلية الإشباع بنفس القدر: حيث يعمل الاستدلال الأمامي على توليد النموذج الأدنى لبرنامج عبارة هورن، من خلال استنباط حقائق جديدة من الحقائق الموجودة، حتى لا يمكن توليد حقائق إضافية جديدة. أما الاستدلال الخلفي، الذي ينجح من خلال تقليص الهدف إلى أهداف فرعية، حتى يتم حل جميع الأهداف الفرعية بالحقائق، فيضمن أن الهدف صحيح في النموذج الأدنى، دون توليد النموذج صراحةً. [34]
يمكن رؤية الفرق بين الدلالتين التصريحيتين من خلال تعريفات الجمع والضرب في الحساب اللاحق ، والذي يمثل الأعداد الطبيعية 0, 1, 2, ...كتسلسل من الحدود من النموذج 0, s(0), s(s(0)), .... بشكل عام، يمثل المصطلح s(X)خليفة X,أي X + 1.فيما يلي التعريفات القياسية للجمع والضرب في التدوين الوظيفي:
س + 0 = س.
X + s(Y) = s(X + Y).
أي X + (Y + 1) = (X + Y) + 1
س × 0 = 0.
X × s(Y) = X + (X × Y).
أي X × (Y + 1) = X + (X × Y).
فيما يلي نفس التعريفات الخاصة ببرنامج المنطق، باستخدام add(X, Y, Z)to represent X + Y = Z,و multiply(X, Y, Z)to represent X × Y = Z:
أضف ( X ، 0 ، X ).
أضف ( X ، s ( Y )، s ( Z )) :- أضف ( X ، Y ، Z ).
اضرب ( X ، 0 ، 0 ).
اضرب ( X ، s ( Y )، W ) :- اضرب ( X ، Y ، Z )، أضف ( X ، Z ، W ).
تعطي الدلالتان التصريحيتان نفس الإجابات لنفس الاقترانات الكمية الوجودية لأهداف الجمع والضرب. على سبيل المثال، 2 × 2 = Xيحتوي على الحل X = 4؛ ويحتوي X × X = X + Xعلى حلين X = 0و X = 2:
؟- اضرب ( s ( s ( 0 ))، s ( s ( 0 ))، X .
X = s ( s ( s ( s ( 0 )))).
؟- اضرب ( X ، X ، Y )، وأضف ( X ، X ، Y ).
X = 0 ، Y = 0.
X = s ( s ( 0 ))، Y = s ( s ( s ( s ( 0 ))).
ومع ذلك، مع دلالات النتيجة المنطقية، توجد نماذج غير قياسية للبرنامج، حيث تكون قيمة add(s(s(0)), s(s(0)), s(s(s(s(s(0)))))),ie 2 + 2 = 5صحيحة على سبيل المثال. ولكن مع دلالات القابلية للإشباع، يوجد نموذج واحد فقط، وهو النموذج القياسي للحساب، حيث 2 + 2 = 5تكون قيمة ie خاطئة.
في كلتا الدلالتين، يفشل الهدف . ففي دلالات قابلية الإشباع، يعني فشل الهدف أن قيمة الحقيقة للهدف خاطئة. ولكن في دلالات النتيجة المنطقية، يعني الفشل أن قيمة الحقيقة للهدف غير معروفة.
?- add(s(s(0)), s(s(0)), s(s(s(s(s(0))))))
النفي كفشل
كان النفي كفشل (NAF)، كطريقة لاستنتاج أن الشرط السلبي not pصحيح من خلال إظهار أن الشرط الإيجابي pلا يتحقق، سمة من سمات أنظمة Prolog المبكرة. يُطلق على الامتداد الناتج لحل SLD اسم SLDNF . كما يوجد أيضًا بناء مشابه، يُسمى "thnot"، في Micro-Planner .
ظلت الدلالات المنطقية لـ NAF غير محلولة حتى أظهر كيث كلارك [35] أنه في ظل ظروف طبيعية معينة، فإن NAF هي طريقة فعالة وصحيحة (وأحيانًا كاملة) للتفكير باستخدام دلالات النتيجة المنطقية باستخدام إكمال برنامج منطقي في المنطق من الدرجة الأولى.
يعادل الإكمال تقريبًا ما يتعلق بمجموعة جميع جمل البرنامج التي لها نفس المسند في العنوان، على سبيل المثال:
A :- Body1....A :- Bodyk.
كتعريف للمسند:
A iff (Body1 or ... or Bodyk)
حيث iffتعني "إذا وفقط إذا". يتضمن الإكمال أيضًا بديهيات المساواة، والتي تتوافق مع التوحيد . أظهر كلارك أن البراهين التي تم إنشاؤها بواسطة SLDNF تشبه هيكليًا البراهين التي تم إنشاؤها بواسطة أسلوب الاستنتاج الطبيعي في التفكير مع إكمال البرنامج.
على سبيل المثال، خذ في الاعتبار البرنامج التالي:
should_receive_sanction ( X ، العقاب ) :-
is_a_thief ( X )،
وليس should_receive_sanction ( X ، إعادة التأهيل ).
يجب_أن_يتلقى_عقوبة ( X ، إعادة تأهيل ) :-
هو_لص ( X )،
هو_قاصر ( X )،
وليس هو_عنيف ( X ).
هل هو لص ( توم ).
ونظراً للهدف المتمثل في تحديد ما إذا كان توم يستحق عقوبة، فإن القاعدة الأولى تنجح في إظهار أن توم يستحق العقوبة:
?- should_receive_sanction ( tom , Sanction ).
العقوبة = العقاب .
هذا لأن توم لص، ولا يمكن إثبات أنه يجب إعادة تأهيل توم. لا يمكن إثبات أنه يجب إعادة تأهيل توم، لأنه لا يمكن إثبات أن توم قاصر.
ومع ذلك، إذا تلقينا معلومات جديدة تفيد بأن توم قاصر بالفعل، فإن الاستنتاج السابق القائل بأنه يجب معاقبة توم يتم استبداله بالاستنتاج الجديد القائل بأنه يجب إعادة تأهيل توم:
قاصر ( توم ).
?- should_receive_sanction ( tom , Sanction ).
العقوبة = إعادة التأهيل .
هذه الخاصية المتمثلة في سحب الاستنتاج عند إضافة معلومات جديدة تسمى عدم الرتابة، وهي تجعل البرمجة المنطقية منطقًا غير رتيب .
ولكن إذا قيل لنا الآن أن توم عنيف، فسوف نعود إلى الاستنتاج القائل بأنه يجب معاقبة توم:
عنيف ( توم ).
?- should_receive_sanction ( tom , Sanction ).
العقوبة = العقاب .
اكتمال هذا البرنامج هو:
should_receive_sanction ( X , Sanction ) إذا كانت
العقوبة = عقاب ، لص ( X )،
وليس يجب أن تتلقى عقوبة ( X ، إعادة تأهيل )
أو العقوبة = إعادة تأهيل ، لص ( X )، قاصر ( X )،
وليس عنيفًا ( X ).
هل هو لص ( X ) إذا كان X = توم .
هل هو قاصر ( X ) إذا كان X = توم .
هل هو عنيف ( X ) إذا كان X = توم .
ترتبط فكرة الإكمال ارتباطًا وثيقًا بدلالات التحديد التي وضعها جون مكارثي للاستدلال الافتراضي، [36] وافتراض العالم المغلق الذي وضعه راي رايتر . [37]
إن دلالات الإكمال للنفي هي دلالات نتيجة منطقية، حيث يوفر SLDNF تطبيقًا نظريًا للإثبات. ومع ذلك، في الثمانينيات، أصبحت دلالات قابلية الإرضاء أكثر شيوعًا لبرامج المنطق مع النفي. في دلالات قابلية الإرضاء، يتم تفسير النفي وفقًا للتعريف الكلاسيكي للحقيقة في نموذج مقصود أو قياسي لبرنامج المنطق.
في حالة البرامج المنطقية ذات الشروط السلبية، هناك نوعان رئيسيان من دلالات قابلية الإرضاء: في الدلالات القائمة على أسس سليمة ، يكون النموذج المقصود لبرنامج منطقي نموذجًا بسيطًا فريدًا من ثلاث قيم، والذي يوجد دائمًا. تعمم الدلالات القائمة على أسس سليمة مفهوم التعريف الاستقرائي في المنطق الرياضي. [38] تنفذ XSB Prolog [39] الدلالات القائمة على أسس سليمة باستخدام دقة SLG. [40]
في دلالات النموذج المستقر البديل ، قد لا توجد نماذج مقصودة أو قد توجد نماذج مقصودة متعددة، وكلها نماذج دنيا وثنائية القيمة. تدعم دلالات النموذج المستقر برمجة مجموعة الإجابات (ASP).
تنطبق كل من دلالات النموذج الراسخة والمستقرة على برامج المنطق التعسفي مع النفي. ومع ذلك، تتطابق الدلالتان في حالة برامج المنطق الطبقي . على سبيل المثال، فإن برنامج معاقبة اللصوص طبقي (محليًا)، وتحدد الدلالات الثلاث للبرنامج نفس النموذج المقصود:
يجب_أن_يتلقى_عقوبة ( توم ، عقوبة ).
هل هو_لص ( توم ).
هل هو_قاصر ( توم ).
هل هو_عنيف ( توم ).
كما ساهمت محاولات فهم النفي في البرمجة المنطقية في تطوير أطر الحجج المجردة . [41] في تفسير الحجج للنفي، فإن الحجة الأولية التي تقول إنه يجب معاقبة توم لأنه لص، تتعرض للهجوم من خلال الحجة القائلة بأنه يجب إعادة تأهيله لأنه قاصر. لكن حقيقة أن توم عنيف تقوض الحجة القائلة بأنه يجب إعادة تأهيل توم وتعيد الحجة القائلة بأنه يجب معاقبة توم.
البرمجة المعدنية
كانت البرمجة الفوقية ، حيث يتم التعامل مع البرامج كبيانات، بالفعل سمة من سمات تطبيقات Prolog المبكرة. [42] [43] على سبيل المثال، تضمنت عملية تنفيذ Edinburgh DEC10 لـ Prolog "مترجمًا ومُجمِّعًا، وكلاهما مكتوب في Prolog نفسها". [43] أبسط برنامج فوقي هو ما يسمى بالمترجم الفوقي " الأصلي ":
حل ( صحيح ).
حل (( ب ، ج )):- حل ( ب )، حل ( ج ).
حل ( أ ):- جملة ( أ ، ب )، حل ( ب ).
حيث يمثل true حرف عطف فارغ، و(B,C) هو مصطلح مركب يمثل حرف العطف B وC. تعني جملة المسند (A,B) وجود جملة من النموذج A :- B.
البرمجة الوصفية هي تطبيق للاستخدام الأكثر عمومية للغة ميتالوجية أو لغة ميتا لوصف لغة أخرى والتفكير فيها، تسمى لغة الكائن .
تسمح البرمجة المعدنية بدمج التمثيلات على مستوى الكائن والمستوى الميتا، كما هو الحال في اللغة الطبيعية. على سبيل المثال، في البرنامج التالي، attends(Person, Meeting)تظهر الصيغة الذرية كصيغة على مستوى الكائن، وكحجة للمسندات والرموز prohibited.approved.
محظور ( يحضر ( شخص ، اجتماع )) :-
غير ( معتمد ( يحضر ( شخص ، اجتماع ))).
should_receive_sanction ( شخص ، توبيخ ) :- يحضر ( شخص ، اجتماع )،
رفيع المستوى ( شخص )، محظور ( يحضر ( شخص ، اجتماع )).
should_receive_sanction ( شخص ، نفي ) :- يحضر ( شخص ، اجتماع )،
وضيع ( شخص )، محظور ( يحضر ( شخص ، اجتماع )).
تمت الموافقة ( يحضر ( أليس ، حفلة الشاي )).
يحضر ( مجنون ، حفلة الشاي ).
يحضر ( فأر الزغبة ، حفلة الشاي ).
مرتفع ( مجنون )
متواضع ( فأر زغبي )
?- should_receive_sanction ( X , Y ).
الشخص = mad_hatter ،
العقوبة = توبيخ .
الشخص = dormouse ،
العقوبة = النفي .
العلاقة معالفهم الحسابي التمثيلي للعقل
في كتابه الشهير "مقدمة في العلوم المعرفية"، [44] يدرج بول ثاجارد المنطق والقواعد كبديلين لنمذجة التفكير البشري. ويزعم أن القواعد، التي تأخذ شكل الشرط "إذا كان الفعل" "مشابهة جدًا" للشروط المنطقية، لكنها أبسط ولديها معقولية نفسية أكبر (صفحة 51). ومن بين الاختلافات الأخرى بين المنطق والقواعد، يزعم أن المنطق يستخدم الاستنتاج، لكن القواعد تستخدم البحث (صفحة 45) ويمكن استخدامها للتفكير إما للأمام أو للخلف (صفحة 47). يجب تفسير الجمل في المنطق على أنها صحيحة عالميًا ، لكن القواعد يمكن أن تكون افتراضية ، والتي تقبل الاستثناءات (صفحة 44).
ويذكر أن "الأنظمة القائمة على القواعد، على عكس المنطق، يمكنها بسهولة تمثيل المعلومات الاستراتيجية حول ما يجب القيام به" (صفحة 45). على سبيل المثال، "إذا كنت تريد العودة إلى المنزل لقضاء عطلة نهاية الأسبوع، ولديك أجرة حافلة، فيمكنك ركوب الحافلة". ولا يلاحظ أن نفس استراتيجية تقليص الهدف إلى أهداف فرعية يمكن تفسيرها، على غرار البرمجة المنطقية، على أنها تطبيق الاستدلال العكسي على شرط منطقي:
can_go ( أنت ، المنزل ) :- have ( أنت ، أجرة الحافلة )، catch ( أنت ، الحافلة ).
إن كل هذه الخصائص التي تتميز بها الأنظمة القائمة على القواعد ـ البحث، والاستدلال الأمامي والخلفي، والاستدلال الافتراضي، وتقليص الأهداف ـ تشكل أيضاً خصائص محددة للبرمجة المنطقية. وهذا يشير إلى استنتاج ثاجارد (صفحة 56) القائل بأن:
يتم وصف الكثير من المعرفة البشرية بطبيعة الحال من حيث القواعد، ويمكن صياغة العديد من أنواع التفكير مثل التخطيط من خلال أنظمة قائمة على القواعد.
ينطبق أيضًا على البرمجة المنطقية.
يقدم كيث ستينينج وميشيل فان لامبالجين في كتابهما "التفكير البشري والعلوم المعرفية" حججًا أخرى توضح كيف يمكن استخدام البرمجة المنطقية لنمذجة جوانب التفكير البشري. [45] يُظهران كيف يمكن استخدام الطابع غير الرتيب للبرامج المنطقية لشرح الأداء البشري في مجموعة متنوعة من المهام النفسية. كما يُظهران (صفحة 237) أن "الاستدلال في العالم المغلق في هيئة برمجة منطقية له تطبيق عصبي جذاب، على عكس المنطق الكلاسيكي".
في كتاب المعالجة الصحيحة للأحداث، [46] قام ميشيل فان لامبالجين وفريتز هام بالتحقيق في استخدام برمجة المنطق المقيد لترميز "المفاهيم الزمنية في اللغة الطبيعية من خلال النظر في الطريقة التي يبني بها البشر الوقت".
تمثيل المعرفة
كان استخدام المنطق لتمثيل المعرفة الإجرائية والمعلومات الاستراتيجية أحد الأهداف الرئيسية التي ساهمت في التطوير المبكر للبرمجة المنطقية. علاوة على ذلك، لا يزال يمثل سمة مهمة لعائلة Prolog من لغات البرمجة المنطقية اليوم. ومع ذلك، تركز العديد من تطبيقات البرمجة المنطقية، بما في ذلك تطبيقات Prolog، بشكل متزايد على استخدام المنطق لتمثيل المعرفة التصريحية البحتة. تتضمن هذه التطبيقات كل من تمثيل المعرفة العامة السليمة وتمثيل الخبرة الخاصة بالمجال .
يتضمن الحس السليم المعرفة حول السبب والنتيجة، كما هو مُصاغ رسميًا، على سبيل المثال، في حساب الموقف وحساب الحدث ولغات الفعل . فيما يلي مثال مبسط يوضح السمات الرئيسية لمثل هذه الصياغات. تنص الجملة الأولى على أن الحقيقة تسري فورًا بعد أن يبدأ الحدث (أو يتسبب في) حدوث الحقيقة. الجملة الثانية هي بديهية إطارية ، تنص على أن الحقيقة التي تسري في وقت ما تستمر في الصمود في المرة التالية ما لم يتم إنهاؤها بحدث يحدث في ذلك الوقت. تسمح هذه الصيغة بحدوث أكثر من حدث في نفس الوقت:
يحمل ( الحقيقة ، الوقت2 ) : -
يحدث ( الحدث ، الوقت1 )،
الوقت2 هو الوقت1 + 1 ،
يبدأ ( الحدث ، الحقيقة ).
يحتفظ بـ ( الحقيقة ، الوقت2 ) : -
يحدث ( الحدث ، الوقت1 )،
الوقت2 هو الوقت1 + 1 ،
يحتفظ بـ ( الحقيقة ، الوقت1 )،
وليس ( منتهيًا ( الحقيقة ، الوقت1 )).
منتهية ( حقيقة ، وقت ) : -
يحدث ( حدث ، وقت )،
وينتهي ( حدث ، حقيقة ).
فيما يلي holdsمسند فوقي، مشابه لما solveسبق. ومع ذلك، في حين أن solveله وسيطة واحدة فقط، تنطبق على الجمل العامة، فإن الوسيطة الأولى لـ holdsهي حقيقة والحجة الثانية هي وقت (أو حالة). holds(Fact, Time)تعبر الصيغة الذرية عن أن الحدث Factيحدث عند Time. وتسمى هذه الحقائق المتغيرة بمرور الوقت أيضًا بالأحداث المتتابعة . تعبر الصيغة الذرية happens(Event, Time)عن أن الحدث يحدث عند Time.
يوضح المثال التالي كيف يمكن استخدام هذه البنود للتفكير في السببية في عالم مكعبات الألعاب . هنا، في الحالة الأولية في الوقت 0، توجد كتلة خضراء على طاولة وكتلة حمراء مكدسة على الكتلة الخضراء (مثل إشارة المرور). في الوقت 0، يتم نقل الكتلة الحمراء إلى الطاولة. في الوقت 1، يتم نقل الكتلة الخضراء إلى الكتلة الحمراء. يؤدي نقل كائن إلى مكان ما إلى إنهاء حقيقة أن الكائن موجود في أي مكان، ويبدأ حقيقة أن الكائن موجود في المكان الذي يتم نقله إليه:
يحتفظ ( على ( الكتلة الخضراء ، الجدول )، 0 ).
يحتفظ ( على ( الكتلة الحمراء ، الكتلة الخضراء )، 0 ).
يحدث ( نقل ( كتلة حمراء ، جدول )، 0 ).
يحدث ( نقل ( كتلة خضراء ، كتلة حمراء )، 1 ).
يبدأ ( نقل ( كائن ، مكان )، على ( كائن ، مكان )).
ينهي ( نقل ( كائن ، مكان2 )، على ( كائن ، مكان1 )).
؟- يحمل ( الحقيقة ، الوقت ).
الحقيقة = على ( الكتلة الخضراء ، الجدول )،
الوقت = 0.
الحقيقة = على ( الكتلة الحمراء ، الكتلة الخضراء )،
الوقت = 0.
الحقيقة = على ( الكتلة الخضراء ، الجدول )،
الوقت = 1.
الحقيقة = على ( الكتلة الحمراء ، الجدول )،
الوقت = 1.
الحقيقة = على ( الكتلة الخضراء ، الكتلة الحمراء )،
الوقت = 2.
الحقيقة = على ( الكتلة الحمراء ، الجدول )،
الوقت = 2.
إن الاستدلال الاستشرافي والاستدلال الرجعي يولدان نفس الإجابات على الهدف holds(Fact, Time). ولكن الاستدلال الاستشرافي يولد إجابات متدرجة في ترتيب زمني، والاستدلال الرجعي يولد إجابات رجعية ، كما هو الحال في الاستخدام المحدد للمجال للانحدار في حساب الموقف . [47]
أثبتت البرمجة المنطقية أيضًا أنها مفيدة لتمثيل الخبرة الخاصة بمجال معين في أنظمة الخبراء . [48] لكن الخبرة البشرية، مثل الفطرة السليمة للأغراض العامة، تكون ضمنية وضمنية في الغالب ، وغالبًا ما يكون من الصعب تمثيل مثل هذه المعرفة الضمنية في قواعد صريحة. ومع ذلك، لا تنشأ هذه الصعوبة عندما تُستخدم البرامج المنطقية لتمثيل القواعد الصريحة الموجودة لمنظمة تجارية أو سلطة قانونية.
على سبيل المثال، فيما يلي تمثيل لنسخة مبسطة من الجملة الأولى من قانون الجنسية البريطانية، والتي تنص على أن الشخص الذي يولد في المملكة المتحدة يصبح مواطنًا بريطانيًا في وقت الولادة إذا كان أحد والديه مواطنًا بريطانيًا في وقت الولادة:
المبادرون ( الميلاد ( شخص )، المواطن ( شخص ، المملكة المتحدة )):-
وقت ( الميلاد ( شخص )، الوقت )،
مكان ( الميلاد ( شخص )، المملكة المتحدة )،
الوالد_الطفل ( شخص_آخر ، شخص )،
يحمل ( مواطن ( شخص_آخر ، المملكة المتحدة )، الوقت ).
تاريخيًا، كان تمثيل جزء كبير من قانون الجنسية البريطانية كبرنامج منطقي في الثمانينيات [49] "مؤثرًا بشكل كبير في تطوير التمثيلات الحسابية للتشريعات، مما يوضح كيف تمكن البرمجة المنطقية من التمثيلات الجذابة حدسيًا والتي يمكن نشرها مباشرة لتوليد الاستدلالات التلقائية". [50]
في الآونة الأخيرة، أصبح نظام PROLEG، [51] الذي بدأ في عام 2009 ويتكون من حوالي 2500 قاعدة واستثناء من القانون المدني وقواعد قضايا المحكمة العليا في اليابان، ربما أكبر قاعدة قواعد قانونية في العالم. [52]
المتغيرات والإضافات
برولوج
إن قاعدة حل SLD للاستدلال محايدة فيما يتعلق بالترتيب الذي يمكن به اختيار الأهداف الفرعية في نصوص البنود للحل. ومن أجل الكفاءة، يقيد Prolog هذا الترتيب بالترتيب الذي تُكتب به الأهداف الفرعية. كما أن SLD محايدة أيضًا فيما يتعلق باستراتيجية البحث في مساحة أدلة SLD. يبحث Prolog في هذه المساحة، من أعلى إلى أسفل، في العمق أولاً، ويجرب جملًا مختلفة لحل نفس الهدف (الفرعي) بالترتيب الذي تُكتب به الجمل.
تتميز استراتيجية البحث هذه بإمكانية تمثيل الفرع الحالي من الشجرة بكفاءة بواسطة مكدس . عندما يتم تقليص جملة الهدف في أعلى المكدس إلى جملة هدف جديدة، يتم دفع جملة الهدف الجديدة إلى أعلى المكدس. عندما لا يمكن حل الهدف الفرعي المحدد في جملة الهدف في أعلى المكدس، تتراجع استراتيجية البحث ، وتزيل جملة الهدف من أعلى المكدس، وتعيد محاولة حل الهدف الفرعي المحدد في جملة الهدف السابقة باستخدام الجملة التالية التي تطابق الهدف الفرعي المحدد.
يمكن تقييد التراجع باستخدام هدف فرعي يسمى cut ، مكتوبًا كـ !، والذي ينجح دائمًا ولكن لا يمكن التراجع عنه. يمكن استخدام Cut لتحسين الكفاءة، ولكن يمكن أن يتداخل أيضًا مع المعنى المنطقي للبنود. في العديد من الحالات، يمكن استبدال استخدام cut بالنفي كفشل. في الواقع، يمكن تعريف النفي كفشل في Prolog، باستخدام cut، مع أي حرف، على سبيل المثال fail ، يتحد مع رأس جملة no:
لا ( P ) :- P ، ! ، فشل .
لا ( P ).
يوفر Prolog ميزات أخرى، بالإضافة إلى cut، لا تحتوي على تفسير منطقي. وتشمل هذه الميزات المضمنة assert و retract لتحديث حالة البرنامج بشكل مدمر أثناء تنفيذ البرنامج.
على سبيل المثال، يمكن تنفيذ مثال عالم كتل الألعاب المذكور أعلاه بدون بديهيات الإطار باستخدام التغيير المدمر للحالة:
على ( الكتلة الخضراء ، الجدول ).
على ( الكتلة الحمراء ، الكتلة الخضراء ).
نقل ( الكائن ، مكان2 ) :-
التراجع ( على ( الكائن ، مكان1 ))،
التأكيد ( على ( الكائن ، مكان2 ).
يمكن حساب تسلسل أحداث النقل والمواقع الناتجة للكتل عن طريق تنفيذ الاستعلام:
?- نقل ( كتلة حمراء ، جدول )، نقل ( كتلة خضراء ، كتلة حمراء )، على ( كائن ، مكان ).
الكائن = كتلة حمراء ،
المكان = جدول .
الكائن = كتلة خضراء ،
المكان = كتلة حمراء .
تم تطوير العديد من امتدادات البرمجة المنطقية لتوفير إطار منطقي لمثل هذا التغيير المدمر للحالة. [53] [54] [55]
تم تسليط الضوء على النطاق الواسع من تطبيقات Prolog، سواء بشكل معزول أو بالاشتراك مع لغات أخرى، في كتاب عام Prolog، [21] الذي يحتفل بالذكرى السنوية الخمسين لـ Prolog في عام 2022.
ساهم Prolog أيضًا في تطوير لغات برمجة أخرى، بما في ذلك ALF ، وFril ، وGödel ، و Mercury ، و Oz ، و Ciao ، و Visual Prolog ، و XSB ، و λProlog .
برمجة المنطق المقيد
تجمع برمجة منطق القيود (CLP) بين برمجة منطق جمل Horn وحل القيود . وهي تعمل على توسيع جمل Horn من خلال السماح لبعض المسندات، المعلنة كسندات قيد، بالظهور كحرفيات في نص الجملة. لا يتم تعريف مسندات القيد بالحقائق والقواعد في البرنامج، ولكن يتم تعريفها مسبقًا بواسطة بعض الهياكل أو النظريات النظرية النموذجية الخاصة بالمجال.
من الناحية الإجرائية، يتم حل الأهداف الفرعية التي يتم تحديد مسنداتها بواسطة البرنامج عن طريق تقليل الهدف، كما هو الحال في البرمجة المنطقية العادية، ولكن يتم تبسيط القيود والتحقق من قابليتها للإرضاء بواسطة مُحلل قيود خاص بالمجال، والذي ينفذ دلالات مسندات القيود. يتم حل المشكلة الأولية عن طريق تقليلها إلى اقتران قابل للإرضاء من القيود.
ومن المثير للاهتمام أن النسخة الأولى من Prolog تضمنت بالفعل مسند قيد dif(term1, term2)، من أطروحة الدكتوراه التي قدمها فيليب روسيل عام 1972، والذي ينجح إذا كانت كل من حججه مصطلحات مختلفة، ولكنه يتأخر إذا كان أي من المصطلحين يحتوي على متغير. [52]
يمثل برنامج منطق القيد التالي قاعدة بيانات زمنية لعبة john'sللتاريخ كمدرس:
يُدرس ( جون ، أجهزة ، ت ) :- 1990 ≤ ت ، ت < 1999.
يُدرس ( جون ، برامج ، ت ) :- 1999 ≤ ت ، ت < 2005.
يُدرس ( جون ، منطق ، ت ) :- 2005 ≤ ت ، ت ≤ 2012.
الرتبة ( جون ، مُدرّس ، ت ) :- 1990 ≤ ت ، ت < 2010.
الرتبة ( جون ، أستاذ ، ت ) :- 2010 ≤ ت ، ت < 2014.
هنا ≤و <هي مسندات قيد، مع دلالاتها المقصودة المعتادة. تستفسر جملة الهدف التالية من قاعدة البيانات لمعرفة متى johnتم تدريس كل من logicو كان professor:
؟ -يدرس ( جون ، المنطق ، ت )، رتبة ( جون ، أستاذ ، ت ).
الحل
2010 ≤ T, T ≤ 2012
هو نتيجة لتبسيط القيود
2005 ≤ T, T ≤ 2012, 2010 ≤ T, T < 2014.
تم استخدام برمجة المنطق المقيد لحل المشكلات في مجالات مثل الهندسة المدنية والهندسة الميكانيكية والتحقق من الدوائر الرقمية والجدولة الزمنية الآلية ومراقبة الحركة الجوية والتمويل. وهي وثيقة الصلة ببرمجة المنطق الاستقرائي .
سجل البيانات
Datalog هي لغة تعريف قاعدة بيانات، تجمع بين عرض علائقي للبيانات، كما هو الحال في قواعد البيانات العلائقية ، وعرض منطقي، كما هو الحال في البرمجة المنطقية.
تستخدم قواعد البيانات العلائقية حساب التفاضل والتكامل العلائقي أو الجبر العلائقي، مع العمليات العلائقية ، مثل الاتحاد والتقاطع وفرق المجموعة والناتج الديكارتي لتحديد الاستعلامات التي تصل إلى قاعدة البيانات. يستخدم Datalog روابط منطقية، مثل أو و و وليس في أجسام القواعد لتحديد العلاقات كجزء من قاعدة البيانات نفسها.
تم التعرف في وقت مبكر من تطوير قواعد البيانات العلائقية على أن الاستعلامات المتكررة لا يمكن التعبير عنها إما في الجبر العلائقي أو حساب التفاضل والتكامل العلائقي، وأن هذا القصور يمكن علاجه من خلال تقديم عامل النقطة الأقل ثباتًا. [56] [57] على النقيض من ذلك، يمكن تعريف العلاقات المتكررة بشكل طبيعي من خلال القواعد في برامج المنطق، دون الحاجة إلى أي روابط منطقية أو عوامل تشغيل جديدة.
يختلف Datalog عن البرمجة المنطقية الأكثر عمومية من خلال وجود الثوابت والمتغيرات فقط كمصطلحات. علاوة على ذلك، فإن جميع الحقائق خالية من المتغيرات، والقواعد مقيدة، بحيث إذا تم تنفيذها من الأسفل إلى الأعلى، فإن الحقائق المشتقة تكون أيضًا خالية من المتغيرات.
على سبيل المثال، ضع في اعتبارك قاعدة بيانات العائلة:
mother_child ( elizabeth , charles ).
father_child ( charles , william ).
father_child ( charles , harry ).
parent_child ( X , Y ) :-
mother_child ( X , Y ).
parent_child ( X , Y ) :-
father_child ( X , Y ).
ancestor_descendant ( X , Y ) :-
parent_child ( X , X ).
ancestor_descendant ( X , Y ) :-
ancestor_descendant ( X , Z ),
ancestor_descendant ( Z , Y ).
يستمد التنفيذ من الأسفل إلى الأعلى المجموعة التالية من الحقائق الإضافية وينتهي:
parent_child ( إليزابيث ، تشارلز ).
parent_child ( تشارلز ، وليام ).
parent_child ( تشارلز ، هاري ).
سلف_الأسلاف ( إليزابيث ، تشارلز ).
سلف_الأسلاف ( تشارلز ، ويليام ).
سلف_الأسلاف ( تشارلز ، هاري ).
سلف_السلالة ( إليزابيث ، وليام ).
سلف_السلالة ( إليزابيث ، هاري ).
يؤدي التنفيذ من أعلى إلى أسفل إلى الحصول على نفس الإجابات على الاستعلام:
؟- السلف_الأسلاف ( X ، Y ).
ولكن بعد ذلك، يدخل في حلقة لا نهائية. ومع ذلك، فإن التنفيذ من أعلى إلى أسفل باستخدام الجدول يعطي نفس الإجابات وينتهي دون حلقة.
برمجة مجموعة الإجابات
مثل Datalog، فإن برمجة مجموعة الإجابات (ASP) ليست كاملة تورينج. علاوة على ذلك، بدلاً من فصل الأهداف (أو الاستعلامات) عن البرنامج المراد استخدامها في حل الأهداف، يعامل ASP البرنامج بأكمله كهدف، ويحل الهدف من خلال إنشاء نموذج مستقر يجعل الهدف صحيحًا. لهذا الغرض، يستخدم دلالات النموذج المستقر ، والتي بموجبها يمكن لبرنامج المنطق أن يحتوي على صفر أو نموذج واحد أو أكثر مقصود. على سبيل المثال، يمثل البرنامج التالي متغيرًا متدهورًا لمشكلة تلوين الخريطة لتلوين بلدين باللون الأحمر أو الأخضر:
الدولة ( أوقية ).
الدولة ( عز ).
مجاورة ( أوقية ، عز ).
اللون ( ج ، أحمر ) :- الدولة ( ج )، ليس ( اللون ( ج ، أخضر )).
اللون ( ج ، أخضر ) :- الدولة ( ج )، ليس ( اللون ( ج ، أحمر )).
المشكلة لها أربعة حلول ممثلة بأربعة نماذج مستقرة:
الدولة ( أوقية ). الدولة ( إيز ). المجاورة ( أوقية ، إيز ). اللون ( أوقية ، أحمر ). اللون ( إيز ، أحمر ).
الدولة ( أوقية ). الدولة ( إيز ). المجاورة ( أوقية ، إيز ). اللون ( أوقية ، أخضر ). اللون ( إيز ، أخضر ).
الدولة ( أوقية ). الدولة ( إيز ). المجاورة ( أوقية ، إيز ). اللون ( أوقية ، أحمر ). اللون ( إيز ، أخضر ).
الدولة ( أوقية ). الدولة ( إيز ). المجاورة ( أوقية ، إيز ). اللون ( أوقية ، أخضر ). اللون ( إيز ، أحمر ).
لتمثيل الإصدار القياسي لمشكلة تلوين الخريطة، نحتاج إلى إضافة قيد مفاده أنه لا يمكن تلوين دولتين متجاورتين بنفس اللون. في ASP، يمكن كتابة هذا القيد على هيئة جملة من النموذج:
:- الدولة ( C1 )، الدولة ( C2 )، المجاورة ( C1 ، C2 )، اللون ( C1 ، X )، اللون ( C2 ، X ).
مع إضافة هذا القيد، أصبحت المشكلة الآن لها حلين فقط:
الدولة ( أوقية ). الدولة ( إيز ). المجاورة ( أوقية ، إيز ). اللون ( أوقية ، أحمر ). اللون ( إيز ، أخضر ).
الدولة ( أوقية ). الدولة ( إيز ). المجاورة ( أوقية ، إيز ). اللون ( أوقية ، أخضر ). اللون ( إيز ، أحمر ).
إن إضافة قيود النموذج :- Body.تؤدي إلى إزالة النماذج التي Bodyيكون فيها الشرط صحيحًا.
من المربك أن القيود في ASP تختلف عن القيود في CLP . القيود في CLP هي مسندات تؤهل الإجابات على الاستعلامات (وحلول الأهداف). القيود في ASP هي جمل تلغي النماذج التي من شأنها أن تلبي الأهداف. القيود في ASP تشبه قيود النزاهة في قواعد البيانات.
يوضح هذا الجمع بين جمل البرمجة المنطقية العادية وجمل القيود منهجية التوليد والاختبار لحل المشكلات في ASP: تحدد الجمل العادية مساحة بحث للحلول الممكنة، وتقوم القيود بتصفية الحلول غير المرغوب فيها. [58]
تتم معظم تنفيذات ASP في خطوتين: أولاً، يقومون بإنشاء البرنامج بكل الطرق الممكنة، وتقليصه إلى برنامج منطقي تقريري (يُعرف بالتأريض ). ثم يقومون بتطبيق حل مشكلة منطقي تقريري، مثل خوارزمية DPLL أو حل SAT البولياني . ومع ذلك، تستخدم بعض التنفيذات، مثل s(CASP) [59] إجراءً موجهًا نحو الهدف، من أعلى إلى أسفل، يشبه حل SLD بدون تأريض.
برمجة المنطق الاستقرائي
تمتد برمجة المنطق الاستقرائي [60] (ALP)، مثل CLP، إلى برمجة المنطق العادي من خلال السماح لأجسام البنود باحتواء أحرف لا يتم تعريف مسنداتها بواسطة البنود. في ALP، يتم إعلان هذه المسندات على أنها قابلة للاستنتاج (أو قابلة للافتراض )، ويتم استخدامها كما هو الحال في الاستدلال الاستقرائي لشرح الملاحظات، أو بشكل عام لإضافة حقائق جديدة إلى البرنامج (كافتراضات) لحل الأهداف.
على سبيل المثال، لنفترض أن لدينا حالة أولية حيث يوجد كتلة حمراء على كتلة خضراء على جدول في الوقت 0:
يحتفظ ( على ( الكتلة الخضراء ، الجدول )، 0 ).
يحتفظ ( على ( الكتلة الحمراء ، الكتلة الخضراء )، 0 ).
لنفترض أن لدينا أيضًا الهدف:
?- يحمل ( على ( الكتلة الخضراء ، الكتلة الحمراء )، 3 )، يحمل ( على ( الكتلة الحمراء ، الجدول )، 3 ).
يمكن أن يمثل الهدف ملاحظة، وفي هذه الحالة يكون الحل عبارة عن تفسير للملاحظة. أو يمكن أن يمثل الهدف حالة مستقبلية مرغوبة، وفي هذه الحالة يكون الحل عبارة عن خطة لتحقيق الهدف. [61]
يمكننا استخدام قواعد السبب والنتيجة التي تم تقديمها سابقًا لحل الهدف، من خلال التعامل مع happensالمسند باعتباره قابلاً للاستنتاج:
يحمل ( الحقيقة ، الوقت2 ) : -
يحدث ( الحدث ، الوقت1 )،
الوقت2 هو الوقت1 + 1 ،
يبدأ ( الحدث ، الحقيقة ).
يحتفظ بـ ( الحقيقة ، الوقت2 ) : -
يحدث ( الحدث ، الوقت1 )،
الوقت2 هو الوقت1 + 1 ،
يحتفظ بـ ( الحقيقة ، الوقت1 )،
وليس ( منتهيًا ( الحقيقة ، الوقت1 )).
منتهية ( حقيقة ، وقت ) : -
يحدث ( حدث ، وقت )،
وينتهي ( حدث ، حقيقة ).
يبدأ ( نقل ( كائن ، مكان )، على ( كائن ، مكان )).
ينهي ( نقل ( كائن ، مكان2 )، على ( كائن ، مكان1 )).
يقوم ALP بحل الهدف من خلال التفكير بشكل عكسي وإضافة افتراضات إلى البرنامج لحل الأهداف الفرعية القابلة للاختزال. في هذه الحالة، هناك العديد من الحلول البديلة، بما في ذلك:
يحدث ( نقل ( كتلة حمراء ، جدول )، 0 ).
يحدث ( علامة ، 1 ).
يحدث ( نقل ( كتلة خضراء ، كتلة حمراء )، 2 ).
يحدث ( علامة ، 0 ).
يحدث ( نقل ( كتلة حمراء ، جدول )، 1 ).
يحدث ( نقل ( كتلة خضراء ، كتلة حمراء )، 2 ).
يحدث ( نقل ( كتلة حمراء ، جدول )، 0 ).
يحدث ( نقل ( كتلة خضراء ، كتلة حمراء )، 1 ).
يحدث ( علامة ، 2 ).
هذا tickحدث يشير إلى مرور الوقت دون البدء أو إنهاء أي تدفقات.
هناك أيضًا حلول حيث moveيحدث الحدثان في نفس الوقت. على سبيل المثال:
يحدث ( نقل ( كتلة حمراء ، جدول )، 0 ).
يحدث ( نقل ( كتلة خضراء ، كتلة حمراء )، 0 ).
يحدث ( علامة ، 1 ).
يحدث ( علامة ، 2 ).
يمكن إزالة مثل هذه الحلول، إذا لم تكن مرغوبة، عن طريق إضافة قيد سلامة، وهو يشبه شرط القيد في ASP:
:- يحدث ( التحرك ( الكتلة 1 ، المكان )، الوقت )، يحدث ( التحرك ( الكتلة 2 ، الكتلة 1 )، الوقت ).
تم استخدام البرمجة المنطقية الاستقرائية لتشخيص الأخطاء والتخطيط ومعالجة اللغة الطبيعية والتعلم الآلي. كما تم استخدامها لتفسير النفي باعتباره فشلًا كشكل من أشكال الاستدلال الاستقرائي. [62]
البرمجة المنطقية الاستقرائية
البرمجة المنطقية الاستقرائية (ILP) هي نهج للتعلم الآلي يحث البرامج المنطقية على تعميم الأمثلة الإيجابية والسلبية. فبالنظر إلى وجود برنامج منطقي يمثل المعرفة الأساسية والأمثلة الإيجابية مع القيود التي تمثل الأمثلة السلبية، يحث نظام البرمجة المنطقية الاستقرائية برنامجًا منطقيًا يعمم الأمثلة الإيجابية مع استبعاد الأمثلة السلبية.
إن نظرية ILP تشبه نظرية ALP، حيث يمكن اعتبار كل منهما بمثابة توليد فرضيات لتفسير الملاحظات، واستخدام القيود لاستبعاد الفرضيات غير المرغوب فيها. ولكن في نظرية ALP تكون الفرضيات عبارة عن حقائق خالية من المتغيرات، وفي نظرية ILP تكون الفرضيات عبارة عن قواعد عامة. [63] [64]
على سبيل المثال، مع الأخذ في الاعتبار فقط الخلفية المعرفية لعلاقات الأم والطفل والأب والطفل، وأمثلة مناسبة لعلاقة الجد والطفل، يمكن لأنظمة ILP الحالية توليد تعريف الجد والطفل، واختراع مسند مساعد، والذي يمكن تفسيره على أنه علاقة الوالد والطفل: [65]
الجد_الطفل ( X ، Y ):- المساعد ( X ، Z )، المساعد ( Z ، Y ).
المساعد ( X ، Y ):- الأم_الطفل ( X ، Y ).
المساعد ( X ، Y ):- الأب_الطفل ( X ، Y ).
أشار ستيوارت راسل [66] إلى أن اختراع مثل هذه المفاهيم الجديدة هو الخطوة الأكثر أهمية اللازمة للوصول إلى الذكاء الاصطناعي على المستوى البشري.
أدى العمل الأخير في مجال التعلم المنطقي الاستقرائي، الذي يجمع بين البرمجة المنطقية والتعلم والاحتمالات، إلى ظهور مجالات التعلم العلائقي الإحصائي والبرمجة المنطقية الاستقرائية الاحتمالية .
برمجة منطقية متزامنة
تدمج البرمجة المنطقية المتزامنة مفاهيم البرمجة المنطقية مع البرمجة المتزامنة . وقد حصل تطويرها على دفعة كبيرة في الثمانينيات من خلال اختيارها لغة برمجة الأنظمة لمشروع الجيل الخامس الياباني (FGCS) . [67]
برنامج المنطق المتزامن عبارة عن مجموعة من جمل Horn المحمية من النموذج:
H :- G1, ..., Gn | B1, ..., Bn.
يُطلق على أداة الربط اسم حارس الجملة، و | هو عامل الالتزام. من الناحية الإخباريّة، تُقرأ جمل Horn المُحرسة باعتبارها دلالات منطقية عادية:
G1, ... , Gn
H if G1 and ... and Gn and B1 and ... and Bn.
ومع ذلك، من الناحية الإجرائية، عندما يكون هناك عدة جمل تتوافق رؤوسها Hمع هدف معين، يتم تنفيذ جميع الجمل بالتوازي، للتحقق مما إذا كانت حراسها صحيحة. إذا كانت حراس أكثر من جملة صحيحة، يتم اتخاذ خيار ملتزم لأحد الجمل، ويستمر التنفيذ مع الأهداف الفرعية للجملة المختارة. يمكن أيضًا تنفيذ هذه الأهداف الفرعية بالتوازي. وبالتالي، تنفذ البرمجة المنطقية المتزامنة شكلاً من أشكال "عدم التحديد غير المبالي"، بدلاً من "عدم التحديد غير المعروف".
G1, ... , GnB1, ..., Bn
على سبيل المثال، يحدد برنامج المنطق المتزامن التالي مسندًا shuffle(Left, Right, Merge)، والذي يمكن استخدامه لخلط قائمتين Leftو Right، ودمجهما في قائمة واحدة Mergeتحافظ على ترتيب القائمتين Leftو Right:
خلط ([], [], []).
خلط ( يسار ، يمين ، دمج ) :-
يسار = [ أولًا | بقية ] |
دمج = [ أولًا | دمج قصير ]،
خلط ( راحة ، يمين ، دمج قصير ).
خلط ( يسار ، يمين ، دمج ) :-
يمين = [ أولًا | بقية ] |
دمج = [ أولًا | دمج قصير ]،
خلط ( يسار ، راحة ، دمج قصير ).
هنا، []يمثل القائمة الفارغة، [Head | Tail]ويمثل قائمة مع العنصر الأول Headمتبوعًا بقائمة Tail، كما هو الحال في Prolog. (لاحظ أن الظهور الأول لـ | في الجملتين الثانية والثالثة هو منشئ القائمة، في حين أن الظهور الثاني لـ | هو عامل الالتزام.) يمكن استخدام البرنامج، على سبيل المثال، لخلط القوائم [ace, queen, king]ومن [1, 4, 2]خلال استدعاء جملة الهدف:
خلط ([ الآس ، الملكة ، الملك ]، [ 1 ، 4 ، 2 ]، دمج ).
سيقوم البرنامج بإنشاء حل واحد بشكل غير حتمي، على سبيل المثال Merge = [ace, queen, 1, king, 4, 2].
زعم كارل هيويت [68] أنه بسبب عدم تحديد الحوسبة المتزامنة ، لا تستطيع البرمجة المنطقية المتزامنة تنفيذ التزامن العام. ومع ذلك، وفقًا للدلالات المنطقية، فإن أي نتيجة لحساب برنامج منطقي متزامن هي نتيجة منطقية للبرنامج، حتى لو لم يكن من الممكن استنباط جميع النتائج المنطقية.
برمجة منطق القيود المتزامنة
تجمع برمجة منطق القيود المتزامنة [69] بين برمجة المنطق المتزامنة وبرمجة منطق القيود ، باستخدام القيود للتحكم في التزامن. يمكن أن تحتوي الجملة على حارس، وهو مجموعة من القيود التي قد تمنع قابلية تطبيق الجملة. عندما يتم استيفاء حراس العديد من الجمل، فإن برمجة منطق القيود المتزامنة تختار استخدام جملة واحدة فقط.
برمجة منطقية من الدرجة الأعلى
قام العديد من الباحثين بتوسيع نطاق البرمجة المنطقية باستخدام ميزات برمجة من الدرجة الأعلى مستمدة من المنطق من الدرجة الأعلى ، مثل المتغيرات التنبؤية. تتضمن هذه اللغات امتدادات Prolog HiLog [70] و λProlog . [71]
البرمجة المنطقية الخطية
أدى تأسيس البرمجة المنطقية ضمن المنطق الخطي إلى تصميم لغات برمجة منطقية أكثر تعبيرًا بشكل كبير من تلك القائمة على المنطق الكلاسيكي. لا يمكن لبرامج بند هورن تمثيل تغيير الحالة إلا من خلال التغيير في الحجج إلى المسندات. في البرمجة المنطقية الخطية، يمكن للمرء استخدام المنطق الخطي المحيط لدعم تغيير الحالة. تتضمن بعض التصميمات المبكرة للغات البرمجة المنطقية القائمة على المنطق الخطي LO، [72] Lolli، [73] ACL، [74] وForum. [75] يوفر Forum تفسيرًا موجهًا نحو الهدف لجميع المنطق الخطي.
البرمجة المنطقية الموجهة للكائنات
[76] يمتد منطق F-logic إلى البرمجة المنطقية باستخدام الكائنات وبنية الإطار.
يقوم Logtalk [77] بتوسيع لغة برمجة Prolog من خلال دعم الكائنات والبروتوكولات ومفاهيم OOP الأخرى. وهو يدعم معظم أنظمة Prolog المتوافقة مع المعايير كمترجمات خلفية.
برمجة منطق المعاملات
منطق المعاملات [53] هو امتداد للبرمجة المنطقية مع نظرية منطقية للتحديثات التي تعدل الحالة. وهو يحتوي على دلالات نظرية النموذج ودلالات إجرائية. يتوفر تنفيذ لمجموعة فرعية من منطق المعاملات في نظام Flora-2 [78] . كما تتوفر نماذج أولية أخرى .
انظر أيضا
- إثبات النظريات آليا
- مشكلة قابلية الإرضاء المنطقية
- برمجة المنطق المقيد
- نظرية التحكم
- سجل البيانات
- فريل
- البرمجة الوظيفية
- المنطق الضبابي
- البرمجة المنطقية الاستقرائية
- المنطق الخطي
- المنطق في علوم الكمبيوتر (يتضمن الأساليب الرسمية )
- لغات البرمجة المنطقية
- وحدة تحكم منطقية قابلة للبرمجة
- ر++
- نظام الاستدلال
- التعلم الآلي القائم على القواعد
- قابلية الإرضاء
- بناء الجملة ودلالات البرمجة المنطقية
الاستشهادات
- ^ Tärnlund, S.Å. (1977). "Horn clause computability". BIT Numerical Mathematics . 17 (2): 215–226. doi :10.1007/BF01932293. S2CID 32577496.
- ^ أندريكا، هـ.؛ نيميتي، إ. (1978). "الاكتمال العام لمنطق المسندات في هورن كلغة برمجة". أكتا سيبرنيتيكا . 4 (1): 3-10.
- ^ جرين، كورديل. تطبيق إثبات النظريات في حل المشكلات (PDF) . IJCAI 1969.
- ^ فوستر، جيه إم؛ إلكوك، إي دبليو (1969). ABSYS 1: مُجمِّع تزايدي للتأكيدات: مقدمة . ورشة عمل الذكاء الآلي السنوية الرابعة. الذكاء الآلي. المجلد 4. إدنبرة، المملكة المتحدة: مطبعة جامعة إدنبرة . ص 423-429.
- ^ Kowalski, RA (1988). "The early years of logic programming" (PDF) . Communications of the ACM . 31 : 38–43. doi :10.1145/35043.35046. S2CID 12259230.
- ^ هيويت، كارل . المخطط: لغة لإثبات النظريات في الروبوتات (PDF) . IJCAI 1969.
- ^ وينوجراد، تيري (1972). "فهم اللغة الطبيعية". علم النفس الإدراكي . 3 (1): 1-191. doi :10.1016/0010-0285(72)90002-3.
- ^ جيف روليفسون ؛ جان ديركسين؛ ريتشارد والدينجر (نوفمبر 1973). QA4، حساب إجرائي للتفكير الحدسي (PDF) (تقرير فني). ملاحظة فنية رقم 73 لمركز SRI AI.
- ^ ديفيز، جيه إم، 1971. POPLER: مخطط POP-2. جامعة إدنبرة، قسم الذكاء الآلي والإدراك.
- ^ McDermott, DV ; Sussman, GJ (مايو 1972). دليل Conniver المرجعي (تقرير فني). مذكرة الذكاء الاصطناعي رقم 259.
- ^ Reboh, R.; Sacerdoti, ED (August 1973). دليل QLISP الأولي (تقرير فني). مركز الذكاء الاصطناعي، SRI International.
- ^ Kornfeld, WA; Hewitt, CE (1981). "استعارة المجتمع العلمي". IEEE Transactions on Systems, Man, and Cybernetics . 11 (1): 24–33. doi :10.1109/TSMC.1981.4308575. hdl : 1721.1/5693 . S2CID 1322857.
- ^ هايز، بات (1973). "الحساب والاستنتاج". وقائع ندوة MFCS الثانية . الأكاديمية التشيكوسلوفاكية للعلوم . ص 105-118.
- ^ روبنسون، ج. (1965). "الاستنتاج التلقائي بدقة عالية". المجلة الدولية لرياضيات الكمبيوتر . 1 (3): 227-234. doi :10.2307/2272384. JSTOR 2272384.
- ^ كوالسكي، روبرت؛ كوهنر، دونالد (1971). "الدقة الخطية مع دالة الاختيار" (PDF) . الذكاء الاصطناعي . 2 (3-4): 227-260. doi :10.1016/0004-3702(71)90012-9.
- ^ كوالسكي، روبرت (1973). "منطق المسند كلغة برمجة" (PDF) . قسم الذكاء الاصطناعي، جامعة إدنبرة . مذكرة 70.كما هو موضح أيضًا في وقائع مؤتمر الاتحاد الدولي للمعالجة الإعلامية، ستوكهولم، شركة شمال هولندا للنشر، 1974، ص 569-574.
- ^ Warren, DH; Pereira, LM; Pereira, F. (1977). "Prolog-the language and its implementation comparison with Lisp". ACM SIGPLAN Notices . 12 (8): 109–115. doi :10.1145/872734.806939.
- ^ Ueda, K., 2018. Logic/constraint programming and concurrency: The hard-won lessons of the Fifth generation computer project. Science of Computer Programming, 164, pp.3-17.
- ^ HP Newquist، 2020. صناع العقول: تاريخ الذكاء الاصطناعي. مجموعة Relayer.
- ^ جالير ، هيرفي. مينكر، جون جاك، محرران. (1978)، “قواعد المنطق والبيانات، ندوة حول المنطق وقواعد البيانات، مركز الدراسات والبحوث في تولوز، 1977”، التقدم في نظرية قواعد البيانات ، نيويورك: مطبعة بلينوم، ISBN 978-0-306-40060-5.
- ^ ab Warren, DS (2023). "مقدمة إلى لغة البرمجة Prolog". في Warren, DS؛ Dahl, V.؛ Eiter, T.؛ Hermenegildo, MV؛ Kowalski, R.؛ Rossi, F. (المحررون). لغة البرمجة Prolog: The Next 50 Years . Lecture Notes in Computer Science(). المجلد 13900. Springer, Cham. ص 3-19. doi :10.1007/978-3-031-35254-6_1. ISBN 978-3-031-35253-9.
- ^ روبنسون، ج. آلان (2001). "افتتاحية مدعوة". نظرية وممارسة البرمجة المنطقية . 1 (1). مطبعة جامعة كامبريدج : 1. doi : 10.1017/s1471068400000028 (غير نشط 2024-09-13).
{{cite journal}}:CS1 maint: DOI غير نشط اعتبارًا من سبتمبر 2024 ( الرابط ) - ^ RAKowalski (يوليو 1979). "الخوارزمية = المنطق + التحكم". اتصالات ACM . 22 (7): 424-436. doi : 10.1145/359131.359136 . S2CID 2509896.
- ^ Bruynooghe, M.; Pereira, LM (1984). "مراجعة الاستنتاج عن طريق التتبع الذكي". تطبيقات لغة البرمجة . تشيتشيستر، إنجلترا: إليس هوروود. ص 194-215.
- ^ ناكامورا، ك. (يوليو 1985). Prolog Heuristic: تنفيذ البرنامج المنطقي من خلال البحث الاستكشافي . مؤتمر حول البرمجة المنطقية. برلين، هايدلبرغ: سبرينغر برلين هايدلبرغ. ص 148-155.
- ^ Genesereth, MR; Ginsberg, ML (1985). "برمجة المنطق". Communications of the ACM . 28 (9): 933–941. doi : 10.1145/4284.4287 . S2CID 15527861.
- ^ سويفت، ت.؛ وارن، دي إس (يناير 2012). "XSB: توسيع برولوج باستخدام البرمجة المنطقية الجدولية". نظرية وممارسة البرمجة المنطقية . 12 (1-2): 157-187. arXiv : 1012.5123 . doi :10.1017/S1471068411000500. S2CID 6153112.
- ^ دانيال فريدمان؛ ويليام بيرد؛ أوليج كيسليوف؛ جيسون هيمان (2018). المخطط العقلاني، الطبعة الثانية . مطبعة معهد ماساتشوستس للتكنولوجيا.
- ^ أ. كاساس، د. كابيزا، إم. في. هيرمينيجيلدو. نهج نحوي لدمج التدوين الوظيفي والتقييم الكسول والترتيب الأعلى في أنظمة البرمجة الوظيفية والمنطقية. الندوة الدولية الثامنة حول البرمجة الوظيفية والمنطقية (FLOPS'06)، الصفحات 142-162، أبريل 2006.
- ^ Kersting, K., Mladenov, M. and Tokmakov, P., 2017. Relational linear programming. Artificial Intelligence, 244, pp.188-216.
- ^ باير، د.، 2006، مايو. البرمجة العلائقية باستخدام كروكوبات. في وقائع المؤتمر الدولي الثامن والعشرين حول هندسة البرمجيات (ص 807-810).
- ^ MacLennan, BJ, 1983. نظرة عامة على البرمجة العلائقية. إشعارات ACM SIGPLAN، 18(3)، ص.36-45.
- ^ Behnke, R., Berghammer, R., Meyer, E. and Schneider, P., 1998. RELVIEW—A system for calculating with relations and relationshipnal programming. In Fundamental Approaches to Software Engineering: First International Conference, FASE'98 Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS'98 Lisbon, Portugal, March 28–April 4, 1998 Proceedings 1 (pp. 318-321). Springer Berlin Heidelberg.
- ^ Van Emden, MH; Kowalski, RA (أكتوبر 1976). "دلالات منطق المسند كلغة برمجة". مجلة ACM . 23 (4): 733–742. doi : 10.1145/321978.321991 . S2CID 11048276.
- ^ كلارك، كيه إل (1977). "النفي كفشل". المنطق وقواعد البيانات . بوسطن، ماساتشوستس: سبرينغر الولايات المتحدة. ص 293-322. doi :10.1007/978-1-4684-3384-5_11. ISBN 978-1-4684-3386-9.
- ^ Gelfond, M.; Przymusinska, H.; Przymusinski, T. (1989). "حول العلاقة بين التحديد والنفي باعتبارهما فشلًا". الذكاء الاصطناعي . 38 (1): 75-94. doi :10.1016/0004-3702(89)90068-4.
- ^ Shepherdson, JC (1984). "النفي كفشل: مقارنة بين قاعدة بيانات كلارك المكتملة وافتراض العالم المغلق لرايتر". مجلة البرمجة المنطقية . 1 (1): 51-79. doi :10.1016/0743-1066(84)90023-2.
- ^ Denecker, M.; Ternovska, E. (2008). "منطق التعريفات الاستقرائية غير الرتيبة". ACM Transactions on Computational Logic . 9 (2): 14:1–14:52. arXiv : cs/0501025 . doi :10.1145/1342991.1342998. S2CID 13156469.
- ^ راو، ب.؛ ساجوناس، ك.؛ سويفت، ت.؛ وارين، دي. إس.؛ فريير، ج. (28-31 يوليو 1997). XSB: نظام للحوسبة الدلالاتية ذات الأساس السليم بكفاءة . البرمجة المنطقية والاستدلال غير الرتيب: المؤتمر الدولي الرابع، LPNMR'97. قلعة داغستول، ألمانيا: سبرينغر برلين هايدلبرغ. ص. 430-440. doi :10.1007/3-540-63255-7_33.
- ^ W. Chen; DS Warren (يناير 1996). "Tabled Evaluation with Delaying for General Logic Programs". مجلة جمعية الحوسبة الآلية . 43 (1): 20–74. doi : 10.1145/227595.227597 . S2CID 7041379.
- ^ فان مينه دونج (1995). "حول قبول الحجج ودورها الأساسي في التفكير غير الرتيب، والبرمجة المنطقية، والألعاب التي تضم عددًا من الأشخاص". الذكاء الاصطناعي . 77 (2): 321-357. doi : 10.1016/0004-3702(94)00041-X .
- ^ Colmerauer, A. and Roussel, P., 1996. The birth of Prolog. In History of programming language---II (pp. 331-367).
- ^ ab Warren, DH, Pereira, LM and Pereira, F., 1977. Prolog-the language and its implementation comparison with Lisp. ACM SIGPLAN Notices, 12(8), pp.109-115.
- ^ ثاجارد، بول (2005). العقل: مقدمة في العلوم المعرفية . مطبعة معهد ماساتشوستس للتكنولوجيا. ص. 11. رقم ISBN 9780262701099.https://www.google.co.uk/books/edition/Mind_ Second_edition/gjcR1U2HT7kC?hl=en&gbpv=1&pg=PP11&printsec=frontcover
- ^ ستينينج ، كيث. فان لامبالجين، ميشيل (2008). المنطق البشري والعلوم المعرفية . مطبعة معهد ماساتشوستس للتكنولوجيا . رقم ISBN 978-0-262-19583-6.https://philpapers.org/archive/STehra-5.pdf
- ^ فان لامبالجين، م. وهام، ف.، 2008. المعالجة الصحيحة للأحداث. جون وايلي وأولاده. https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=3126320bb6e37ca3727fed404828b53fc56ff063
- ^ رايتر، ر.، 1991. مشكلة الإطار في حساب الموقف: حل بسيط (أحيانًا) ونتيجة اكتمال للانحدار الهدف. النظرية الحسابية الاصطناعية والرياضية، 3.
- ^ ميريت، د.، 2012. بناء أنظمة الخبراء في برولوج. سبرينغر ساينس آند بيزنس ميديا. https://ds.amu.edu.et/xmlui/bitstream/handle/123456789/4434/%28Text%20Book%29%20Building%20Expert%20Systems%20in%20Prolog.pdf?sequence=1&isAllowed=y
- ^ Sergot, MJ; Sadri, F.; Kowalski, RA; Kriwaczek, F.; Hammond, P; Cory, HT (1986). "قانون الجنسية البريطانية كبرنامج منطقي" (PDF) . اتصالات ACM . 29 (5): 370–386. doi :10.1145/5689.5920. S2CID 5665107.
- ^ Prakken, H.; Sartor, G. (أكتوبر 2015). "القانون والمنطق: مراجعة من منظور الحجة" (PDF) . الذكاء الاصطناعي . 227 : 214–245. doi :10.1016/j.artint.2015.06.005. S2CID 4261497.
- ^ Satoh, K., 2023. PROLEG: Practical legal reasoning system. In Prolog: The Next 50 Years (pp. 277-283). Cham: Springer Nature Switzerland.
- ^ أب كورنر ، فيليب. ليوشيل، مايكل. باربوسا، جواو؛ كوستا، فيتور سانتوس؛ دال، فيرونيكا. هيرمينجيلدو، مانويل الخامس؛ موراليس، خوسيه ف. ويليميكر، يناير؛ دياز، دانيال. أبرو، سلفادور؛ سياتو ، جيوفاني (نوفمبر 2022). “خمسون عامًا من البرولوج وما بعده”. نظرية وممارسة البرمجة المنطقية . 22 (6): 776-858. أرخايف : 2201.10816 . دوى : 10.1017/S1471068422000102 . ISSN 1471-0684.
- ^ ab Bonner, AJ and Kifer, M., 1993, February. Transaction Logic Programming. In ICLP (Vol. 93, pp. 257-279).
- ^ Genesereth, M., 2023. Dynamic logic programming. In Prolog: The Next 50 Years (pp. 197-209). Cham: Springer Nature Switzerland.
- ^ Kowalski, R., Sadri, F., Calejo, M. and Dávila, J., 2023. Combining logic programming and command programming in LPS. In Prolog: The Next 50 Years (pp. 210-223). Cham: Springer Nature Switzerland.
- ^ Aho, AV و Ullman, JD, 1979, January. Universality of data retrieval language. في وقائع ندوة SIGACT-SIGPLAN السادسة التابعة لـ ACM حول مبادئ لغات البرمجة (ص 110-119).
- ^ ماير، د.، تيكلي، كيه تي، كيفر، م. ووارن، دي إس، 2018. سجل البيانات: المفاهيم والتاريخ والتوقعات. في البرمجة المنطقية التصريحية: النظرية والأنظمة والتطبيقات (ص 3-100).
- ^ إيتر، ت.، إياني، ج. وكرينوالنر، ت.، 2009. برمجة مجموعة الإجابات: مقدمة. في استدلال الويب. التقنيات الدلالية لأنظمة المعلومات: المدرسة الصيفية الدولية الخامسة 2009، بريكسين-بريسانوني، إيطاليا، 30 أغسطس-4 سبتمبر 2009، محاضرات تعليمية (ص 40-110).
- ^ أرياس، جيه؛ كارو، إم؛ سالازار، إي؛ ماربل، كيه؛ جوبتا، جي (2018). "برمجة مجموعة الإجابات المقيدة بدون تأريض". نظرية وممارسة البرمجة المنطقية . 18 (3-4): 337-354. arXiv : 1804.11162 . doi : 10.1017/S1471068418000285 . S2CID 13754645.
- ^ Denecker, M.; Kakas, AC (يوليو 2000). "إصدار خاص: برمجة المنطق الاستقرائي". مجلة برمجة المنطق . 44 (1-3): 1-4. doi : 10.1016/S0743-1066(99)00078-3 .
- ^ Eshghi, K., 1988, August. Abductive Planning with Event Calculation. في ICLP/SLP (ص 562-579).
- ^ Eshghi, K. و Kowalski, RA, 1989, June. Abduction Compared with Negation by Failure. في ICLP (المجلد 89، ص 234-255).
- ^ Nienhuys-Cheng, Shan-hwei; Wolf, Ronald de (1997). Foundations of inductive logic programming . Lecture notes in computer science Lecture notes in artificial intelligence. Berlin Heidelberg: Springer. p. 173. ISBN 978-3-540-62927-6.
- ^ Flach, PA and Kakas, AC, 2000. On the relationship between abduction and inductive learning. In Abductive Reasoning and Learning (pp. 1-33). Dordrecht: Springer Netherlands.
- ^ كروبر، أ. ودومانتشيتش، س.، 2022. البرمجة المنطقية الاستقرائية في سن الثلاثين: مقدمة جديدة. مجلة أبحاث الذكاء الاصطناعي، 74، ص 765-850.
- ^ راسل، س.، 2019. متوافق مع الإنسان: الذكاء الاصطناعي ومشكلة التحكم. بنغوين.
- ^ شونيتشي أوشيدا وكازوهيرو فوتشي. وقائع ورشة عمل تقييم مشروع FGCS . معهد تكنولوجيا الكمبيوتر من الجيل الجديد (ICOT). 1992.
- ^ هيويت، كارل (27 أبريل 2016). "متانة التناقض في البرامج المنطقية". أرشيف هال. ص 21-26 . تم الاسترجاع في 7 نوفمبر 2016 .
- ^ Saraswat, VA وRinard, M., 1989, December. Concurrent constraint programming. في وقائع ندوة SIGPLAN-SIGACT السابعة عشر التابعة لـ ACM حول مبادئ لغات البرمجة (ص 232-245).
- ^ تشين، ويدونج؛ كيفير، مايكل؛ وارن، ديفيد س. (فبراير 1993). "HiLog: أساس للبرمجة المنطقية من الدرجة الأعلى". مجلة البرمجة المنطقية . 15 (3): 187-230. doi : 10.1016/0743-1066(93)90039-J .
- ^ ميلر، دي إيه وناداثور، جي، 1986، يوليو. برمجة المنطق من الدرجة الأعلى. في المؤتمر الدولي حول برمجة المنطق (ص 448-462). برلين، هايدلبرغ: سبرينغر برلين هايدلبرغ.
- ^ أندريولي، جان مارك (1 يونيو 1992). "البرمجة المنطقية باستخدام البراهين الموجهة في المنطق الخطي". مجلة المنطق والحوسبة . 2 (3): 297-347. doi :10.1093/logcom/2.3.297.
- ^ هوداس، جوشوا؛ ميلر، ديل (1994). "البرمجة المنطقية في جزء من المنطق الخطي الحدسي". المعلومات والحوسبة . 110 (2): 327-365. doi : 10.1006/inco.1994.1036 .
- ^ كوباياشي، ناوكي؛ يونيزاوا، أكينوري (1994). نموذج الاتصال غير المتزامن القائم على المنطق الخطي . ورشة عمل الولايات المتحدة واليابان حول الحوسبة الرمزية المتوازية. ص 279-294. CiteSeerX 10.1.1.42.8749 .
- ^ ميلر، ديل (30 سبتمبر 1996). "المنتدى: منطق تحديد الاستنتاجات المتعددة". علوم الكمبيوتر النظرية . 165 (1): 201-232. doi : 10.1016/0304-3975(96)00045-X .
- ^ Kifer, M. and Lausen, G., 1989, June. F-logic: a higher-order language for reasoning about objects, legacy, and scheme. في وقائع مؤتمر ACM SIGMOD الدولي لعام 1989 حول إدارة البيانات (ص 134-146).
- ^ دي مورا، PJL، 2003. تصميم لغة برمجة منطقية موجهة للكائنات (أطروحة دكتوراه، جامعة دا بيرا الداخلية).
- ^ يانغ، جي. وكيفر، م.، 2000، يوليو. فلورا: تنفيذ نظام DOOD فعال باستخدام محرك منطق الجدولة. في المؤتمر الدولي للمنطق الحسابي (ص 1078-1093). برلين، هايدلبرغ: سبرينغر برلين هايدلبرغ.
مصادر
مقدمة عامة
- بارال، سي؛ جيلفوند، م. (1994). "البرمجة المنطقية وتمثيل المعرفة" (PDF) . مجلة البرمجة المنطقية . 19-20: 73-148. doi : 10.1016/0743-1066(94)90025-6 .
- كوالسكي، را (1988). "السنوات الأولى للبرمجة المنطقية" (PDF) . اتصالات جمعية الحوسبة الآلية . 31 : 38–43. doi :10.1145/35043.35046. S2CID 12259230.[1]
- لويد، جيه دبليو (1987). أساسيات البرمجة المنطقية (الطبعة الثانية). سبرينغر فيرلاغ.
مصادر أخرى
- جون مكارثي. "البرامج التي تعتمد على الحس السليم". ندوة حول ميكنة العمليات الفكرية . المختبر الفيزيائي الوطني. تيدينجتون، إنجلترا. 1958.
- ميلر، ديل؛ ناداثور، جوبالان؛ بفينينج، فرانك؛ سيدروف، أندريه (1991). "الأدلة الموحدة كأساس للبرمجة المنطقية". حوليات المنطق الخالص والتطبيقي . 51 (1-2): 125-157. doi : 10.1016/0168-0072(91)90068-W .
- إيهود شابيرو (محرر). مقدمة متزامنة . مطبعة معهد ماساتشوستس للتكنولوجيا. 1987.
- جيمس سلاجل. "التجارب باستخدام برنامج الإجابة على الأسئلة الاستنتاجية". مجلة CACM. ديسمبر 1965.
- جاباي، دوف م .؛ هوجر، كريستوفر جون؛ روبنسون، جيه إيه، محررون (1993-1998). دليل المنطق في الذكاء الاصطناعي والبرمجة المنطقية. المجلدات 1-5، مطبعة جامعة أكسفورد.
قراءة إضافية
- كارل هيويت. "التضمين الإجرائي للمعرفة في المخطط". IJCAI 1971.
- كارل هيويت. "الزوال المتكرر للبرمجة المنطقية ولماذا سيتم تجسيدها من جديد". ندوة الربيع للجمعية الأمريكية للذكاء الاصطناعي: ما الذي حدث خطأ ولماذا: دروس من أبحاث الذكاء الاصطناعي وتطبيقاته 2006: 2-9.
- يفجيني دانتسين، توماس إيتر، جورج جوتلوب، أندريه فورونكوف: التعقيد والقدرة التعبيرية للبرمجة المنطقية. ACM Comput. Surv. 33(3): 374–425 (2001)
- أولف نيلسون ويان مالوزينسكي، المنطق والبرمجة ولغة البرولوغ
روابط خارجية
- مدخل إلى مكتبة البرمجة المنطقية الافتراضية
- المراجع الخاصة بالبرمجة المنطقية محفوظ في 2008-12-04 على موقع Wayback Machine
- جمعية البرمجة المنطقية (ALP)
- نظرية وممارسة البرمجة المنطقية (مجلة)
- البرمجة المنطقية بلغة C++ باستخدام Castor
- برمجة منطقية أرشيف 2011-09-03 في آلة Wayback في أوز
- مركز تطوير البرولوج
- Racklog: البرمجة المنطقية في Racket
