النوع التابع
في علوم الحاسوب والمنطق ، يُعرف النوع التابع بأنه نوع يعتمد تعريفه على قيمة معينة. وهو سمة مشتركة بين نظرية الأنواع وأنظمة الأنواع . في نظرية الأنواع الحدسية ، تُستخدم الأنواع التابعة لترميز مُكمِّمات المنطق مثل "لكل" و"يوجد". في لغات البرمجة الوظيفية مثل Agda و ATS و Rocq (المعروفة سابقًا باسم Coq ) و F* و Epigram و Idris و Lean ، تُسهم الأنواع التابعة في تقليل الأخطاء البرمجية من خلال تمكين المبرمج من تحديد أنواع تُقيِّد مجموعة التطبيقات الممكنة.
من الأمثلة الشائعة على الأنواع التابعة الدوال التابعة والأزواج التابعة . قد يعتمد نوع القيمة المُعادة من دالة تابعة على قيمة (وليس نوع) أحد وسائطها. على سبيل المثال، دالة تأخذ عددًا صحيحًا موجبًاقد تُرجع مصفوفة بطولحيث يُعد طول المصفوفة جزءًا من نوعها. (لاحظ أن هذا يختلف عن تعدد الأشكال والبرمجة العامة ، حيث يتضمن كلاهما النوع كوسيط). قد يحتوي الزوج التابع على قيمة ثانية، يعتمد نوعها على القيمة الأولى. بالعودة إلى مثال المصفوفة، يمكن استخدام الزوج التابع لربط المصفوفة بطولها بطريقة آمنة من حيث النوع.
تُضيف الأنواع التابعة تعقيدًا إلى نظام الأنواع. وقد يتطلب تحديد تساوي الأنواع التابعة في برنامج ما إجراء عمليات حسابية. إذا سُمح بقيم عشوائية في الأنواع التابعة، فقد ينطوي تحديد تساوي الأنواع على تحديد ما إذا كان برنامجان عشوائيان يُنتجان النتيجة نفسها؛ وبالتالي، قد تعتمد قابلية حسم فحص الأنواع على دلالات المساواة في نظرية الأنواع المُعطاة، أي ما إذا كانت نظرية الأنواع قصدية أم امتدادية . [ 1 ]
تاريخ
في عام 1934، لاحظ هاسكل كاري أن الأنواع المستخدمة في حساب التفاضل والتكامل اللامدا المكتوب ، وفي نظيره في المنطق التوافقي ، تتبع النمط نفسه الذي تتبعه البديهيات في منطق القضايا . وبالنظر إلى الأمر من زاوية أخرى، فإنه لكل برهان في المنطق، توجد دالة (مصطلح) مقابلة في لغة البرمجة. ومن الأمثلة التي ذكرها كاري، التطابق بين حساب التفاضل والتكامل اللامدا المكتوب ببساطة والمنطق الحدسي . [ 2 ]
يُعد منطق المسندات امتدادًا لمنطق القضايا، حيث يُضاف إليه المُكمِّمات. وقد قام هوارد ودي بروين بتوسيع حساب لامدا ليُضاهي هذا المنطق الأكثر قوة من خلال إنشاء أنواع للدوال التابعة، والتي تُقابل عبارة "لكل"، والأزواج التابعة، والتي تُقابل عبارة "يوجد". [ 3 ]
وبسبب هذا، وبسبب أعمال أخرى لهوارد، تُعرف القضايا كأنواع باسم مراسلة كاري-هوارد .
التعريف الرسمي
في نظرية الأنواع التابعة، النوع التابع هو نوع قد تتغير مواصفاته بتغير قيمة معينة، ويمكن اعتباره مماثلاً لعائلة مفهرسة من المجموعات . لنفترضللدلالة على مجموعة من الأنواع، واكتبللإشارة إلى أنهو نوع في. لفترةمن النوع، يكتبعائلة تابعة من الأنواع علىمكتوب، مما يعني أن لكل مصطلحتُحدد العائلة نوعًاوبالتالي، بالنظر إلىو، التعبيريشير إلى نوع يعتمد على القيمة المحددةفي المصطلحات القياسية، يُوصف هذا بالقول إن النوعيختلف بـ.
النوع Π
الدالة التي يتغير نوع القيمة المُعادة بتغير وسيطها (أي ليس لها مجال مُقابل ثابت ) تُسمى دالة تابعة ، ويُسمى نوع هذه الدالة نوع الضرب التابع ، أو نوع باي ( نوع Π )، أو نوع الدالة التابعة . [ 4 ] وهي تنتمي إلى عائلة من الأنواع.يمكننا بناء نوع الدوال التابعة، والتي تكون حدودها دوال تأخذ حدًاوأعد مصطلحًا فيفي هذا المثال، يُكتب نوع الدالة التابعة عادةً على النحو التالي:أو.
لوإذا كانت دالة ثابتة، فإن نوع المنتج التابع المقابل لها يكافئ نوع الدالة العادية . أي،يُعتبر متساوياً من حيث الحكم معمتىلا يعتمد على.
يُستمد اسم "النمط Π" من فكرة إمكانية اعتبار هذه الأنماط بمثابة حاصل ضرب ديكارتي للأنماط. كما يمكن فهم الأنماط Π على أنها نماذج للمكممات الشاملة .
على سبيل المثال، إذا كتبنابالنسبة لمجموعات الأعداد الحقيقية المكونة من n عنصر ، فإنسيكون هذا النوع من الدوال هو الذي يُعطي، عند إدخال عدد طبيعي n ، مجموعة من الأعداد الحقيقية بحجم n . ينشأ فضاء الدوال المعتاد كحالة خاصة عندما لا يعتمد نوع النطاق فعليًا على المُدخل. على سبيل المثالهو نوع من الدوال التي تمتد من الأعداد الطبيعية إلى الأعداد الحقيقية، والتي تُكتب على النحو التالي:في حساب التفاضل والتكامل اللامدا المكتوب.
ولتقديم مثال أكثر واقعية، خذأن يكون نوع الأعداد الصحيحة غير الموقعة من 0 إلى 255 (الأعداد التي تتناسب مع 8 بتات أو 1 بايت) ول، ثميتحول إلى نتاج.
النوع Σ
النوع الثنائي لنوع المنتج التابع هو نوع الزوج التابع ، أو نوع المجموع التابع ، أو نوع سيجما ، أو (بشكل مُربك) نوع المنتج التابع . [ 4 ] يمكن أيضًا فهم أنواع سيجما على أنها مُكمِّمات وجودية . بالاستمرار في المثال أعلاه، إذا، في عالم الأنواعيوجد نوعوعائلة من الأنواعثم يوجد نوع الزوج التابع(الرموز البديلة مشابهة لتلك الخاصة بأنواع Π .)
يُجسّد نوع الزوج التابع فكرة الزوج المرتب حيث يعتمد نوع الحد الثاني على قيمة الحد الأول.ثمو. لوإذا كانت دالة ثابتة، فإن نوع الزوج التابع يصبح (يساوي حكمياً) نوع الضرب ، أي الضرب الديكارتي العادي[ 4 ]
ولتقديم مثال أكثر واقعية، خذأن يكون مرة أخرى نوعًا من الأعداد الصحيحة غير الموقعة من 0 إلى 255، وأن يكون مساوياً مرة أخرى لـلـ 256 أخرى عشوائية، ثميتحول إلى المجموع.
مثال على التحديد الكمي الوجودي
يتركليكن نوعًا ما، وليكنبحسب مراسلات كاري-هوارد،يمكن تفسيرها على أنها مسند منطقي من حيثبالنسبة لـ، سواء كان النوعيشير كون المكان مأهولاً إلى ما إذا كانيُحقق هذا الشرط. ويمكن توسيع نطاق هذا التوافق ليشمل التحديد الكمي الوجودي والأزواج التابعة: القضيةيكون صحيحًا إذا وفقط إذا كان النوعمأهولة بالسكان.
على سبيل المثال،أقل من أو يساويإذا وفقط إذا كان هناك عدد طبيعي آخربحيثفي المنطق، يتم تقنين هذه العبارة من خلال التحديد الكمي الوجودي:
يتوافق هذا الاقتراح مع نوع الزوج التابع:
أي دليل على صحة العبارة التيأقل من أو يساويهو زوج يحتوي على عدد غير سالب، وهو الفرق بينووبرهان على المساواة.
أنظمة مكعب لامدا
طوّر هينك باريندريخت مكعب لامدا كوسيلة لتصنيف أنظمة الأنواع على ثلاثة محاور. تمثل كل زاوية من زوايا المخطط المكعب الناتج نظام نوع، حيث يقع حساب لامدا البسيط في الزاوية الأقل تعبيرًا، بينما يقع حساب الإنشاءات في الزاوية الأكثر تعبيرًا. تتوافق محاور المكعب الثلاثة مع ثلاثة إضافات مختلفة لحساب لامدا البسيط: إضافة الأنواع التابعة، وإضافة تعدد الأشكال، وإضافة مُنشئات الأنواع ذات الرتب الأعلى (مثل الدوال من نوع إلى آخر). يُعمّم مكعب لامدا بشكل أكبر بواسطة أنظمة الأنواع النقية .
نظرية النوع التابع من الدرجة الأولى
النظاميتم الحصول على أنواع التبعية من الدرجة الأولى البحتة، والتي تتوافق مع الإطار المنطقي LF ، من خلال تعميم نوع فضاء الدالة لحساب لامدا البسيط إلى نوع المنتج التابع.
نظرية النوع التابع من الدرجة الثانية
النظاميتم الحصول على أنواع التبعية من الدرجة الثانية منمن خلال السماح بالقياس الكمي على مُنشئات الأنواع. في هذه النظرية، يشمل عامل الضرب التابع كلاً منعامل حساب التفاضل والتكامل لامدا ذي النوع البسيط ومجلد النظام F.
حساب التفاضل والتكامل متعدد الأشكال من الرتبة العليا والمعتمد على النوع
الأنظمة ذات الرتبة الأعلىيمتدإلى جميع أشكال التجريد الأربعة من مكعب لامدا : الدوال من حدود إلى حدود، ومن أنواع إلى أنواع، ومن حدود إلى أنواع، ومن أنواع إلى حدود. يتوافق هذا النظام مع حساب الإنشاءات، الذي يُعد مشتقّه، حساب الإنشاءات الاستقرائية ، النظام الأساسي لروك.
لغة البرمجة والمنطق المتزامنان
تُشير علاقة كاري-هوارد إلى إمكانية إنشاء أنواع تُعبّر عن خصائص رياضية معقدة كيفما كانت. إذا قدّم المستخدم برهانًا بنائيًا على وجود نوع ما (أي وجود قيمة من هذا النوع)، فبإمكان المُصرّف التحقق من البرهان وتحويله إلى شيفرة حاسوبية قابلة للتنفيذ لحساب القيمة من خلال تنفيذ عملية الإنشاء. تُقرّب خاصية التحقق من البرهان لغات البرمجة ذات الأنواع التابعة من برامج مساعدة البرهان . يُوفّر جانب توليد الشيفرة منهجًا قويًا للتحقق الرسمي من البرامج والشيفرة الحاملة للبرهان ، حيث تُشتق الشيفرة مباشرةً من برهان رياضي تم التحقق منه آليًا.
مقارنة اللغات ذات الأنواع التابعة
| لغة | تم تطويره بنشاط | النموذج [ أ ] | التكتيكات | شروط الإثبات | التحقق من إنهاء الخدمة | يمكن أن تعتمد الأنواع على [ ب ] | عوالم | عدم أهمية الدليل | استخراج البرنامج | يؤدي الاستخراج إلى حذف المصطلحات غير ذات الصلة |
|---|---|---|---|---|---|---|---|---|---|---|
| أغدا | نعم [ 5 ] | وظيفي بحت | قليل/محدود [ ج ] | نعم | نعم (اختياري) | أي مصطلح | نعم (اختياري) [ د ] | الحجج غير ذات الصلة بالبرهان [ 7 ] القضايا غير ذات الصلة بالبرهان [ 8 ] | هاسكل ، جافا سكريبت | نعم [ 7 ] |
| نظام تتبع التطبيقات | نعم [ 9 ] | وظيفي / أمري | لا [ 10 ] | نعم | نعم | المصطلحات الثابتة [ 11 ] | ؟ | نعم | نعم | نعم |
| حريف | لا | وظيفي بحت | لا | نعم | لا | أي مصطلح | لا | لا | ؟ | ؟ |
| غالينا ( روك (المعروفة سابقًا باسم كوك )) | نعم [ 12 ] | وظيفي بحت | نعم | نعم | نعم | أي مصطلح | نعم [ هـ ] | نعم [ 13 ] | هاسكل ، سكيم ، أوكاميل | نعم |
| التعلم الآلي التابع | لا [ f ] | ؟ | ؟ | نعم | ؟ | الأعداد الطبيعية | ؟ | ؟ | ؟ | ؟ |
| F* | نعم [ 14 ] | وظيفي وضروري | نعم [ 15 ] | نعم | نعم (اختياري) | أي بيورمان | نعم | نعم | OCaml و F# و C | نعم |
| المعلم | لا [ 16 ] | وظيفي بحت [ 17 ] | hypjoin [ 18 ] | نعم [ 17 ] | نعم | أي مصطلح | لا | نعم | الكراوية | نعم |
| إدريس | نعم [ 19 ] | وظيفي بحت [ 20 ] | نعم | نعم | نعم (اختياري) | أي مصطلح | نعم | لا | نعم | نعم |
| نحيف | نعم | وظيفي بحت | نعم | نعم | نعم | أي مصطلح | نعم | نعم | نعم | نعم |
| ماتيتا | نعم [ 21 ] | وظيفي بحت | نعم | نعم | نعم | أي مصطلح | نعم | نعم | أوكاميل | نعم |
| NuPRL | نعم | وظيفي بحت | نعم | نعم | نعم | أي مصطلح | نعم | ؟ | نعم | ؟ |
| PVS | نعم | ؟ | نعم | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| تمت أرشفة Sage بتاريخ 9 نوفمبر 2020 على موقع Wayback Machine . | لا [ g ] | وظيفي بحت | لا | لا | لا | ؟ | لا | ؟ | ؟ | ؟ |
| اثنا عشر | نعم | البرمجة المنطقية | ؟ | نعم | نعم (اختياري) | أي مصطلح (LF) | لا | لا | ؟ | ؟ |
- ↑ يشير هذا إلى اللغة الأساسية ، وليس إلى أي تكتيك ( إجراء إثبات النظرية ) أو لغة فرعية لتوليد التعليمات البرمجية.
- ↑ رهناً بالقيود الدلالية، مثل قيود الكون
- ↑ حل الحلقة [ 6 ]
- ↑ الأكوان الاختيارية، وتعدد أشكال الأكوان الاختيارية، والأكوان الاختيارية المحددة صراحةً
- ↑ الأكوان، وقيود الكون المستنتجة تلقائيًا (ليست هي نفسها تعدد أشكال الكون في أغدا) والطباعة الصريحة الاختيارية لقيود الكون
- ↑ تم استبداله بواسطة ATS
- ↑ يعود تاريخ آخر ورقة بحثية من Sage وآخر لقطة للرمز البرمجي إلى عام 2006
انظر أيضاً
مراجع
- ↑ هوفمان، مارتن (1995)، المفاهيم الامتدادية في نظرية النوع القصدي (PDF)
- ↑ سورنسن، مورتن هاين ب.؛ أورزيتشين، باول (1998)، محاضرات حول تماثل كاري-هوارد ، CiteSeerX 10.1.1.17.7385
- ↑ بوف، آنا؛ ديبجر، بيتر (2008). أنماط الاعتماد في العمل (ملف PDF) (تقرير). جامعة تشالمرز للتكنولوجيا.
- 1 2 3 ألتنكيرش، ثورستن؛ دانييلسون، نيلز أندرس؛ لوه، أندريس؛ أوري، نيكولاس (2010). "ΠΣ: أنواع تابعة بدون تعقيدات" (ملف PDF) . في: بلوم، ماتياس؛ كوباياشي، ناوكي؛ فيدال، جيرمان (محررون). البرمجة الوظيفية والمنطقية، الندوة الدولية العاشرة، FLOPS 2010، سينداي، اليابان، 19-21 أبريل 2010. وقائع المؤتمر . سلسلة محاضرات في علوم الحاسوب. المجلد 6009. سبرينغر. الصفحات 40-55 . doi : 10.1007/978-3-642-12251-4_5 .
- ↑ "صفحة تنزيل Agda" .
- ↑ "Agda Ring Solver" .
- 1 2 "إعلان: أغدا 2.2.8" . مؤرشف من الأصل بتاريخ 18-07-2011 . تم الاطلاع عليه بتاريخ 28-09-2010 .
- ↑ "سجل تغييرات Agda 2.6.0" .
- ↑ "تنزيلات ATS2" .
- ↑ "رسالة بريد إلكتروني من مخترع نظام ATS، هونغوي شي" .
- ↑ شي، هونغوي (مارس 2017). "نظام النوع التطبيقي: منهج للبرمجة العملية باستخدام إثبات النظريات" (ملف PDF) . arXiv : 1703.08683 .
- ↑ "تغييرات Coq في مستودع Subversion" .
- ↑ "مقدمة SProp في Coq 8.10" .
- ↑ "تغييرات F* على GitHub" . GitHub .
- ↑ "ملاحظات إصدار F* v0.9.5.0 على GitHub" . GitHub .
- ↑ "Guru SVN" .
- 1 2 آرون ستامب (6 أبريل 2009). "البرمجة الموثقة في غورو" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 29 ديسمبر 2009. تم الاطلاع عليه في 28 سبتمبر 2010 .
- ↑ بيتر، آدم (مايو 2008). تحديد قابلية الربط وفقًا للمعادلات الأساسية في نظرية النوع التشغيلي (ملف PDF) (ماجستير). جامعة واشنطن . تم الاطلاع عليه بتاريخ 14 أكتوبر 2010 .
- ↑ "مستودع إدريس جيت" . جيت هاب . 17 مايو 2022.
- ↑ برادي، إدوين. "إدريس، لغة ذات أنواع تابعة - ملخص موسع" (ملف PDF) . CiteSeerX 10.1.1.150.9442 .
- ↑ "ماتيتا إس في إن" . مؤرشف من الأصل بتاريخ 2006-05-08 . تم الاطلاع عليه بتاريخ 2010-09-29 .
للمزيد من القراءة
- مارتن-لوف، بير (1984). نظرية النوع الحدسية (ملف PDF) . بيبليوبوليس.
- نوردستروم، بينجت؛ بيترسون، كينت؛ سميث، جان م. (1990). البرمجة في نظرية النوع لمارتن لوف: مقدمة . مطبعة جامعة أكسفورد. رقم ISBN 9780198538141.
- باريندريخت، هـ. (1992). "حسابات لامدا مع الأنواع" . في: أبرامسكي، س.؛ غاباي، د.؛ مايباوم، ت. (محررون). دليل المنطق في علوم الحاسوب . منشورات أكسفورد للعلوم . doi : 10.1017/CBO9781139032636 . hdl : 2066/17231 .
- براندل، هيلموت (2022). حساب الإنشاءات
- ماكبرايد، كونور ؛ ماكينا، جيمس (يناير 2004). "الرؤية من اليسار" . مجلة البرمجة الوظيفية . 14 (1): 69-111 . doi : 10.1017/s0956796803004829 . S2CID 6232997 .
- ألتنكيرش، ثورستن ؛ ماكبرايد، كونور ؛ ماكينا، جيمس (2006). "لماذا تُعدّ الأنواع التابعة مهمة" (ملف PDF) . وقائع الندوة الثالثة والثلاثين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة، POPL 2006، تشارلستون، كارولاينا الجنوبية، الولايات المتحدة الأمريكية، 11-13 يناير . ISBN 1-59593-027-2.
- نوريل، أولف (سبتمبر 2007). نحو لغة برمجة عملية قائمة على نظرية الأنواع التابعة (ملف PDF) (أطروحة دكتوراه). غوتنبرغ، السويد: قسم علوم وهندسة الحاسوب، جامعة تشالمرز للتكنولوجيا. ISBN 978-91-7291-996-9.
- أوري، نيكولاس؛ سويرسترا، ووتر (2008). "قوة باي" (ملف PDF) . وقائع المؤتمر الدولي الثالث عشر لجمعية ACM SIGPLAN حول البرمجة الوظيفية (ICFP '08) . الصفحات 39-50 . doi : 10.1145/1411204.1411213 . ISBN 9781595939197. S2CID 16176901 .
- نوريل، أولف (2009). “البرمجة التي تعتمد على الكتابة في Agda” (PDF) . في كوبمان، ص. بلازميجير، ر.؛ سويرسترا، د. (محرران). البرمجة الوظيفية المتقدمة. وكالة فرانس برس 2008 . ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 5832. سبرينغر. ص 230 – 266. دوى : 10.1007 / 978-3-642-04652-0_5 . رقم ISBN 978-3-642-04651-3.
- سيتنيكوفسكي، بورو (2018). مقدمة مبسطة لأنواع البيانات التابعة باستخدام إدريس . دار النشر لين. رقم ISBN 978-1723139413.
- ماكبرايد، كونور ؛ نوردفال-فورسبيرغ، فريدريك (2022). "أنظمة أنواع البرامج التي تراعي الأبعاد" (ملف PDF) . الأدوات الرياضية والحسابية المتقدمة في علم القياس والاختبار الثاني عشر . التقدم في الرياضيات للعلوم التطبيقية. وورلد ساينتيفيك. الصفحات 331-345 . doi : 10.1142/9789811242380_0020 . ISBN 9789811242380. S2CID 243831207 .
روابط خارجية
- البرمجة المعتمدة على النوع 2008
- البرمجة المعتمدة على النوع 2010
- البرمجة المعتمدة على النوع 2011
- "النوع التابع" في ويكي هاسكل
- نظرية النوع التابع في مختبر ن
- النوع التابع في مختبر ن
- نوع المنتج التابع في مختبر n
- نوع المجموع التابع في المختبر n
- المنتج التابع في مختبر ن
- المجموع التابع عند المختبر n
- أسس الرياضيات
- البرمجة المعتمدة على النوع
- نظرية الأنواع
- أنظمة الكتابة
