النوع التابع

في علوم الحاسوب والمنطق ، يُعرف النوع التابع بأنه نوع يعتمد تعريفه على قيمة معينة. وهو سمة مشتركة بين نظرية الأنواع وأنظمة الأنواع . في نظرية الأنواع الحدسية ، تُستخدم الأنواع التابعة لترميز مُكمِّمات المنطق مثل "لكل" و"يوجد". في لغات البرمجة الوظيفية مثل Agda و ATS و Rocq (المعروفة سابقًا باسم Coq ) و F* و Epigram و Idris و Lean ، تُسهم الأنواع التابعة في تقليل الأخطاء البرمجية من خلال تمكين المبرمج من تحديد أنواع تُقيِّد مجموعة التطبيقات الممكنة.

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

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

تاريخ

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

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

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

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

في نظرية الأنواع التابعة، النوع التابع هو نوع قد تتغير مواصفاته بتغير قيمة معينة، ويمكن اعتباره مماثلاً لعائلة مفهرسة من المجموعات . لنفترضيو{\displaystyle {\mathcal {U}}}للدلالة على مجموعة من الأنواع، واكتبأ:يو{\displaystyle A:{\mathcal {U}}}للإشارة إلى أنأ{\displaystyle A}هو نوع فييو{\displaystyle {\mathcal {U}}}. لفترةأ{\displaystyle a}من النوعأ{\displaystyle A}، يكتبأ:أ{\displaystyle a:A}عائلة تابعة من الأنواع علىأ{\displaystyle A}مكتوبب:أيو{\displaystyle B:A\to {\mathcal {U}}}، مما يعني أن لكل مصطلحأ:أ{\displaystyle a:A}تُحدد العائلة نوعًاب(أ):يو{\displaystyle B(a):{\mathcal {U}}}وبالتالي، بالنظر إلىأ:يو{\displaystyle A:{\mathcal {U}}}وب:أيو{\displaystyle B:A\to {\mathcal {U}}}، التعبيرب(أ){\displaystyle B(a)}يشير إلى نوع يعتمد على القيمة المحددةأ{\displaystyle a}في المصطلحات القياسية، يُوصف هذا بالقول إن النوعب(أ){\displaystyle B(a)}يختلف بـأ{\displaystyle a}.

النوع Π

الدالة التي يتغير نوع القيمة المُعادة بتغير وسيطها (أي ليس لها مجال مُقابل ثابت ) تُسمى دالة تابعة ، ويُسمى نوع هذه الدالة نوع الضرب التابع ، أو نوع باي ( نوع Π )، أو نوع الدالة التابعة . [ 4 ] وهي تنتمي إلى عائلة من الأنواع.ب:أيو{\displaystyle B:A\to {\mathcal {U}}}يمكننا بناء نوع الدوال التابعةx:أب(x){\textstyle \prod _{x:A}B(x)}، والتي تكون حدودها دوال تأخذ حدًاأ:أ{\displaystyle a:A}وأعد مصطلحًا فيب(أ){\displaystyle B(a)}في هذا المثال، يُكتب نوع الدالة التابعة عادةً على النحو التالي:x:أب(x){\textstyle \prod _{x:A}B(x)}أو(x:أ)ب(x){\textstyle \prod {(x:A)}B(x)}.

لوب:أيو{\displaystyle B:A\to {\mathcal {U}}}إذا كانت دالة ثابتة، فإن نوع المنتج التابع المقابل لها يكافئ نوع الدالة العادية . أي،x:أب{\textstyle \prod _{x:A}B}يُعتبر متساوياً من حيث الحكم معأب{\displaystyle A\to B}متىب{\displaystyle B}لا يعتمد علىx{\displaystyle x}.

يُستمد اسم "النمط Π" من فكرة إمكانية اعتبار هذه الأنماط بمثابة حاصل ضرب ديكارتي للأنماط. كما يمكن فهم الأنماط Π على أنها نماذج للمكممات الشاملة .

