# برمجة استقرائية

البرمجة الاستقرائية (بالإنجليزية: Inductive programming)‏ يرمز الاختصار إلى (IP) هي مجال خاص من البرمجة التلقائية، تغطي الأبحاث من الذكاء الاصطناعي والبرمجة، والتي تتناول تعلم البرامج التقريرية (المنطقية أو الوظيفية) وغالبًا ما تكون متكررة من مواصفات غير كاملة، مثل أمثلة الإدخال / الإخراج أو القيود.
اعتمادًا على لغة البرمجة المستخدمة، هناك عدة أنواع من البرمجة الاستقرائية. البرمجة الوظيفية للبرمجة الاستقرائية، والتي تستخدم لغات وظيفية مثل ليسب (Lisp) أو هاسكل (Haskell) هي لغة برمجة مطابقة للمعايي، للأغراض العامة، وعلى وجه الخصوص البرمجة المنطقية الاستقرائية، التي تستخدم لغات البرمجة المنطقية مثل برولوغ (Prolog) والتمثيلات المنطقية الأخرى مثل منطق الوصف، كانت أكثر بروزًا، مثل البرمجة القيدية أو البرمجة الاحتمالية.

## تعريف

تتضمن البرمجة الاستقرائية جميع الأساليب التي تهتم ببرامج التعلم أو الخوارزميات من مواصفات غير كاملة. المدخلات المحتملة في نظام البرمجة الاستقرائية IP هي مجموعة من مدخلات التدريب والمخرجات المقابلة أو وظيفة تقييم المخرجات، التي تصف السلوك المطلوب للبرنامج المقصود، أو الآثار أو تسلسل الإجراءات التي تصف عملية حساب مخرجات محددة، والقيود المفروضة على البرنامج الذي سيتم إحداثه فيما يتعلق بكفاءة الوقت أو تعقيده، وأنواع مختلفة من المعرفة الأساسية مثل أنواع البيانات القياسية، والوظائف المحددة مسبقًا لاستخدامها، ومخططات البرنامج أو القوالب التي تصف تدفق البيانات للبرنامج المقصود، والاستدلالات لتوجيه البحث عن حل أو تحيزات أخرى.
ناتج نظام البرمجة الاستقرائية (IP) هو برنامج في بعض لغات البرمجة التعسفية يحتوي على بنى تحكم شرطية وحلقة أو متكررة، أو أي نوع آخر من لغة تمثيل تورينج كومبليت.
في العديد من التطبيقات، يجب أن يكون برنامج الإخراج صحيحًا فيما يتعلق بالأمثلة والمواصفات الجزئية، وهذا يؤدي إلى اعتبار البرمجة الاستقرائية كمنطقة خاصة داخل البرمجة التلقائية أو تخليق البرنامج، وعادةً ما يكون ذلك في مقابل توليف البرنامج الاستنتاجي، حيث تكون المواصفات عادة ما تكون كاملة.
في حالات أخرى، يُنظر إلى البرمجة الاستقرائية على أنها مجال أكثر عمومية حيث يمكن استخدام أي لغة برمجة أو تمثيل، وقد يكون لدينا درجة من الخطأ في الأمثلة، كما هو الحال في التعلم الآلي العام، أو المجال الأكثر تحديدًا لتعدين الهيكل أو مجال الذكاء الاصطناعي الرمزي. السمة المميزة هي عدد الأمثلة أو المواصفات الجزئية المطلوبة. عادة، يمكن أن تتعلم تقنيات البرمجة الاستقرائية من أمثلة قليلة فقط.
عادةً ما يأتي تنوع البرمجة الاستقرائية من التطبيقات واللغات المستخدمة: بصرف النظر عن البرمجة المنطقية والبرمجة الوظيفية، تم استخدام نماذج البرمجة ولغات التمثيل الأخرى أو اقتراحها في البرمجة الاستقرائية، مثل البرمجة المنطقية الوظيفية، برمجة القيد، الاحتمالية البرمجة، والبرمجة المنطقية الاختطاف، والمنطق النموذجي، ولغات العمل، ولغات الوكيل وأنواع كثيرة من اللغات الحتمية.

