نوع تابع

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

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

تضيف الأنماط المعتمدة تعقيدًا إلى نظام الأنواع. فقد يتطلب تحديد التساوي بين أنماط معتمدة داخل برنامج ما إجراء حسابات. وإذا سُمح بقيم عشوائية داخل الأنماط المعتمدة، فإن تحديد تساوي الأنواع قد يتطلب تحديد ما إذا كان برنامجان عشوائيان ينتجان نفس النتيجة؛ ومن ثم فإن قابلية القرار لنظام الأنواع قد تعتمد على دلالات المساواة داخل نظرية النمط المعينة، أي على ما إذا كانت نظرية النمط كثيفة أم امتدادية.[1]

التاريخ

في عام 1934، لاحظ هاسكل أن الأنواع المستخدمة في حساب لامدا النمطي، وفي نظيره من منطق التجميع، تتبع نفس النمط الذي تتبعه البديهيات في حساب القضايا. وتابع أبعد من ذلك، حيث وجد أنه مقابل كل برهان في المنطق، توجد دالة مطابقة (مصطلح) في لغة البرمجة. وكان من بين أمثلة كاري التطابق بين حساب لامدا النمطي البسيط والمنطق الحدسي.[2]

منطق الرتبة الأولى هو امتداد لمنطق القضايا، يُضيف المُكمِّمات. وقد قام كل من ويليام آلفين هوارد ونيكولاس دي بروين بتوسيع حساب لامدا ليتوافق مع هذا المنطق الأقوى من خلال إنشاء أنواع للدوال المعتمدة، التي تتطابق مع "لكل"، والأزواج المعتمدة، التي تتطابق مع "يوجد".[3]

وبسبب هذا العمل، وغيره من أعمال هوارد، أصبح يُعرف مبدأ المطابقة بين القضايا والأنواع باسم تطابق كاري-هوارد.

التعريف الرسمي

بشكل غير دقيق، تُشبه الأنواع المعتمدة نوع العائلات المفهرسة من المجموعات. بشكل أكثر رسمية، إذا كان لدينا نوع ضمن كون من الأنواع ، يمكن أن يكون لدينا عائلة من الأنواع ، والتي تُسنِد لكل عنصر نوعًا . نقول إن النوع يتغير حسب .

نوع Π

الدالة التي يختلف نوع القيمة التي تُعيدها حسب الوسيط (أي لا يوجد مستقر دالة ثابت) تُعرف باسم دالة معتمدة، ويُطلق على نوع هذه الدالة اسم نوع الجداء المعتمد، أو نوع Π (Π type) أو نوع الدالة المعتمدة.[4] انطلاقًا من عائلة من الأنواع يمكننا بناء نوع الدوال المعتمدة ، والتي تتكون عناصرها من دوال تأخذ عنصرًا وتُعيد عنصرًا من . في هذا المثال، يُكتب نوع الدالة المعتمدة عادة على النحو أو .

إذا كانت دالة ثابتة، فإن نوع الجداء المعتمد المقابل يكون مكافئًا لنوع الدالة العادي. أي أن يساوي حكميًا عندما لا تعتمد على .

يرجع اسم "نوع Π" إلى فكرة أن هذه الأنواع يمكن النظر إليها على أنها جداء ديكارتي للأنواع. كما يمكن فهم أنواع Π ضمن نظرية النماذج بوصفها تكميمًا كليًا.

على سبيل المثال، إذا كتبنا للدوال المتجهة ذات n عنصرًا من عدد حقيقي، فإن سيكون نوع دالة تُعيد، لكل عدد طبيعي n، متجهًا من الأعداد الحقيقية بطول n. ويظهر الفضاء الدالي المعتاد كحالة خاصة عندما لا يعتمد نوع النطاق على الوسيط. على سبيل المثال، هو نوع الدوال من الأعداد الطبيعية إلى الأعداد الحقيقية، ويُكتب في حساب لامدا النمطي على النحو .