على سبيل المثال، إذا كتبنامتجه(R،ن){\displaystyle \operatorname {Vec} (\mathbb {R} ,n)}بالنسبة لمجموعات الأعداد الحقيقية المكونة من n عنصر ، فإنن:شمالمتجه(R،ن){\textstyle \prod _{n:\mathbb {N} }\operatorname {Vec} (\mathbb {R} ,n)}سيكون هذا النوع من الدوال هو الذي يُعطي، عند إدخال عدد طبيعي n ، مجموعة من الأعداد الحقيقية بحجم n . ينشأ فضاء الدوال المعتاد كحالة خاصة عندما لا يعتمد نوع النطاق فعليًا على المُدخل. على سبيل المثالن:شمالR{\textstyle \prod _{n:\mathbb {N} }{\mathbb {R} }}هو نوع من الدوال التي تمتد من الأعداد الطبيعية إلى الأعداد الحقيقية، والتي تُكتب على النحو التالي:شمالR{\displaystyle \mathbb {N} \to \mathbb {R} }في حساب التفاضل والتكامل اللامدا المكتوب.

ولتقديم مثال أكثر واقعية، خذأ{\displaystyle A}أن يكون نوع الأعداد الصحيحة غير الموقعة من 0 إلى 255 (الأعداد التي تتناسب مع 8 بتات أو 1 بايت) وب(أ)=Xأ{\displaystyle B(a)=X_{a}}لأ:أ{\displaystyle a:A}، ثمx:أب(x){\textstyle \prod _{x:A}B(x)}يتحول إلى نتاجX0×X1×X2×...×X253×X254×X255{\displaystyle X_{0}\times X_{1}\times X_{2}\times \ldots \times X_{253}\times X_{254}\times X_{255}}.

النوع Σ

النوع الثنائي لنوع المنتج التابع هو نوع الزوج التابع ، أو نوع المجموع التابع ، أو نوع سيجما ، أو (بشكل مُربك) نوع المنتج التابع . [ 4 ] يمكن أيضًا فهم أنواع سيجما على أنها مُكمِّمات وجودية . بالاستمرار في المثال أعلاه، إذا، في عالم الأنواعيو{\displaystyle {\mathcal {U}}}يوجد نوعأ:يو{\displaystyle A:{\mathcal {U}}}وعائلة من الأنواعب:أيو{\displaystyle B:A\to {\mathcal {U}}}ثم يوجد نوع الزوج التابعx:أب(x){\textstyle \sum _{x:A}B(x)}(الرموز البديلة مشابهة لتلك الخاصة بأنواع Π .)

يُجسّد نوع الزوج التابع فكرة الزوج المرتب حيث يعتمد نوع الحد الثاني على قيمة الحد الأول.(أ،ب):x:أب(x)،{\textstyle (a,b):\sum _{x:A}B(x),}ثمأ:أ{\displaystyle a:A}وب:ب(أ){\displaystyle b:B(a)}. لوب{\displaystyle B}إذا كانت دالة ثابتة، فإن نوع الزوج التابع يصبح (يساوي حكمياً) نوع الضرب ، أي الضرب الديكارتي العاديأ×ب{\displaystyle A\times B}[ 4 ]

ولتقديم مثال أكثر واقعية، خذأ{\displaystyle A}أن يكون مرة أخرى نوعًا من الأعداد الصحيحة غير الموقعة من 0 إلى 255، وب(أ){\displaystyle B(a)}أن يكون مساوياً مرة أخرى لـXأ{\displaystyle X_{a}}لـ 256 أخرى عشوائيةXأ{\displaystyle X_{a}}، ثمx:أب(x){\textstyle \sum _{x:A}B(x)}يتحول إلى المجموعX0+X1+X2+...+X253+X254+X255{\displaystyle X_{0}+X_{1}+X_{2}+\ldots +X_{253}+X_{254}+X_{255}}.

مثال على التحديد الكمي الوجودي

