نظام هيندلي-ميلنر للأنواع
نظام هيندلي -ميلنر ( HM ) هو نظام أنواع كلاسيكي لحساب لامدا مع تعدد الأشكال البارامتري . يُعرف أيضًا باسم داماس-ميلنر أو داماس-هيندلي-ميلنر . وصفه لأول مرة ج. روجر هيندلي [ 1 ] ، ثم أعاد اكتشافه روبن ميلنر [ 2 ] . وقدّم لويس داماس تحليلًا رسميًا دقيقًا وبرهانًا للطريقة في أطروحته للدكتوراه [ 3 ] [ 4 ] .
من أبرز خصائص HM شموليتها وقدرتها على استنتاج النوع الأكثر عمومية لبرنامج معين دون الحاجة إلى تعليقات توضيحية أو تلميحات من المبرمج. تُعد الخوارزمية W طريقة فعالة لاستنتاج الأنواع عمليًا، وقد طُبقت بنجاح على قواعد بيانات برمجية ضخمة، على الرغم من تعقيدها النظري العالي . [ ملاحظة 1 ] يُفضل استخدام HM مع لغات البرمجة الوظيفية . طُبقت لأول مرة كجزء من نظام أنواع لغة البرمجة ML . ومنذ ذلك الحين، تم توسيع HM بطرق متنوعة، أبرزها إضافة قيود على فئات الأنواع كما هو الحال في Haskell .
مقدمة
تُعدّ طريقة هيندلي-ميلنر طريقةً لاستنتاج أنواع المتغيرات والتعبيرات والدوال من البرامج المكتوبة بأسلوب غير مُحدد النوع. ولأنها حساسة لنطاق المتغيرات ، فهي لا تقتصر على استنتاج الأنواع من جزء صغير من شفرة المصدر فحسب ، بل من البرامج أو الوحدات البرمجية الكاملة. كما أنها قادرة على التعامل مع الأنواع البارامترية ، ما يجعلها أساسيةً لأنظمة الأنواع في العديد من لغات البرمجة الوظيفية . وقد طُبّقت لأول مرة بهذه الطريقة في لغة البرمجة ML .
يعود أصل هذه الخوارزمية إلى خوارزمية استنتاج النوع لحساب لامدا ذي النوع البسيط ، والتي ابتكرها هاسكل كاري وروبرت فيس عام 1958. وفي عام 1969، وسّع ج. روجر هيندلي هذا العمل وأثبت أن خوارزميته تستنتج دائمًا النوع الأكثر عمومية. وفي عام 1978، قدّم روبن ميلنر [ 2 ] ، بشكل مستقل عن عمل هيندلي، خوارزمية مكافئة، وهي الخوارزمية W. وفي عام 1982، أثبت لويس داماس [ 4 ] أخيرًا اكتمال خوارزمية ميلنر، ووسّعها لدعم الأنظمة ذات المراجع متعددة الأشكال.
التماثل الأحادي مقابل التعدد الشكلي
في حساب التفاضل والتكامل اللامدا ذي الأنواع البسيطة ، تكون الأنواع T إما ثوابت من النوع الذري أو أنواع دوال من الشكلتُعتبر هذه الأنواع أحادية الشكل . ومن الأمثلة النموذجية عليها الأنواع المستخدمة في القيم الحسابية:
على عكس ذلك، فإن حساب لامدا غير المُصنَّف لا يتأثر بالتصنيف على الإطلاق، ويمكن تطبيق العديد من وظائفه بشكلٍ ذي معنى على جميع أنواع الوسائط. والمثال البسيط على ذلك هو دالة التطابق.
والتي ببساطة تُعيد القيمة التي تُطبق عليها. ومن الأمثلة الأقل وضوحًا الأنواع ذات المعاملات مثل القوائم .
بينما يعني تعدد الأشكال عمومًا أن العمليات تقبل قيمًا من أكثر من نوع واحد، فإن تعدد الأشكال المستخدم هنا هو تعدد أشكال معياري. نجد في المراجع أيضًا تدوينًا لأنظمة الأنواع ، مما يؤكد الطبيعة المعيارية لتعدد الأشكال. بالإضافة إلى ذلك، يمكن تحديد أنواع الثوابت باستخدام متغيرات أنواع (مُكمَّمة). على سبيل المثال، تُكمِّم أنظمة الأنواع التالية بشكل شامل علىوهذا يعني أنها صحيحة لجميع الاحتمالات الممكنة:
يمكن تحويل الأنواع متعددة الأشكال إلى أنواع أحادية الشكل عن طريق الاستبدال المتسق لمتغيراتها. ومن أمثلة الأنواع أحادية الشكل ما يلي:
وبشكل عام، تكون الأنواع متعددة الأشكال عندما تحتوي على متغيرات النوع، بينما تكون الأنواع التي لا تحتوي عليها أحادية الشكل.
على عكس أنظمة الأنواع المستخدمة في لغات مثل باسكال (1970) وسي (1972)، والتي تدعم الأنواع أحادية الشكل فقط، صُممت لغة هاسكل مع التركيز على تعدد الأشكال البارامتري. ركزت اللغات اللاحقة لتلك المذكورة، مثل سي++ (1985)، على أنواع مختلفة من تعدد الأشكال، وتحديدًا التفرع الفرعي المرتبط بالبرمجة كائنية التوجه، والتحميل الزائد . في حين أن التفرع الفرعي غير متوافق مع هاسكل، إلا أن هناك شكلاً من أشكال التحميل الزائد المنهجي متاحًا في نظام الأنواع القائم على هاسكل.
تعدد الأشكال لـ Let
عند توسيع نطاق استنتاج النوع لحساب لامدا ذي النوع البسيط ليشمل تعدد الأشكال، يجب تحديد ما إذا كان من المقبول إسناد نوع متعدد الأشكال ليس فقط كنوع للتعبير، بل أيضًا كنوع لمتغير مرتبط بـ λ. وهذا من شأنه أن يسمح بإسناد نوع الهوية العام للمتغير 'id' في:
(λ id . ... (id 3) ... (id "text") ... ) (λ x . x)
يؤدي السماح بذلك إلى ظهور حساب لامدا متعدد الأشكال ؛ ومع ذلك، فإن استنتاج النوع في هذا النظام غير قابل للتقرير. [ 5 ] بدلاً من ذلك، يميز HM بين المتغيرات المرتبطة مباشرةً بتعبير ما والمتغيرات الأكثر عمومية المرتبطة بـ λ، ويطلق على الأولى اسم المتغيرات المرتبطة بـ let، ويسمح بتعيين أنواع متعددة الأشكال لهذه المتغيرات فقط. يؤدي هذا إلى تعدد الأشكال let حيث يأخذ المثال أعلاه الشكل التالي:
let id = λ x . x in ... (id 3) ... (id "text") ...
والتي يمكن تحديد نوعها بنوع متعدد الأشكال لـ 'id'. وكما هو موضح، تم توسيع صيغة التعبير لجعل المتغيرات المرتبطة بـ let صريحة، ومن خلال تقييد نظام النوع للسماح فقط للمتغيرات المرتبطة بـ let بأن يكون لها أنواع متعددة الأشكال، بينما يجب أن تحصل المعلمات في تجريدات lambda على نوع أحادي الشكل، يصبح استنتاج النوع قابلاً للتقرير.
ملخص
بقية هذا المقال تسير على النحو التالي:
- تم تعريف نظام أنواع HM. ويتم ذلك من خلال وصف نظام استنتاج يحدد بدقة أي التعبيرات لها أي نوع، إن وجدت.
- ومن ثم، يتجه العمل نحو تطبيق أسلوب استنتاج النوع. وبعد تقديم صيغة معدلة تعتمد على بناء الجملة للنظام الاستنتاجي المذكور أعلاه، يرسم العمل مخططًا لتطبيق فعال (الخوارزمية J)، يعتمد في المقام الأول على الحدس الميتا-منطقي للقارئ.
- لأنه لا يزال من غير الواضح ما إذا كانت الخوارزمية J تحقق بالفعل نظام الاستنتاج الأولي، يتم تقديم تطبيق أقل كفاءة (الخوارزمية W) ويتم التلميح إلى استخدامها في البرهان.
- وأخيراً، تتم مناقشة مواضيع أخرى متعلقة بالخوارزمية.
يتم استخدام نفس الوصف لنظام الاستنتاج في كل مكان، حتى بالنسبة للخوارزميتين، لجعل الأشكال المختلفة التي يتم فيها عرض طريقة HM قابلة للمقارنة بشكل مباشر.
نظام هيندلي-ميلنر النوعي
يمكن وصف نظام الأنواع رسميًا بقواعد نحوية تُحدد لغة التعبيرات والأنواع، وما إلى ذلك. لا يُعدّ عرض هذه القواعد النحوية هنا رسميًا للغاية، إذ كُتبت ليس لدراسة القواعد السطحية ، بل القواعد العميقة ، تاركةً بعض التفاصيل النحوية مفتوحة. هذا الشكل من العرض شائع. وبناءً على ذلك، تُستخدم قواعد الكتابة لتحديد كيفية ارتباط التعبيرات والأنواع. وكما في السابق، فإن الشكل المستخدم مرن إلى حد ما.
بناء الجملة
التعبيرات المطلوب كتابتها هي نفسها تعبيرات حساب لامدا المُوسّعة بتعبير let كما هو موضح في الجدول المجاور. يمكن استخدام الأقواس لتوضيح التعبير. التطبيق ذو ربط يساري، وهو أقوى من الربط التجريدي أو بنية let-in.
تنقسم الأنواع نحويًا إلى مجموعتين، الأنواع الأحادية والأنواع المتعددة. [ ملاحظة 2 ]
المطبوعات الأحادية
تشير الأنماط الأحادية دائمًا إلى نوع معين. الأنماط الأحاديةيتم تمثيلها نحوياً كمصطلحات .
تتضمن أمثلة الأنواع الأحادية ثوابت النوع مثلأووأنواع بارامترية مثلتُعدّ الأنواع الأخيرة أمثلة على تطبيقات دوال النوع ، على سبيل المثال، من المجموعة حيث يشير الرقم العلوي إلى عدد معلمات النوع. المجموعة الكاملة لدوال النوعهو أمر اعتباطي في HM، [ ملاحظة 3 ] باستثناء أنه يجب أن يحتوي على الأقلنوع الدوال. غالبًا ما يُكتب بصيغة الوسطية للتسهيل. على سبيل المثال، الدالة التي تربط الأعداد الصحيحة بالسلاسل النصية لها النوعمرة أخرى، يمكن استخدام الأقواس لتوضيح تعبير النوع. يرتبط التطبيق بشكل أقوى من سهم الوسط، الذي يرتبط من اليمين.
تُقبل متغيرات النوع كأنواع أحادية. يجب عدم الخلط بين الأنواع الأحادية والأنواع أحادية الشكل، التي تستبعد المتغيرات وتسمح فقط بالمصطلحات الأساسية.
يكون نوعان أحاديان متساويين إذا كان لهما نفس الحدود.
الأنماط المتعددة
الأنواع المتعددة (أو مخططات الأنواع ) هي أنواع تحتوي على متغيرات مرتبطة بصفر أو أكثر من المحددات الكمية الشاملة، على سبيل المثال.
دالة متعددة الأنماطيمكن ربط أي قيمة من نفس النوع بنفسها، ودالة الهوية هي قيمة لهذا النوع.
كمثال آخر،هو نوع من الدوال التي تربط جميع المجموعات المنتهية بالأعداد الصحيحة. الدالة التي تُرجع عدد عناصر مجموعة ما ستكون قيمة من هذا النوع.
لا يمكن أن تظهر المحددات الكمية إلا في المستوى الأعلى. على سبيل المثال، نوعيُستثنى من ذلك بواسطة بنية الأنواع. كما تُدرج الأنواع الأحادية ضمن الأنواع المتعددة، وبالتالي يكون للنوع الشكل العام التالي:، أينوهو نمط أحادي.
تعتمد مساواة الأنماط المتعددة على إعادة ترتيب عملية التحديد الكمي وإعادة تسمية المتغيرات المحددة كميًا ((التحويل). علاوة على ذلك، يمكن حذف المتغيرات الكمية التي لا تظهر في النمط الأحادي.
السياق والكتابة
لربط الأجزاء المنفصلة (التعبيرات النحوية والأنواع) معًا بشكلٍ فعّال، نحتاج إلى جزء ثالث: السياق. من الناحية النحوية، السياق عبارة عن قائمة من الأزواج.وتسمى هذه القيم بالتعيينات أو الافتراضات أو القيود ، حيث يحدد كل زوج منها قيمة المتغير.له نوعتُعطي الأجزاء الثلاثة مجتمعةً حكماً على نوع الكتابة.، مشيرًا إلى أنه في ظل الافتراضات، التعبيرله نوع.
متغيرات النوع الحر
في نوع، الرمزهل المحدد الكمي يربط متغيرات النوع؟في النمط الأحاديالمتغيراتتُسمى هذه المتغيرات بالمتغيرات الكمية ، وأي ظهور لمتغير من النوع الكمي فييُطلق عليه اسم المتغيرات المرتبطة ، وجميع المتغيرات غير المرتبطة فيتُسمى مجانية . بالإضافة إلى التحديد الكميفي الأنواع المتعددة، يمكن أيضًا ربط متغيرات النوع من خلال ظهورها في السياق، ولكن مع تأثير عكسي على الجانب الأيمن منتتصرف هذه المتغيرات حينها كثوابت نوعية. وأخيرًا، قد يظهر متغير نوعي غير مُقيد في تعريف النوع، وفي هذه الحالة يكون مُكمّمًا ضمنيًا بالكامل.
يُعدّ وجود كلٍّ من متغيرات النوع المُقيّدة وغير المُقيّدة أمرًا غير شائع في لغات البرمجة. غالبًا ما تُعامل جميع متغيرات النوع ضمنيًا على أنها مُكمّمة بالكامل. على سبيل المثال، لا توجد عبارات تحتوي على متغيرات حرة في لغة برولوج . وبالمثل في لغة هاسكل، [ ملاحظة 4 ] حيث تظهر جميع متغيرات النوع مُكمّمة ضمنيًا، أي أن نوع هاسكل a -> aيعنيهنا. ومن الأمور ذات الصلة، والتي هي أيضاً نادرة جداً، تأثير الربط للجانب الأيمن.من المهام.
عادةً، ينشأ مزيج المتغيرات المقيدة وغير المقيدة من استخدام المتغيرات الحرة في التعبير. الدالة الثابتة K =يقدم مثالاً. وهو من النوع الأحادييمكن فرض تعدد الأشكال عن طريق. فيما يلي،لديه النوعالمتغير الأحادي الحرينشأ من نوع المتغيرمحصور في النطاق المحيط.لديه النوعيمكن للمرء أن يتخيل نوع المتغير الحرفي نوعيلتزم بـفي نوعلكن لا يمكن التعبير عن هذا النطاق في HM. بل يتم تحقيق الربط من خلال السياق.
ترتيب النوع
تعني تعدد الأشكال أن التعبير الواحد يمكن أن يكون له عدد لا نهائي من الأنواع. ولكن في نظام الأنواع هذا، لا تكون هذه الأنواع منفصلة تمامًا، بل يتم تنسيقها بواسطة تعدد الأشكال البارامتري.
على سبيل المثال، الهويةيمكن أن يكونوكذلك نوعها أووغيرهم كثيرون، ولكن ليسالنوع الأكثر عمومية لهذه الدالة هو أما الأنواع الأخرى فهي أكثر تحديدًا ويمكن اشتقاقها من النوع العام عن طريق استبدال نوع آخر بمعامل النوع بشكل متسق ، أي المتغير الكمييفشل المثال المضاد لأن الاستبدال غير متسق.
يمكن إضفاء الطابع الرسمي على الاستبدال المتسق من خلال تطبيق عملية استبدالإلى مصطلح نوع، مكتوبوكما يوحي المثال، فإن الاستبدال لا يرتبط ارتباطًا وثيقًا بالترتيب فحسب، والذي يعبر عن أن نوعًا ما خاص إلى حد ما، ولكن أيضًا بالتحديد الكمي الكامل الذي يسمح بتطبيق الاستبدال.
رسميًا، في HM، نوعهو أكثر عمومية منرسميًا، إذا كان هناك متغير كمي فييتم استبدالها باستمرار بحيث يحصل المرء علىكما هو موضح في الشريط الجانبي. هذا الترتيب جزء من تعريف نوع نظام النوع.
في مثالنا السابق، بتطبيق الاستبدالسيؤدي ذلك إلى.
بينما يُعدّ استبدال نوع أحادي الشكل (أساسي) بمتغير مُكمّم أمرًا بسيطًا، فإن استبدال نوع متعدد الأشكال ينطوي على بعض المخاطر الناجمة عن وجود متغيرات حرة. فعلى وجه الخصوص، لا يجب استبدال المتغيرات غير المُقيّدة، إذ تُعامل هنا كثوابت. إضافةً إلى ذلك، لا يمكن إجراء عمليات التكميم إلا على المستوى الأعلى. عند استبدال نوع مُعامل، يجب رفع مُكمّماته. يوضح الجدول على اليمين هذه القاعدة بدقة.
بدلاً من ذلك، يمكن النظر في استخدام تدوين مكافئ للأنواع المتعددة بدون مُكمِّمات، حيث تُمثَّل المتغيرات المُكمَّمة بمجموعة مختلفة من الرموز. في هذا التدوين، يختزل التخصيص إلى استبدال متسق وبسيط لهذه المتغيرات.
العلاقةهو ترتيب جزئي و هو أصغر عنصر فيه.
النوع الرئيسي
على الرغم من أن تخصيص مخطط النوع يُعد أحد استخدامات الترتيب، إلا أنه يلعب دورًا ثانيًا بالغ الأهمية في نظام الأنواع. يواجه استنتاج الأنواع مع تعدد الأشكال تحديًا يتمثل في تلخيص جميع الأنواع الممكنة التي قد يمتلكها التعبير. يضمن الترتيب وجود مثل هذا التلخيص باعتباره النوع الأكثر عمومية للتعبير.
الاستبدال في عمليات الكتابة
يمكن توسيع نطاق ترتيب الأنواع المحدد أعلاه ليشمل أنواع البيانات لأن التحديد الكمي الضمني لأنواع البيانات يُمكّن من الاستبدال المتسق:
خلافًا لقاعدة التخصيص، لا يُعد هذا جزءًا من التعريف، بل هو، مثل التحديد الكمي الضمني الشامل، نتيجة لقواعد النوع المحددة لاحقًا. تعمل متغيرات النوع الحرة في عملية الكتابة كعناصر نائبة للتحسين المحتمل. تأثير ربط البيئة بمتغيرات النوع الحرة على الجانب الأيمن منإن ما يمنع استبدالها في قاعدة التخصص هو مرة أخرى أن البديل يجب أن يكون متسقًا وأن يشمل عملية الكتابة بأكملها.
ستتناول هذه المقالة أربع مجموعات قواعد مختلفة:
- النظام التصريحي
- النظام النحوي
- الخوارزمية J
- الخوارزمية W
النظام الاستنتاجي
يُطبَّق بناء جملة HM على بناء جملة قواعد الاستدلال التي تُشكِّل جوهر النظام الرسمي ، وذلك باستخدام التصنيفات كأحكام . تُحدِّد كل قاعدة الاستنتاج الذي يُمكن استخلاصه من أي مقدمات. إضافةً إلى الأحكام، يُمكن استخدام بعض الشروط الإضافية المذكورة أعلاه كمقدمات أيضًا.
البرهان باستخدام القواعد هو سلسلة من الأحكام بحيث تُذكر جميع المقدمات قبل النتيجة. تُظهر الأمثلة أدناه شكلاً محتملاً للبراهين. من اليسار إلى اليمين، يُظهر كل سطر النتيجة، ومن القاعدة المطبقة والمقدمات، إما بالإشارة إلى سطر سابق (رقم) إذا كانت المقدمة حكماً أو بجعل المسند صريحاً.
قواعد الكتابة
- انظر أيضًا قواعد الطباعة
يُظهر المربع الجانبي قواعد الاستنتاج لنظام HM. ويمكن تقسيم هذه القواعد تقريبًا إلى مجموعتين:
القواعد الأربع الأولى(الوصول إلى المتغيرات أو الدوال)،( تطبيق ، أي استدعاء دالة بمعامل واحد)،( التجريد ، أي تعريف الدالة) وتتمحور تعريفات المتغيرات حول بناء الجملة، حيث تقدم قاعدة واحدة لكل شكل من أشكال التعبير. ويتضح معناها من النظرة الأولى، إذ تقوم بتفكيك كل تعبير، وإثبات تعبيراته الفرعية، ثم تجمع الأنواع الفردية الموجودة في المقدمات مع النوع الموجود في النتيجة.
أما المجموعة الثانية فتتكون من القاعدتين المتبقيتينويتعاملون مع تخصيص وتعميم الأنواع. بينما القاعدةينبغي أن يكون ذلك واضحاً من القسم الخاص بالتخصص أعلاه ،يكمل هذا الأسلوب ما سبقه، ويعمل في الاتجاه المعاكس. فهو يسمح بالتعميم، أي بتحديد كمية المتغيرات أحادية النمط غير المرتبطة بالسياق.
يُقدّم المثالان التاليان تطبيقًا عمليًا لنظام القواعد. وبما أن كلًا من التعبير والنوع مُعطى، فإنهما يُمثّلان استخدامًا للقواعد للتحقق من النوع.
مثال : برهان علىأين، يمكن كتابتها
مثال : لتوضيح التعميم، يظهر أدناه:
تعدد الأشكال لـ Let
لا يظهر ذلك على الفور، لكن مجموعة القواعد تُشفّر لائحةً تحدد الظروف التي قد يتم بموجبها تعميم نوع ما أو عدم تعميمه، وذلك من خلال استخدام متفاوت قليلاً للأنواع الأحادية والمتعددة في القواعد.وتذكر ذلكوتشير إلى الأنماط المتعددة والأنماط الأحادية على التوالي.
في القاعدة، قيمة المتغير الخاص بمعامل الدالةيُضاف إلى السياق بنوع أحادي الشكل من خلال الفرضيةبينما في القاعدة ، يدخل المتغير إلى البيئة في شكل متعدد الأشكالعلى الرغم من أن وجوديمنع هذا السياق استخدام قاعدة التعميم لأي متغير حر في عملية التخصيص، ويفرض هذا التنظيم نوع المعلمة.في-التعبير يبقى أحادي الشكل، بينما في تعبير let، يمكن إدخال المتغير متعدد الأشكال، مما يجعل التخصيصات ممكنة.
ونتيجةً لهذا التنظيم،لا يمكن تحديد نوعها، لأن المعاملوهو في وضع أحادي الشكل، بينماله نوع، لأنتم إدخالها في تعبير let، وبالتالي يتم التعامل معها على أنها متعددة الأشكال.
قاعدة التعميم
تستحق قاعدة التعميم أيضًا نظرة فاحصة. هنا، التكميم الشامل الضمني في الفرضيةيتم نقلها ببساطة إلى الجانب الأيمن منفي الختام، مقيدًا بمُكمِّم كلي صريح. وهذا ممكن، لأنلا يحدث ذلك بحرية في هذا السياق. ومرة أخرى، مع أن هذا يجعل قاعدة التعميم معقولة، إلا أنها ليست نتيجةً حتمية. بل على العكس، تُعد قاعدة التعميم جزءًا من تعريف نظام أنواع HM، والتكميم الضمني الشامل نتيجةً حتمية.
خوارزمية الاستدلال
الآن وقد أصبح نظام الاستدلال في HM جاهزًا، يمكن تقديم خوارزمية والتحقق من صحتها وفقًا للقواعد. أو بدلاً من ذلك، قد يكون من الممكن اشتقاقها من خلال دراسة متعمقة لكيفية تفاعل القواعد وتكوين البرهان. سيتم تناول هذا الموضوع في بقية هذه المقالة، مع التركيز على القرارات الممكنة التي يمكن اتخاذها أثناء إثبات نوع البيانات.
درجات الحرية في اختيار القواعد
عند عزل النقاط في البرهان، حيث لا يكون اتخاذ أي قرار ممكنًا على الإطلاق، فإن المجموعة الأولى من القواعد التي تتمحور حول بناء الجملة لا تترك أي خيار، حيث أن لكل قاعدة نحوية قاعدة تصنيف فريدة، تحدد جزءًا من البرهان، بينما بين النتيجة ومقدمات هذه الأجزاء الثابتة سلاسل منو قد يحدث ذلك. ويمكن أن توجد سلسلة مماثلة بين نتيجة البرهان وقاعدة التعبير العلوي. يجب أن تتخذ جميع البراهين الشكل الموضح.
لأن الخيار الوحيد في البرهان فيما يتعلق باختيار القاعدة هو وتُثير السلاسل، في شكل البرهان، تساؤلاً حول إمكانية جعله أكثر دقة، حيث قد لا تكون هذه السلاسل ضرورية. وهذا في الواقع ممكن، ويؤدي إلى صيغة بديلة لنظام القواعد تخلو من هذه القواعد.
نظام قواعد موجه بالبنية النحوية
يستخدم أحد المعالجات المعاصرة لـ HM نظام قواعد موجه نحو بناء الجملة فقط، والذي وضعه كليمنت [ 6 ]، كخطوة وسيطة. في هذا النظام، يقع التخصيص مباشرة بعد الأصل.وتم دمج القاعدة فيها، بينما أصبح التعميم جزءًا منالقاعدة. هناك، يتم تحديد التعميم أيضًا لإنتاج النوع الأكثر عمومية دائمًا عن طريق إدخال الدالة، الذي يحدد كمياً جميع متغيرات النمط الأحادي غير المرتبطة في.
رسميًا، للتحقق من صحة نظام القواعد الجديد هذايعادل الأصليجب على المرء أن يثبت ذلك، والتي تنقسم إلى برهانين فرعيين:
بينما يمكن ملاحظة الاتساق من خلال تحليل القواعدو لإلى البراهين فيمن المرجح أن يكون واضحًا أنغير مكتمل، إذ لا يمكن للمرء أن يُظهرفيعلى سبيل المثال، ولكن فقط ومع ذلك ، يمكن إثبات نسخة أضعف قليلاً من الاكتمال [ 7 ] ، وهي:
وبالتالي، يمكن للمرء أن يستنتج النوع الرئيسي للتعبير فيمما يسمح لنا بتعميم البرهان في النهاية.
مقارنةوالآن، لا تظهر في أحكام جميع القواعد إلا الأنماط الأحادية. بالإضافة إلى ذلك، أصبح شكل أي برهان ممكن باستخدام نظام الاستدلال مطابقًا لشكل التعبير (كلاهما يُنظر إليهما على أنهما شجرتان ). وبالتالي، يُحدد التعبير شكل البرهان بشكل كامل.من المرجح أن يتم تحديد الشكل وفقًا لجميع القواعد باستثناءو، والتي تسمح ببناء فروع (سلاسل) طويلة بشكل تعسفي بين العقد الأخرى.
درجات الحرية التي تجسد القواعد
بعد معرفة شكل البرهان، نكون قد اقتربنا من صياغة خوارزمية استنتاج الأنواع. ولأن أي برهان لتعبير معين يجب أن يكون له نفس الشكل، يمكننا افتراض أن الأنواع الأحادية في أحكام البرهان غير محددة، ثم ندرس كيفية تحديدها.
هنا، يبرز دور ترتيب الاستبدال (التخصيص). فرغم أنه لا يمكن تحديد الأنواع محليًا للوهلة الأولى، إلا أن الأمل معقود على إمكانية تحسينها باستخدام هذا الترتيب أثناء اجتياز شجرة البرهان، مع افتراض إضافي، نظرًا لأن الخوارزمية الناتجة ستصبح طريقة استدلال، أن النوع في أي فرضية سيُحدد على أنه الأفضل. وفي الواقع، يمكن ذلك، بالنظر إلى قواعديقترح:
- [ ملخص ] : الخيار الحاسم هو τ . في هذه المرحلة، لا يُعرف شيء عن τ ، لذا لا يمكن إلا افتراض النوع الأكثر عمومية، وهوالخطة هي تخصيص النوع إذا دعت الحاجة. لا يُسمح باستخدام نوع متعدد في هذا الموضع، لذا يكفي استخدام قيمة α مؤقتًا. لتجنب عمليات الاستحواذ غير المرغوب فيها، يُعد استخدام متغير نوع غير موجود في البرهان خيارًا آمنًا. إضافةً إلى ذلك، يجب الأخذ في الاعتبار أن هذا النوع الأحادي ليس نهائيًا بعد، بل قد يخضع لمزيد من التحسين.
- [ المتغير ] : يكمن الخيار في كيفية تحسين σ . ولأن أي اختيار لنوع τ هنا يعتمد على استخدام المتغير، وهو أمر غير معروف محليًا، فإن الخيار الأكثر أمانًا هو الأكثر عمومية. باستخدام الطريقة نفسها المذكورة أعلاه، يمكن إنشاء جميع المتغيرات الكمية في σ بمتغيرات أحادية النوع جديدة ، مما يتيح إمكانية تحسينها لاحقًا.
- [ Let ] : القاعدة لا تترك أي خيار. انتهى.
- [ التطبيق ] : قد تفرض قاعدة التطبيق فقط تحسينًا على المتغيرات "المفتوحة" حتى الآن، كما هو مطلوب من كلا المقدمتين.
- تُجبر الفرضية الأولى نتيجة الاستدلال على أن تكون على الشكل التالي:.
- إذا كان الأمر كذلك، فلا بأس. يمكن للمرء لاحقاً اختيار قيمة τ ' للنتيجة.
- وإلا، فقد يكون متغيرًا مفتوحًا. عندئذٍ يمكن تحسينه إلى الشكل المطلوب باستخدام متغيرين جديدين كما في السابق.
- وإلا، فإن فحص النوع يفشل لأن الفرضية الأولى استنتجت نوعًا ليس نوعًا دالة ولا يمكن تحويله إليه .
- يشترط الشرط الثاني أن يكون النوع المُستنتج مساويًا لـ τ في الشرط الأول. الآن، لدينا نوعان قد يكونان مختلفين، وربما يحتويان على متغيرات مفتوحة النوع، للمقارنة والمساواة بينهما إن أمكن. إذا كان ذلك ممكنًا، يتم التوصل إلى تحسين، وإذا لم يكن كذلك، يتم اكتشاف خطأ في النوع مرة أخرى. من المعروف أن هناك طريقة فعالة لـ "مساواة حدين" عن طريق الاستبدال، وهي توحيد روبنسون بالاشتراك مع ما يُسمى بخوارزمية الاتحاد والبحث .
- تُجبر الفرضية الأولى نتيجة الاستدلال على أن تكون على الشكل التالي:.
باختصار، تُمكّن خوارزمية الاتحاد والبحث، عند إعطاء مجموعة جميع الأنواع في برهان، من تجميعها في فئات تكافؤ باستخدام إجراء الاتحاد ، ثم اختيار ممثل لكل فئة باستخدام إجراء البحث . وبالتأكيد، فإن كلمة " إجراء" هنا تعني " أثر جانبي" ، مما يعني الخروج عن نطاق المنطق لإعداد خوارزمية فعّالة. ممثل لـيُحدد ذلك بحيث إذا كان كل من a و b متغيرين من نوع معين، فإن المتغير المُمثل يكون أحدهما بشكل عشوائي، ولكن عند دمج متغير ومصطلح، يصبح المصطلح هو المتغير المُمثل. بافتراض وجود تطبيق لخوارزمية الاتحاد والبحث، يمكن صياغة دمج نوعين أحاديين على النحو التالي:
unify(ta, tb): ta = find(ta) tb = find(tb) إذا كان كل من ta و tb حدين من الشكل D p1..pn مع D و n متطابقين، فقم بتوحيد (ta[i]، tb[i]) لكل معامل i متناظر ، وإلا إذا كان أحد ta أو tb على الأقل متغيرًا من نوع معين ، الاتحاد (ta، tb) وإلا سيظهر خطأ "الأنواع غير متطابقة".
بعد أن تعرفنا على مخطط خوارزمية الاستدلال، سنقدم عرضًا أكثر تفصيلًا في القسم التالي. وقد وُصفت هذه الخوارزمية في كتاب ميلنر [ 2 ] ، الصفحات 370 وما بعدها، باسم الخوارزمية J.
الخوارزمية J
يُعدّ عرض الخوارزمية J إساءة استخدام لترميز القواعد المنطقية، إذ يتضمن آثارًا جانبية ولكنه يسمح بمقارنة مباشرة معمع التعبير عن تنفيذ فعال في الوقت نفسه. تحدد القواعد الآن إجراءً بمعلماتالاستسلامفي الخاتمة حيث يتم تنفيذ المقدمات من اليسار إلى اليمين.
الإجراءمتخصص في النمط المتعددعن طريق نسخ المصطلح واستبدال متغيرات النوع المرتبط بشكل متسق بمتغيرات أحادية النوع جديدة.ينتج متغيرًا أحادي النمط جديدًا. على الأرجح،يجب نسخ النوع الذي يُدخل متغيرات جديدة للقياس الكمي لتجنب عمليات الاستحواذ غير المرغوب فيها. بشكل عام، تعمل الخوارزمية الآن من خلال اتخاذ الخيار الأكثر عمومية دائمًا، تاركةً التخصيص للتوحيد، الذي ينتج في حد ذاته النتيجة الأكثر عمومية. كما ذُكر أعلاه ، فإن النتيجة النهائيةيجب تعميم ذلك علىفي النهاية، للحصول على النوع الأكثر عمومية لتعبير معين.
نظرًا لأن الإجراءات المستخدمة في الخوارزمية تتميز بتكلفة تقارب O(1)، فإن التكلفة الإجمالية للخوارزمية تقترب من التناسب الخطي مع حجم التعبير المراد استنتاج نوعه. وهذا يتناقض بشدة مع العديد من المحاولات الأخرى لاستنباط خوارزميات استنتاج الأنواع، والتي غالبًا ما تبين أنها مسائل صعبة الحل (NP-hard) ، إن لم تكن غير قابلة للحل فيما يتعلق بالإنهاء. وبالتالي، فإن أداء HM يضاهي أفضل خوارزميات التحقق من الأنواع المُستنيرة تمامًا. ويعني التحقق من الأنواع هنا أن الخوارزمية لا يتعين عليها إيجاد برهان، بل يكفيها التحقق من صحة برهان مُعطى.
تنخفض الكفاءة قليلاً لأن ربط متغيرات النوع في السياق يجب الحفاظ عليه للسماح بحسابوتفعيل فحص "يحدث" لمنع إنشاء أنواع متكررة أثناءومن الأمثلة على ذلكوالتي لا يمكن اشتقاق أي نوع لها باستخدام HM. عمليًا، الأنواع عبارة عن حدود صغيرة فقط ولا تُشكل هياكل متوسعة. لذا، في تحليل التعقيد، يمكن التعامل مع مقارنتها كثابت، مع الحفاظ على تكاليف O(1).
إثبات الخوارزمية
في القسم السابق، أثناء عرض الخوارزمية، تم التلميح إلى برهانها باستخدام الاستدلال الميتافيزيقي. ورغم أن هذا يؤدي إلى خوارزمية فعالة J، إلا أنه ليس من الواضح ما إذا كانت الخوارزمية تعكس بشكل صحيح أنظمة الاستدلال D أو S التي تُشكل أساسًا دلاليًا.
تتمثل النقطة الأكثر أهمية في الحجة السابقة في تحسين متغيرات النوع الأحادي المرتبطة بالسياق. على سبيل المثال، تُغير الخوارزمية السياق بشكل جذري أثناء استنتاجها لـ egلأن متغير النمط الأحادي يُضاف إلى سياق المعلمةيحتاج الأمر لاحقًا إلى تحسينه إلىعند معالجة التطبيق. تكمن المشكلة في أن قواعد الاستنتاج لا تسمح بمثل هذا التحسين. إن الادعاء بأنه كان من الممكن إضافة النوع المُحسَّن في وقت سابق بدلاً من متغير النوع الأحادي هو حل مؤقت في أحسن الأحوال.
يكمن مفتاح الوصول إلى حجة مُرضية من الناحية الشكلية في تضمين السياق بشكل صحيح ضمن عملية التحسين. ومن الناحية الشكلية، يتوافق تحديد الأنواع مع استبدال متغيرات الأنواع الحرة.
وبالتالي فإن تحسين المتغيرات الحرة يعني تحسين عملية الكتابة بأكملها.
الخوارزمية W
ومن ثم، يؤدي إثبات الخوارزمية J إلى الخوارزمية W، التي لا تفعل سوى الآثار الجانبية التي تفرضها العملية.صريح من خلال التعبير عن تركيبه التسلسلي عن طريق الاستبدالات لا يزال عرض الخوارزمية W في الشريط الجانبي يستخدم التأثيرات الجانبية في العمليات المكتوبة بخط مائل، ولكنها تقتصر الآن على توليد رموز جديدة. شكل الحكم هو، مما يشير إلى دالة ذات سياق وتعبير كمعامل ينتج عنه نمط أحادي مع استبدال.هو نسخة خالية من الآثار الجانبية منإنتاج بديل هو الموحد الأكثر عمومية .
بينما تُعتبر الخوارزمية W عادةً خوارزمية HM وغالبًا ما يتم تقديمها مباشرةً بعد نظام القواعد في الأدبيات، فإن الغرض منها موصوف من قبل ميلنر [ 2 ] في الصفحة 369 على النحو التالي:
- في وضعها الحالي، لا تُعدّ الخوارزمية W فعّالة بالقدر الكافي؛ إذ تُطبّق عمليات الاستبدال بكثرة. وقد صُمّمت هذه الخوارزمية للمساعدة في إثبات صحتها. ونقدّم الآن خوارزمية أبسط J تُحاكي الخوارزمية W بدقة.
رغم أنه اعتبر W أكثر تعقيدًا وأقل كفاءة، إلا أنه قدمه في منشوره قبل J. وله مزاياه عندما تكون الآثار الجانبية غير متوفرة أو غير مرغوب فيها. كما أن W ضروري لإثبات الاكتمال، وهو ما أخذه في الاعتبار عند إثبات سلامة النتائج.
التزامات الإثبات
قبل صياغة التزامات الإثبات، يجب التأكيد على وجود اختلاف بين أنظمة القواعد D و S والخوارزميات المعروضة.
رغم أن التطوير المذكور أعلاه قد أساء استخدام الأنماط الأحادية كمتغيرات إثبات "مفتوحة"، إلا أنه تم تجنب احتمال تضرر متغيرات الأنماط الأحادية الصحيحة عن طريق إدخال متغيرات جديدة على أمل أن تسير الأمور على ما يرام. ولكن ثمة مشكلة: أحد الوعود التي قُطعت هو أن هذه المتغيرات الجديدة ستُؤخذ في الاعتبار. وهذا الوعد لم يُوفَ به من قِبل الخوارزمية.
وجود سياق، التعبير لا يمكن كتابتها في أي منأولكن الخوارزميات تتوصل إلى النوع، حيث يقوم W أيضًا بتقديم الاستبدالوهذا يعني أن الخوارزمية تفشل في اكتشاف جميع أخطاء النوع. ويمكن معالجة هذا القصور بسهولة من خلال التمييز بدقة أكبر بين متغيرات الإثبات ومتغيرات النوع الأحادي.
كان المؤلفون على دراية تامة بالمشكلة، لكنهم قرروا عدم حلها. قد يُفترض وجود سبب عملي وراء ذلك. فبينما كان من شأن تطبيق استنتاج النوع بشكل أكثر دقة أن يمكّن الخوارزمية من التعامل مع الأنماط الأحادية المجردة، إلا أنها لم تكن ضرورية للتطبيق المقصود حيث لا تحتوي أي من العناصر في سياق موجود مسبقًا على متغيرات حرة. في ضوء ذلك، تم التخلي عن التعقيد غير الضروري لصالح خوارزمية أبسط. أما الجانب السلبي المتبقي فهو أن برهان الخوارزمية فيما يتعلق بنظام القواعد أقل عمومية، ولا يمكن إجراؤه إلا في سياقات تحتوي علىكشرط جانبي.
يتناول الشرط الجانبي في التزام الاكتمال كيف يمكن للاستنتاج أن يُنتج أنواعًا متعددة، بينما تُنتج الخوارزمية نوعًا واحدًا دائمًا. وفي الوقت نفسه، يشترط الشرط الجانبي أن يكون النوع المُستنتج هو الأكثر عمومية.
لإثبات الالتزامات بشكل صحيح، يجب أولاً تعزيزها للسماح بتفعيل مبرهنة الاستبدال.خلالوومن ثم، يتم تقديم البراهين عن طريق الاستقراء على التعبير.
ومن متطلبات البرهان الأخرى مبرهنة الاستبدال نفسها، أي استبدال التصنيف، التي تُثبت في النهاية التكميم الكامل. ولا يمكن إثبات ذلك رسميًا، لعدم وجود صيغة نحوية مناسبة.
الإضافات
التعريفات المتكررة
لجعل البرمجة عملية، نحتاج إلى دوال تكرارية. من الخصائص الأساسية لحساب لامدا أن التعريفات التكرارية غير متاحة بشكل مباشر، ولكن يمكن التعبير عنها باستخدام مُركِّب النقطة الثابتة . مع ذلك، لا يمكن صياغة مُركِّب النقطة الثابتة في نسخة مُنمَّطة من حساب لامدا دون أن يكون لذلك تأثير كارثي على النظام كما هو موضح أدناه.
قاعدة الطباعة
تُظهر الورقة الأصلية [ 4 ] أنه يمكن تحقيق التكرار بواسطة مُجمِّع وبالتالي، يمكن صياغة تعريف تكراري محتمل على النحو التالي: ::={\mathtt {let}}\ v={\mathit {fix}}(\lambda v.e_{1})\ {\mathtt {in}}\ e_{2}} .
أو بدلاً من ذلك، من الممكن توسيع صيغة التعبير وإضافة قاعدة كتابة إضافية:
أين
عملية دمج أساسيةومع تضمين المتغيرات المُعرَّفة بشكل متكرر في مواضع أحادية النوع حيث تظهر على يسارولكن كأنواع متعددة على يمينها.
عواقب
على الرغم من أن ما سبق يبدو واضحاً، إلا أنه يأتي بثمن.
تربط نظرية الأنواع حساب لامدا بالحساب والمنطق. التعديل البسيط المذكور أعلاه له تأثيرات على كليهما:
- تُعتبر خاصية التطبيع القوي غير صالحة، لأنه يمكن صياغة المصطلحات غير المنتهية.
- ينهار المنطق بسبب النوعتصبح مأهولة بالسكان .
التحميل الزائد
يعني التحميل الزائد إمكانية تعريف واستخدام دوال مختلفة بنفس الاسم. توفر معظم لغات البرمجة التحميل الزائد على الأقل مع العمليات الحسابية المدمجة (+، <، إلخ)، مما يسمح للمبرمج بكتابة التعبيرات الحسابية بنفس الشكل، حتى لأنواع عددية مختلفة مثل 0 intأو 1. realولأن دمج هذه الأنواع المختلفة ضمن التعبير نفسه يتطلب تحويلًا ضمنيًا، غالبًا ما يكون التحميل الزائد، خاصةً لهذه العمليات، جزءًا لا يتجزأ من لغة البرمجة نفسها. في بعض اللغات، تُعمم هذه الميزة وتُتاح للمستخدم، كما هو الحال في لغة C++.
على الرغم من تجنب التحميل الزائد المخصص في البرمجة الوظيفية نظرًا لتكاليف الحساب في كلٍ من التحقق من النوع والاستدلال ، فقد تم تقديم وسيلة لتقنين التحميل الزائد تُشبه البرمجة كائنية التوجه في الشكل والتسمية، ولكنها تعمل على مستوى أعلى. "الحالات" في هذه الطريقة المنهجية ليست كائنات (أي على مستوى القيمة)، بل هي أنواع. يستخدم مثال الفرز السريع المذكور في المقدمة التحميل الزائد في الترتيبات، وله التعليق التوضيحي التالي للنوع في لغة هاسكل:
quickSort :: Ord a => [ a ] -> [ a ]هنا، لا يقتصر النوع aعلى كونه متعدد الأشكال فحسب، بل يقتصر أيضًا على كونه نسخة من فئة نوع معينة Ord، توفر شروط الترتيب <وتُستخدم >=في جسم الدالة. ثم تُمرر التطبيقات المناسبة لهذه الشروط إلى خوارزمية الفرز السريع كمعاملات إضافية، بمجرد استخدام الفرز السريع على أنواع أكثر تحديدًا، مما يوفر تطبيقًا واحدًا للدالة المُحمّلة بشكل زائد quickSort.
بما أن "الفئات" لا تسمح إلا بنوع واحد كمعامل لها، فإن نظام الأنواع الناتج لا يزال بإمكانه توفير الاستدلال. بالإضافة إلى ذلك، يمكن تزويد فئات الأنواع بنوع من ترتيب التحميل الزائد، مما يسمح بترتيب الفئات على شكل شبكة .
أنواع الرتبة العليا
يشير تعدد الأشكال البارامتري إلى أن الأنواع نفسها تُمرر كمعاملات كما لو كانت قيمًا حقيقية. تمريرها كوسائط إلى دوال حقيقية، وكذلك إلى "دوال الأنواع" كما في ثوابت الأنواع "البارامترية"، يثير التساؤل حول كيفية تحديد أنواع الأنواع نفسها بشكل أكثر دقة. تُستخدم الأنواع ذات الرتبة العليا لإنشاء نظام أنواع أكثر تعبيرًا.
لم يعد التوحيد قابلاً للتقرير في وجود الأنواع الفوقية، مما يجعل استنتاج النوع مستحيلاً في هذا النطاق من العمومية. إضافةً إلى ذلك، فإن افتراض نوع يشمل جميع الأنواع ويتضمن نفسه كنوع يؤدي إلى مفارقة، كما هو الحال في مجموعة جميع المجموعات، لذا يجب التدرج في مستويات التجريد. وقد أظهرت الأبحاث في حساب التفاضل والتكامل اللامدا من الرتبة الثانية ، وهي خطوة واحدة للأعلى، أن استنتاج النوع غير قابل للتقرير في هذه العمومية.
تُقدّم لغة هاسكل مستوىً أعلى يُسمى النوع (kind ). في هاسكل القياسية، تُستنتج الأنواع وتُستخدم لوصف عدد عناصر مُنشئات الأنواع. على سبيل المثال، يُنظر إلى مُنشئ نوع القائمة على أنه يُحوّل نوعًا (نوع عناصره) إلى نوع آخر (نوع القائمة التي تحتوي على تلك العناصر)؛ ويُعبّر عن ذلك كتابيًا كما يلي:تتوفر امتدادات للغة تعمل على توسيع الأنواع لمحاكاة ميزات نظام الأنواع التابع . [ 8 ]
التصنيف الفرعي
لقد تسببت محاولات الجمع بين تحديد الأنواع الفرعية واستنتاج الأنواع في إحباط كبير. من السهل تجميع قيود تحديد الأنواع الفرعية ونشرها (على عكس قيود تساوي الأنواع)، مما يجعل القيود الناتجة جزءًا من مخططات تحديد الأنواع المستنتجة، على سبيل المثال.، أينيمثل قيدًا على متغير النوعمع ذلك، ولأن متغيرات النوع لم تعد تُوحّد بشكل فوري في هذا النهج، فإنه يميل إلى توليد مخططات تصنيف كبيرة ومعقدة تحتوي على العديد من متغيرات النوع والقيود غير الضرورية، مما يجعل قراءتها وفهمها صعبًا. لذلك، بُذلت جهود كبيرة لتبسيط مخططات التصنيف هذه وقيودها، باستخدام تقنيات مشابهة لتلك المستخدمة في تبسيط الأوتوماتون المحدود غير الحتمي (NFA) (المفيد في وجود أنواع تكرارية مستنتجة). [ 9 ] ومؤخرًا، قام دولان ومايكروفت [ 10 ] بصياغة العلاقة بين تبسيط مخططات التصنيف وتبسيط الأوتوماتون المحدود غير الحتمي، وأظهرا أن اتباع نهج جبري في صياغة التصنيف الفرعي يسمح بتوليد مخططات تصنيف رئيسية مضغوطة للغة شبيهة بلغة ML (تُسمى MLsub). والجدير بالذكر أن مخطط التصنيف المقترح استخدم شكلًا مقيدًا من أنواع الاتحاد والتقاطع بدلًا من القيود الصريحة. ادعى بارو لاحقًا [ 11 ] أن هذه الصياغة الجبرية كانت مكافئة لخوارزمية بسيطة نسبيًا تشبه الخوارزمية W، وأن استخدام أنواع الاتحاد والتقاطع لم يكن ضروريًا.
من ناحية أخرى، أثبت استنتاج الأنواع صعوبة أكبر في سياق لغات البرمجة كائنية التوجه، لأن أساليب الكائنات تميل إلى اشتراط تعدد الأشكال من الدرجة الأولى على غرار نظام F (حيث يكون استنتاج الأنواع غير قابل للتقرير) وبسبب ميزات مثل تعدد الأشكال المحدود بنظام F. ونتيجة لذلك، فإن أنظمة الأنواع التي تدعم البرمجة كائنية التوجه، مثل نظام كارديلي ، تستخدم أنواعًا فرعية.[ 12 ] لا تدعم استنتاج النوع على نمط HM .
يمكن استخدام تعدد الأشكال الصفية كبديل للتصنيف الفرعي لدعم خصائص اللغة مثل السجلات الهيكلية. [ 13 ] على الرغم من أن هذا النمط من تعدد الأشكال أقل مرونة من التصنيف الفرعي في بعض النواحي، ولا سيما أنه يتطلب تعدد أشكال أكثر من اللازم للتعامل مع نقص التوجيه في قيود النوع، إلا أنه يتميز بسهولة دمجه مع خوارزميات HM القياسية.
ملحوظات
- يُعدّ استنتاج نوع هيندلي-ميلنر مسألةً كاملةً من حيث DEXPTIME . في الواقع، يُعدّ مجرد تحديد ما إذا كان برنامج ML قابلاً للتصنيف (دون الحاجة إلى استنتاج نوع) مسألةً كاملةً من حيث DEXPTIME بحد ذاتها . يظهر السلوك غير الخطي، ولكن في الغالب على المدخلات الشاذة . ولذلك، شكّلت البراهين النظرية للتعقيد التي قدمها مايرسون (1990) وكفوري ، تيورين، وأورزيتشين (1990) مفاجأةً لمجتمع البحث.
- ↑ تُسمى الأنواع المتعددة "مخططات الأنواع" في المقالة الأصلية.
- ↑ الأنواع البارامتريةلم تكن هذه العناصر موجودة في الورقة البحثية الأصلية حول HM، وليست ضرورية لعرض المنهجية. لن تأخذ أي من قواعد الاستدلال أدناه هذه العناصر في الحسبان، بل ولن تُشير إليها حتى. وينطبق الأمر نفسه على "الأنواع الأولية" غير البارامترية في تلك الورقة. يمكن تعريف جميع آليات استدلال الأنواع متعددة الأشكال دونها. وقد أُدرجت هنا لأغراض التوضيح، ولأن طبيعة HM تتمحور حول الأنواع البارامترية. وهذا نابع من نوع الدالة.، المضمنة في قواعد الاستدلال أدناه، والتي تحتوي بالفعل على معيارين وقد تم تقديمها هنا كحالة خاصة فقط.
- ↑ توفر لغة Haskell امتداد ScopedTypeVariables الذي يسمح بإدخال جميع متغيرات النوع المحددة كميًا في النطاق.
مراجع
- ↑ هيندلي، ج. روجر (1969). "مخطط النوع الرئيسي للكائن في المنطق التوافقي". معاملات الجمعية الرياضية الأمريكية . 146 : 29-60 . doi : 10.2307/1995158 . JSTOR 1995158 .
- 1 2 3 4 ميلنر، روبن (1978). "نظرية تعدد الأشكال في البرمجة". مجلة علوم الحاسوب والنظم . 17 (3): 348-374 . CiteSeerX 10.1.1.67.5276 . doi : 10.1016/0022-0000(78)90014-4 . hdl : 20.500.11820/d16745d7-f113-44f0-a7a3-687c2b709f66 . S2CID 388583 .
- ↑ داماس، لويس (1985). تعيين الأنواع في لغات البرمجة (أطروحة دكتوراه). جامعة إدنبرة. hdl : 1842/13555 . CST-33-85.
- 1 2 3 داماس، لويس؛ ميلنر، روبن (1982). مخططات الأنواع الرئيسية للبرامج الوظيفية (ملف PDF) . الندوة التاسعة حول مبادئ لغات البرمجة (POPL'82). ACM. الصفحات 207-212 . doi : 10.1145/582153.582176 . ISBN 978-0-89791-065-1أُرشف من النسخة الأصلية (PDF) بتاريخ 22-03-2022 . تم الاطلاع عليه بتاريخ 03-12-2012 .
- ↑ ويلز، ج. ب. (1994). "قابلية الكتابة والتحقق من النوع في حساب لامدا من الدرجة الثانية متكافئان وغير قابلين للتقرير" . وقائع الندوة السنوية التاسعة لمعهد مهندسي الكهرباء والإلكترونيات حول المنطق في علوم الحاسوب (LICS) . الصفحات 176-185 . doi : 10.1109/LICS.1994.316068 . ISBN 0-8186-6310-3. S2CID 15078292 .
- ↑ كليمنت (1986). لغة تطبيقية بسيطة: Mini-ML (ملف PDF) . LFP'86. ACM. doi : 10.1145/319838.319847 . ISBN 978-0-89791-200-6.
- ↑ فوغان، جيف (23 يوليو 2008) [5 مايو 2005]. "برهان صحة خوارزمية الاستدلال من نوع هيندلي-ميلنر" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 24 مارس 2012.
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - ↑ يورجي؛ برنت؛ ويريش؛ ستيفاني؛ كريتين؛ جوليان؛ بيتون جونز؛ سيمين؛ فيتينيوتيس؛ ديميتريوس؛ ماغالهايس؛ خوسيه بيدرو (يناير 2012). "ترقية لغة هاسكل" . وقائع ورشة عمل ACM SIGPLAN الثامنة حول أنواع البيانات في تصميم اللغات وتنفيذها . الصفحات 53-66 . doi : 10.1145/2103786.2103795 . ISBN 978-1-4503-1120-5.
- ↑ بوتييه، فرانسوا (1998). استنتاج النوع في وجود التصنيف الفرعي: من النظرية إلى التطبيق (أطروحة) . تم الاسترجاع في 10 أغسطس 2021 .
- ↑ دولان، ستيفن؛ مايكروفت، آلان (2017). "تعدد الأشكال، والتصنيف الفرعي، واستنتاج النوع في MLsub" (ملف PDF) . POPL 2017: وقائع الندوة الرابعة والأربعين لجمعية ACM SIGPLAN حول مبادئ لغات البرمجة . doi : 10.1145/3009837.3009882 .
- ↑ بارو، ليونيل (2020). "الجوهر البسيط للتصنيف الفرعي الجبري: استنتاج النوع الرئيسي مع تبسيط التصنيف الفرعي" . المؤتمر الدولي الخامس والعشرون لجمعية ACM SIGPLAN حول البرمجة الوظيفية - ICFP 2020، [حدث عبر الإنترنت]، 24-26 أغسطس 2020. doi : 10.1145 /3409006 .
- ↑ كارديلي، لوكا؛ مارتيني، سيموني؛ ميتشل، جون سي؛ سيدروف، أندريه (1994). "امتداد للنظام F مع التنميط الفرعي". المعلومات والحوسبة، المجلد 9. نورث هولاند، أمستردام. الصفحات 4-56 . doi : 10.1006/inco.1994.1013 .
- ↑ دان ليجن، سجلات قابلة للتوسيع مع تسميات محددة النطاق ، معهد علوم المعلومات والحوسبة، جامعة أوتريخت، مسودة، مراجعة: 76، 23 يوليو 2005
- ميرسون، هاري ج. (1990). "تحديد اكتمال قابلية كتابة ML في وقت أسي حتمي". وقائع الندوة السابعة عشرة لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة - POPL '90 . ACM. الصفحات 382-401 . doi : 10.1145/96709.96748 . ISBN 978-0-89791-343-0. S2CID 75336 .
- كفوري، أ. ج.؛ تيورين، ج.؛ أورزيتشين، ب. (1990). "إمكانية كتابة ML كاملة من حيث وقت التوسع". مؤتمر CAAP '90 . سلسلة محاضرات في علوم الحاسوب. المجلد 431. الصفحات 206-220 . doi : 10.1007/3-540-52590-4_50 . ISBN 978-3-540-52590-5.
روابط خارجية
- أنظمة الكتابة
- نظرية الأنواع
- استنتاج النوع
- حساب التفاضل والتكامل لامدا
- علوم الحاسوب النظرية
- الأساليب الرسمية
- 1969 في مجال الحوسبة
- 1978 في مجال الحوسبة
- 1985 في مجال الحوسبة
- الخوارزميات