كمثال أكثر تحديدًا، إذا اعتبرنا نوع الأعداد الصحيحة غير الموقعة من 0 إلى 255 (التي تتناسب مع 8 بت أو 1 بايت)، و لكل ، فإن تتحول إلى الجداء .

نوع Σ

الثنائية لنوع الجداء المعتمد هي نوع الزوج المعتمد، أو نوع الجمع المعتمد، أو نوع سيغما، أو (بشكل مربك) أيضًا نوع الجداء المعتمد.[4] ويمكن أيضًا فهم أنواع سيغما على أنها تكميمات وجودية. وبالعودة إلى المثال أعلاه، إذا كان في كون الأنواع نوع وعائلة من الأنواع ، فإنه يوجد نوع زوج معتمد . (وتشبه الرموز البديلة لهذا النوع ما يُستخدم في أنواع Π.)

يُجسد نوع الزوج المعتمد فكرة الزوج المرتب الذي يعتمد فيه نوع العنصر الثاني على قيمة العنصر الأول. إذا كان فإن و. وإذا كانت دالة ثابتة، فإن نوع الزوج المعتمد يتحول إلى مكافئ حكميًا لـ نوع الجداء، أي الجداء الديكارتي العادي .[4]

كمثال أكثر تحديدًا، إذا اعتبرنا مرة أخرى نوع الأعداد الصحيحة غير الموقعة من 0 إلى 255، وكانت تساوي مرة أخرى لـ 256 نوعًا اختياريًا مختلفًا من ، فإن تتحول إلى الجمع .

مثال بصيغة تكميم وجودي

ليكن نوعًا ما، وليكن . وفقًا لتطابق كاري–هوارد، يمكن تفسير كمحمول منطقي على عناصر . ولعنصر معين ، فإن كون النوع مأهولًا يدل على ما إذا كان يحقق هذا المحمول. ويمكن توسيع هذا التطابق ليشمل التكميم الوجودي والأزواج المعتمدة: تكون القضية صحيحة إذا وفقط إذا كان النوع مأهولًا.

على سبيل المثال، يكون أصغر من أو يساوي إذا وفقط إذا وُجد عدد طبيعي آخر بحيث . في المنطق، تُصاغ هذه القضية على النحو التالي:

وهذه القضية تتطابق مع نوع الزوج المعتمد التالي:

أي أن برهانًا على أن أصغر من أو يساوي هو زوج يحتوي على عدد غير سالب ، وهو الفرق بين و، وبرهان على المساواة .

أنظمة مكعب اللامبدا

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

نظرية النوع التابع من المرتبة الأولى

النظام الخاص بالأنواع التابعة النقية من المرتبة الأولى، والمقابل لإطار العمل المنطقي LF، يتم الحصول عليه عن طريق تعميم نوع فضاء الدوال في حساب لامبدا البسيط إلى نوع الجداء التابع.

نظرية النوع التابع من المرتبة الثانية

النظام الخاص بالأنواع التابعة من المرتبة الثانية يُستمد من بالسماح بالتكميم على مُنشئي الأنواع. في هذه النظرية، يشمل عامل الجداء التابع كلًا من العامل الخاص بحساب لامبدا البسيط، والموثق الخاص بنظام F.

حساب لامبدا التعددي من المرتبة الأعلى بأنواع تابعة

النظام من المرتبة الأعلى يُوسّع ليشمل جميع أشكال التجريد الأربعة في مكعب اللامبدا: دوال من حدود إلى حدود، من أنواع إلى أنواع، من حدود إلى أنواع، ومن أنواع إلى حدود. يقابل هذا النظام حساب التركيبات والذي يُعد الاشتقاق منه، أي حساب التركيبات الاستقرائية، النظام الأساسي لروك.

البرمجة والمنطق في آنٍ واحد

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

مقارنة اللغات مع الأنواع التابعة