يتركأ:يو{\displaystyle A:{\mathcal {U}}}ليكن نوعًا ما، وليكنب:أيو{\displaystyle B:A\to {\mathcal {U}}}بحسب مراسلات كاري-هوارد،ب{\displaystyle B}يمكن تفسيرها على أنها مسند منطقي من حيثأ{\displaystyle A}بالنسبة لـأ:أ{\displaystyle a:A}، سواء كان النوعب(أ){\displaystyle B(a)}يشير كون المكان مأهولاً إلى ما إذا كانأ{\displaystyle a}يُحقق هذا الشرط. ويمكن توسيع نطاق هذا التوافق ليشمل التحديد الكمي الوجودي والأزواج التابعة: القضيةأأب(أ){\displaystyle \exists {a}{\in }A\,B(a)}يكون صحيحًا إذا وفقط إذا كان النوعأ:أب(أ){\textstyle \sum _{a:A}B(a)}مأهولة بالسكان.

على سبيل المثال،م:شمال{\displaystyle m:\mathbb {N} }أقل من أو يساوين:شمال{\displaystyle n:\mathbb {N} }إذا وفقط إذا كان هناك عدد طبيعي آخرك:شمال{\displaystyle k:\mathbb {N} }بحيثم+ك=ن{\displaystyle m+k=n}في المنطق، يتم تقنين هذه العبارة من خلال التحديد الكمي الوجودي:

منكشمالم+ك=ن.{\displaystyle m\leq n\iff \exists {k}{\in }\mathbb {N} \,m+k=n.}

يتوافق هذا الاقتراح مع نوع الزوج التابع:

ك:شمالم+ك=ن.{\displaystyle \sum _{k:\mathbb {N} }m+k=n.}

أي دليل على صحة العبارة التيم{\displaystyle m}أقل من أو يساوين{\displaystyle n}هو زوج يحتوي على عدد غير سالبك{\displaystyle k}، وهو الفرق بينم{\displaystyle m}ون{\displaystyle n}وبرهان على المساواةم+ك=ن{\displaystyle m+k=n}.

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

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

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

النظامλΠ{\displaystyle \lambda \Pi }يتم الحصول على أنواع التبعية من الدرجة الأولى البحتة، والتي تتوافق مع الإطار المنطقي LF ، من خلال تعميم نوع فضاء الدالة لحساب لامدا البسيط إلى نوع المنتج التابع.

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

النظامλΠ2{\displaystyle \lambda \Pi 2}يتم الحصول على أنواع التبعية من الدرجة الثانية منλΠ{\displaystyle \lambda \Pi }من خلال السماح بالقياس الكمي على مُنشئات الأنواع. في هذه النظرية، يشمل عامل الضرب التابع كلاً من{\displaystyle \to }عامل حساب التفاضل والتكامل لامدا ذي النوع البسيط و{\displaystyle \forall }مجلد النظام F.

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

الأنظمة ذات الرتبة الأعلىλΠω{\displaystyle \lambda \Pi \omega }يمتدλΠ2{\displaystyle \lambda \Pi 2}إلى جميع أشكال التجريد الأربعة من مكعب لامدا : الدوال من حدود إلى حدود، ومن أنواع إلى أنواع، ومن حدود إلى أنواع، ومن أنواع إلى حدود. يتوافق هذا النظام مع حساب الإنشاءات، الذي يُعد مشتقّه، حساب الإنشاءات الاستقرائية ، النظام الأساسي لروك.

لغة البرمجة والمنطق المتزامنان

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

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