## تاريخ

بدأ البحث عن التوليف الاستقرائي للبرامج الوظيفية العودية في أوائل السبعينيات وتم إدخاله على أسس نظرية ثابتة باستخدام نظام أطروحة سمرز وعمل بيرمان. تم تقسيم هذه الأساليب إلى مرحلتين: أولاً، يتم تحويل أمثلة المدخلات والمخرجات إلى برامج غير متكررة باستخدام مجموعة صغيرة من العوامل الأساسية؛ ثانيًا، يتم البحث عن الانتظام في الآثار واستخدامها لطيهم في برنامج تعاودي. تم مسح النتائج الرئيسية حتى منتصف الثمانينيات من قبل سميث. بسبب التقدم المحدود فيما يتعلق بمجموعة البرامج التي يمكن تجميعها، انخفضت أنشطة البحث بشكل كبير في العقد المقبل.
جلب ظهور البرمجة المنطقية اتجاهًا جديدًا ولكن أيضًا اتجاهًا جديدًا في أوائل الثمانينيات، خاصة بسبب نظام المعلومات الإدارية (MIS) لشابيرو الذي أدى في النهاية إلى ظهور مجال جديد لبرمجة المنطق الاستقرائي, كان لأعمال بلوتكين المبكرة، والتعميم النسبي الأقل تعميمًا، تأثير هائل في برمجة المنطق الاستقرائي. تتناول معظم أعمال برمجة المنطق الاستقرائي ILP فئة أوسع من المشكلات، حيث أن التركيز ليس فقط على برامج المنطق العودي ولكن على التعلم الآلي للفرضيات الرمزية من التمثيلات المنطقية. ومع ذلك، كانت هناك بعض النتائج المشجعة في تعلم برامج برولوغ (Prolog) العودية مثل الفرز السريع من الأمثلة جنبًا إلى جنب مع المعرفة الخلفية المناسبة، على سبيل المثال مع جولم (GOLEM). ولكن مرة أخرى، بعد النجاح الأولي، أصيب المجتمع بخيبة أمل بسبب التقدم المحدود حول استقراء البرامج التكرارية مع تركيز أقل وأقل من برمجة المنطق الاستقرائي (ILP) على البرامج العودية والميل أكثر فأكثر نحو إعداد التعلم الآلي مع التطبيقات في التنقيب عن البيانات العلائقية واكتشاف المعرفة.
بالتوازي مع العمل في برمجة المنطق الاستقرائي، (ILP) اقترح كوزا البرمجة الجينية في أوائل التسعينيات كنهج قائم على التوليد والاختبار لبرامج التعلم. تم تطوير فكرة البرمجة الجينية إلى نظام البرمجة الاستقرائي والنظام القائم على البحث المنهجي يتم تعلم البرامج الوظيفية من مجموعات من الأمثلة الإيجابية جنبًا إلى جنب مع وظيفة تقييم المخرجات (الملاءمة) التي تحدد سلوك الإدخال / الإخراج المطلوب للبرنامج المطلوب تعلمه.
يرتبط العمل المبكر في الاستقراء النحوي (المعروف أيضًا باسم الاستدلال النحوي) بالبرمجة الاستقرائية، حيث يمكن استخدام أنظمة إعادة الكتابة أو البرامج المنطقية لتمثيل قواعد الإنتاج. في الواقع، اعتبرت الأعمال المبكرة في الاستدلال الاستقرائي الاستقراء النحوي واستدلال برنامج ليسب (Lisp) نفس المشكلة في الأساس. كانت النتائج من حيث قابلية التعلم مرتبطة بالمفاهيم الكلاسيكية، مثل التعريف في الحد، كما تم تقديمه في العمل الأساسي للذهب. في الآونة الأخيرة، تمت معالجة مشكلة تعلم اللغة من قبل مجتمع البرمجة الاستقرائي.
في السنوات الأخيرة، تم استئناف الأساليب الكلاسيكية وتطويرها بنجاح كبير. لذلك، تمت إعادة صياغة مشكلة التوليف على خلفية أنظمة إعادة كتابة المصطلح المبني على المُنشئ مع مراعاة التقنيات الحديثة للبرمجة الوظيفية، بالإضافة إلى الاستخدام المعتدل للاستراتيجيات القائمة على البحث واستخدام المعرفة الأساسية وكذلك الاختراع التلقائي للبرامج الفرعية. ظهرت مؤخرًا العديد من التطبيقات الجديدة والناجحة خارج توليف البرنامج، وخاصة في مجال معالجة البيانات والبرمجة بالقدوة والنمذجة المعرفية.
تم استكشاف أفكار أخرى أيضًا مع السمة المشتركة لاستخدام اللغات التقريرية لتمثيل الفرضيات. على سبيل المثال، تمت الدعوة إلى استخدام ميزات أو مخططات أو مسافات منظمة ذات ترتيب أعلى من أجل معالجة أفضل لأنواع وهياكل البيانات العودية؛ تم استكشاف التجريد أيضًا باعتباره نهجًا أكثر قوة للتعلم التراكمي والاختراع الوظيفي.
أحد النماذج القوية التي تم استخدامها مؤخرًا لتمثيل الفرضيات في البرمجة الاستقرائية (بشكل عام في شكل نماذج توليدية) هو البرمجة الاحتمالية (والنماذج ذات الصلة، مثل برامج المنطق العشوائي والبرمجة المنطقية البايزية).