اللغةقيد التطوير الفعّالالنمط البرمجي[ا]التكتيكاتمصطلحات الإثباتالتحقق من الانتهاءيمكن للأنواع أن تعتمد على[ب]المجتمععدم أهمية الإثباتاستخلاص البرامجالاستخلاص يحذف المصطلحات غير المهمة
أقدانعم[5]برمجة دالية بحتةقليلة/محدودة[ج]نعمنعم (اختياري)أي مصطلحنعم (اختياري)[د]معاملات الإثبات غير المهمة[7]، قضايا إثبات غير مهمة[8]هاسكل، جافا سكريبتنعم[7]
إيه تي إسنعم[9]دالية / إجرائيةلا[10]نعمنعمبعض المصطلحات الساكنة[11]نعمنعمنعم
كاينلادالية بحتةلانعملاأي مصطلحلالا
جالينانعم[12]دالية بحتةنعمنعمنعمأي مصطلحنعم[ه]نعم[13]هاسكل، سكيم، كاملنعم
ديبندنت إم إللا[و]نعمأعداد طبيعية
إفنعم[14]دالية وإجرائيةنعم[15]نعمنعم (اختياري)أي مصطلح دالي بحتنعمنعمكامل، إف، وسينعم
غورولا[16]دالية بحتة[17]ضم الفرضيات[18]نعم[17]نعمأي مصطلحلانعمكاراواينعم
إدريسنعم[19]دالية بحتة[20]نعم[21]نعمنعم (اختياري)أي مصطلحنعملانعمنعم[21]
ليننعمدالية بحتةنعمنعمنعمأي مصطلحنعمنعمنعمنعم
ماتيتانعم[22]دالية بحتةنعمنعمنعمأي مصطلحنعمنعملغة كامل الموضوعيةنعم
نيو بي آر إلنعمدالية بحتةنعمنعمنعمأي مصطلحنعمنعم
بي في إسنعمنعم
سيج[23]لا[ز]دالية بحتةلالالالا
سباركنعم[24]إجرائيةنعم[25]نعم[26]نعم[27]أي مصطلح[ح]أيدا وسي[28]نعم[29]
تويلفنعمبرمجة منطقيةنعمنعم (اختياري)أي مصطلحلالا
  1. يشير ذلك إلى اللغة "الأساسية"، وليس إلى أي نمط للتكتيك (إثبات نظريات الدالة) أو لغات فرعية لتوليد الشيفرة.
  2. خاضعة للقيود الدلالية، مثل قيود العوالم
  3. محلل الحلقات[6]
  4. عوالم اختيارية، تعددية العوالم الاختيارية، وعوالم محددة صراحة بشكل اختياري
  5. عوالم، قيود العوالم المستنتجة تلقائيًا (مختلفة عن تعددية العوالم في أقدا) وخيار طباعة قيود العوالم صراحة
  6. تم استبداله بـ ATS
  7. آخر ورقة بحثية وآخر نسخة شيفرة في 2006
  8. Static_Predicate للمصطلحات المقيدة، Dynamic_Predicate لفحص نوعي لأي مصطلح

انظر أيضًا