لغةتم تطويره بنشاطالنموذج [ أ ]التكتيكاتشروط الإثباتالتحقق من إنهاء الخدمةيمكن أن تعتمد الأنواع على [ ب ]عوالمعدم أهمية الدليلاستخراج البرنامجيؤدي الاستخراج إلى حذف المصطلحات غير ذات الصلة
أغدانعم [ 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)لالا؟؟
  1. يشير هذا إلى اللغة الأساسية ، وليس إلى أي تكتيك ( إجراء إثبات النظرية ) أو لغة فرعية لتوليد التعليمات البرمجية.
  2. رهناً بالقيود الدلالية، مثل قيود الكون
  3. حل الحلقة [ 6 ]
  4. الأكوان الاختيارية، وتعدد أشكال الأكوان الاختيارية، والأكوان الاختيارية المحددة صراحةً
  5. الأكوان، وقيود الكون المستنتجة تلقائيًا (ليست هي نفسها تعدد أشكال الكون في أغدا) والطباعة الصريحة الاختيارية لقيود الكون
  6. تم استبداله بواسطة ATS
  7. يعود تاريخ آخر ورقة بحثية من Sage وآخر لقطة للرمز البرمجي إلى عام 2006

انظر أيضاً

مراجع

  1. هوفمان، مارتن (1995)، المفاهيم الامتدادية في نظرية النوع القصدي (PDF)
  2. سورنسن، مورتن هاين ب.؛ أورزيتشين، باول (1998)، محاضرات حول تماثل كاري-هوارد ، CiteSeerX 10.1.1.17.7385 
  3. بوف، آنا؛ ديبجر، بيتر (2008). أنماط الاعتماد في العمل (ملف PDF) (تقرير). جامعة تشالمرز للتكنولوجيا.
  4. 1 2 3 ألتنكيرش، ثورستن؛ دانييلسون، نيلز أندرس؛ لوه، أندريس؛ أوري، نيكولاس (2010). "ΠΣ: أنواع تابعة بدون تعقيدات" (ملف PDF) . في: بلوم، ماتياس؛ كوباياشي، ناوكي؛ فيدال، جيرمان (محررون). البرمجة الوظيفية والمنطقية، الندوة الدولية العاشرة، FLOPS 2010، سينداي، اليابان، 19-21 أبريل 2010. وقائع المؤتمر . سلسلة محاضرات في علوم الحاسوب. المجلد 6009. سبرينغر. الصفحات 40-55 . doi : 10.1007/978-3-642-12251-4_5 .  
  5. "صفحة تنزيل Agda" .
  6. "Agda Ring Solver" .
  7. 1 2 "إعلان: أغدا 2.2.8" . مؤرشف من الأصل بتاريخ 18-07-2011 . تم الاطلاع عليه بتاريخ 28-09-2010 .
  8. "سجل تغييرات Agda 2.6.0" .
  9. "تنزيلات ATS2" .
  10. "رسالة بريد إلكتروني من مخترع نظام ATS، هونغوي شي" .
  11. شي، هونغوي (مارس 2017). "نظام النوع التطبيقي: منهج للبرمجة العملية باستخدام إثبات النظريات" (ملف PDF) . arXiv : 1703.08683 .
  12. "تغييرات Coq في مستودع Subversion" .
  13. "مقدمة SProp في Coq 8.10" .
  14. "تغييرات F* على GitHub" . GitHub .
  15. "ملاحظات إصدار F* v0.9.5.0 على GitHub" . GitHub .
  16. "Guru SVN" .
  17. 1 2 آرون ستامب (6 أبريل 2009). "البرمجة الموثقة في غورو" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 29 ديسمبر 2009. تم الاطلاع عليه في 28 سبتمبر 2010 .
  18. بيتر، آدم (مايو 2008). تحديد قابلية الربط وفقًا للمعادلات الأساسية في نظرية النوع التشغيلي (ملف PDF) (ماجستير). جامعة واشنطن . تم الاطلاع عليه بتاريخ 14 أكتوبر 2010 .
  19. "مستودع إدريس جيت" . جيت هاب . 17 مايو 2022.
  20. برادي، إدوين. "إدريس، لغة ذات أنواع تابعة - ملخص موسع" (ملف PDF) . CiteSeerX 10.1.1.150.9442 . 
  21. "ماتيتا إس في إن" . مؤرشف من الأصل بتاريخ 2006-05-08 . تم الاطلاع عليه بتاريخ 2010-09-29 .

للمزيد من القراءة