## مجالات التطبيق

حددت ورشة العمل الأولى حول مناهج وتطبيقات البرمجة الاستقرائية (AAIP) التي عقدت بالاشتراك مع المؤتمر الدولي للتعلم الآلي (ICML 2005) جميع التطبيقات التي يُطلب فيها "تعلم البرامج أو القواعد العودية، أولاً في مجال هندسة البرمجيات حيث التعلم الهيكلي، يمكن أن يساعد مساعدو البرامج ووكلاء البرامج في إعفاء المبرمجين من المهام الروتينية، أو تقديم دعم البرمجة للمستخدمين النهائيين، أو دعم المبرمجين المبتدئين وأنظمة معلم البرمجة.المجالات الأخرى للتطبيق هي تعلم اللغة، وتعلم قواعد التحكم العودية لتخطيط الذكاء الاصطناعي، والتعلم التكراري مفاهيم في التنقيب على الويب أو للتحولات في تنسيق البيانات.
منذ ذلك الحين، أظهرت هذه المجالات والعديد من المجالات الأخرى أنها مجالات تطبيق ناجحة للبرمجة الاستقرائية، مثل برمجة المستخدم النهائي، والمجالات ذات الصلة بالبرمجة عن طريق المثال والبرمجة عن طريق العرض، وأنظمة التدريس الذكية.
المجالات الأخرى التي تم فيها تطبيق الاستدلال الاستقرائي مؤخرًا هي اكتساب المعرفة والذكاء العام الاصطناعي والتعلم المعزز وتقييم النظرية والعلوم المعرفية بشكل عام. قد تكون هناك أيضًا تطبيقات محتملة في الوكلاء الأذكياء والألعاب والروبوتات والتخصيص والذكاء المحيط والواجهات البشرية.

## قائمة ببعض لغات البرمجة

* لغة تجميع
* سي
* سي++
* باسكال
* ليسب
* فيجوال بيسك
* فيجوال بيزك دوت نت
* سي شارب
* ج
* بايثون
* دلفي
* بيرل
* جافا
* بي إتش بي
* روبي
* سيتل
* لوا
* Go
* فورتران
* ماتلاب
* سي شارب
* HTML
* إيه إس بي دوت نت
* بيسك
* كوتلن
* جافا سكريبت
* إس كيو إيل (SQL)

## المبرمجون

مبرمجو الحاسوب هم الذين يكتبون برامج الحاسوب. وظائفهم تشمل بشكل عام:
* كتابة الشفرة
* التصريف
* التنقيح
* التوثيق
* الصيانة
* فحص البرمجيات
* هندسة البنى البرمجية الضخمة