المراجع

  1. Hofmann، Martin (1995)، Extensional concepts in intensional type theory (PDF)، مؤرشف من الأصل (PDF) في 2024-11-19
  2. Sørensen، Morten Heine B.؛ Urzyczyn، Pawel (1998)، Lectures on the Curry-Howard Isomorphism، CiteSeerX:10.1.1.17.7385
  3. Bove، Ana؛ Dybjer، Peter (2008). Dependent Types at Work (PDF) (Report). Chalmers University of Technology. مؤرشف من الأصل (PDF) في 2025-02-26.
  4. 1 2 3 Altenkirch، Thorsten؛ Danielsson، Nils Anders؛ Löh، Andres؛ Oury، Nicolas (2010). "ΠΣ: Dependent Types without the Sugar" (PDF). في Blume، Matthias؛ Kobayashi، Naoki؛ Vidal، Germán (المحررون). Functional and Logic Programming, 10th International Symposium, FLOPS 2010, Sendai, Japan, April 19-21, 2010. Proceedings. Lecture Notes in Computer Science. Springer. ج. 6009. ص. 40–55. DOI:10.1007/978-3-642-12251-4_5.
  5. "صفحة تنزيل أقدا". مؤرشف من الأصل في 2025-05-02.
  6. "محلل الحلقات في أقدا". مؤرشف من الأصل في 2009-04-17.
  7. 1 2 "إعلان: أقدا 2.2.8". مؤرشف من الأصل في 2011-07-18. اطلع عليه بتاريخ 2010-09-28.
  8. "سجل التغييرات لأقدا 2.6.0". مؤرشف من الأصل في 2022-12-05.
  9. "تنزيلات ATS2". مؤرشف من الأصل في 2024-09-17.
  10. "بريد إلكتروني من مخترع ATS هونغوي شي". مؤرشف من الأصل في 2013-02-04.
  11. Xi، Hongwei (مارس 2017). "نظام الأنواع التطبيقي: مقاربة للبرمجة العملية مع إثبات النظريات" (PDF). arXiv:1703.08683. مؤرشف من الأصل (PDF) في 2022-10-23.
  12. "تغييرات Coq في مستودع Subversion". مؤرشف من الأصل في 2018-09-29.
  13. "إدخال SProp في Coq 8.10". مؤرشف من الأصل في 2023-09-24.
  14. "تغييرات F* على غيت هاب". غيت هاب. مؤرشف من الأصل في 2024-12-07.
  15. "ملاحظات إصدار F* v0.9.5.0 على غيت هاب". غيت هاب. مؤرشف من الأصل في 2024-12-07.
  16. "غورو SVN". مؤرشف من الأصل في 2015-11-18.
  17. 1 2 Aaron Stump (6 أبريل 2009). "البرمجة المؤكدة في غورو" (PDF). مؤرشف من الأصل (PDF) في 2009-12-29. اطلع عليه بتاريخ 2010-09-28.
  18. Petcher، Adam (مايو 2008). اتخاذ قرار القابلية للانضمام وفق معادلات أرضية في نظرية الأنواع التشغيلية (PDF) (ماجستير). جامعة واشنطن. مؤرشف من الأصل (PDF) في 2010-07-19. اطلع عليه بتاريخ 2010-10-14.
  19. "مستودع إدريس على غيت هاب". غيت هاب. 17 مايو 2022. مؤرشف من الأصل في 2025-05-17.
  20. Brady، Edwin. "إدريس، لغة بأنواع معتمدة - ملخص موسع" (PDF). CiteSeerX:10.1.1.150.9442. مؤرشف من الأصل (PDF) في 2022-05-27.
  21. 1 2 Brady، Edwin. "كيف تقارن إدريس بلغات البرمجة الأخرى المعتمدة على الأنواع؟".
  22. "Matita SVN". مؤرشف من الأصل في 2006-05-08. اطلع عليه بتاريخ 2010-09-29.
  23. نسخة محفوظة 2020-11-09 على موقع واي باك مشين.
  24. "تثبيت SPARK باستخدام ALIRE". مؤرشف من الأصل في 2024-05-25.
  25. "§3.2.4 افتراضات الأنواع الفرعية". دليل مرجعي أدا (ط. 2012). مؤرشف من الأصل في 2025-02-12.
  26. "5.11.6 مكتبة ليمات SPARK". دليل مستخدم SPARK (ط. 25.0). مؤرشف من الأصل في 2024-08-27.
  27. "5.2.8 العقود للانتهاء". دليل مستخدم SPARK (ط. 25.0). مؤرشف من الأصل في 2024-03-03.
  28. "1.2 استخدام CCG". دليل مستخدم GNAT Pro CCG (ط. 25.0). مؤرشف من الأصل في 2024-12-11.
  29. "الترجمة باستخدام مترجم غير مدرك لـ SPARK". دليل مستخدم SPARK (ط. 25.0). مؤرشف من الأصل في 2024-12-11.

قراءة إضافية

روابط خارجية