النظام F

النظام F (ويُعرف أيضًا بحساب لامدا متعدد الأشكال أو حساب لامدا من الدرجة الثانية ) هو حساب لامدا مُنمّط يُضيف إلى حساب لامدا المُنمّط ببساطة آليةً للتكميم الشامل على الأنواع. يُضفي النظام F طابعًا رسميًا على تعدد الأشكال البارامتري في لغات البرمجة ، مُشكلاً بذلك أساسًا نظريًا للغات مثل هاسكل و ML . وقد اكتشفه بشكل مستقل كلٌ من عالم المنطق جان إيف جيرار (1972) وعالم الحاسوب جون سي. رينولدز .

بينما تحتوي حسابات لامدا المكتوبة ببساطة على متغيرات تتراوح بين الحدود، وروابط لها، فإن نظام F يحتوي أيضًا على متغيرات تتراوح بين الأنواع ، وروابط لها. على سبيل المثال، حقيقة أن دالة الهوية يمكن أن يكون لها أي نوع من الشكل AA سيتم صياغتها رسميًا في نظام F على النحو التالي:

Λα.λxα.x:α.αα{\displaystyle \vdash \Lambda \alpha .\lambda x^{\alpha }.x:\forall \alpha .\alpha \to \alpha }

أينα{\displaystyle \alpha }هو متغير نوع . الحرف الكبيرΛ{\displaystyle \Lambda }يُستخدم تقليديًا للدلالة على الدوال على مستوى النوع، على عكس الأحرف الصغيرة.λ{\displaystyle \lambda }والتي تُستخدم لوظائف مستوى القيمة. (الرمز المرتفع)α{\displaystyle \alpha }هذا يعني أن المتغير المقيد x من النوعα{\displaystyle \alpha }; التعبير الذي يلي النقطتين هو نوع تعبير لامدا الذي يسبقه.)

باعتباره نظامًا لإعادة كتابة المصطلحات ، يتميز النظام F بتطبيع قوي . مع ذلك، فإن استنتاج النوع في النظام F (بدون تحديدات صريحة للنوع) غير قابل للتقرير . في ظل تماثل كاري-هوارد ، يتوافق النظام F مع منطق الحدس الافتراضي من الدرجة الثانية . يمكن اعتبار النظام F جزءًا من مكعب لامدا ، إلى جانب حسابات لامدا ذات أنواع أكثر تعبيرًا، بما في ذلك تلك التي تحتوي على أنواع تابعة .

بحسب جيرارد، تم اختيار حرف "F" في System F بالصدفة. [ 1 ]

قواعد الكتابة

قواعد كتابة نظام F هي قواعد حساب التفاضل والتكامل اللامدا المكتوب ببساطة مع إضافة ما يلي:

Γم:α.σΓمτ:σ[τ/α]{\displaystyle {\frac {\Gamma \vdash M:\forall \alpha .\sigma }{\Gamma \vdash M\tau :\سيجما [\تاو /\alpha ]}}} (1)Γ،α يكتبم:σΓΛα.م:α.σ{\displaystyle {\frac {\Gamma ,\alpha ~{\text{type}}\vdash M:\sigma }{\Gamma \vdash \Lambda \alpha .M:\forall \alpha .\sigma }}}(2)

أينσ،τ{\displaystyle \sigma ,\tau }هي أنواع،α{\displaystyle \alpha }هو متغير نوع، وα يكتب{\displaystyle \alpha ~{\text{type}}}يشير السياق إلى أنα{\displaystyle \alpha }مُلزم. القاعدة الأولى هي قاعدة التطبيق، والثانية هي قاعدة التجريد. [ 2 ] [ 3 ]

المنطق والمسندات

البooلهـأن{\displaystyle {\mathsf {Boolean}}}يُعرَّف النوع على النحو التالي: α.ααα{\displaystyle \forall \alpha .\alpha \to \alpha \to \alpha }، أينα{\displaystyle \alpha }هو متغير نوعي . وهذا يعني:بooلهـأن{\displaystyle {\mathsf {Boolean}}}هو نوع جميع الدوال التي تأخذ كمدخلات نوعًا α وتعبيرين من النوع α ، وتنتج كمخرجات تعبيرًا من النوع α (لاحظ أننا نعتبر{\displaystyle \to }أن يكون ارتباطيًا يمينيًا .)

التعريفان التاليان للقيم المنطقيةتي{\displaystyle \mathbf {T} }وF{\displaystyle \mathbf {F} }تُستخدم، مما يوسع تعريف العمليات المنطقية للكنيسة :

تي=Λα.λxαλyα.x{\displaystyle \mathbf {T} =\Lambda \alpha {.}\lambda x^{\alpha }\lambda y^{\alpha }{.}x}
F=Λα.λxαλyα.y{\displaystyle \mathbf {F} =\Lambda \alpha {.}\lambda x^{\alpha }\lambda y^{\alpha }{.}y}

(لاحظ أن الدالتين المذكورتين أعلاه تتطلبان ثلاثة وسائط - وليس اثنين . يجب أن يكون الوسيطان الأخيران تعبيرات لامدا، بينما يجب أن يكون الوسيط الأول نوعًا. وينعكس هذا في كون نوع هذه التعبيرات هوα.ααα{\displaystyle \forall \alpha .\alpha \to \alpha \to \alpha }؛ يُقابل المُكمِّم العام الذي يربط α المُكمِّم Λ الذي يربط α في تعبير لامدا نفسه. لاحظ أيضًا أنبooلهـأن{\displaystyle {\mathsf {Boolean}}}هو اختصار مناسب لـα.ααα{\displaystyle \forall \alpha .\alpha \to \alpha \to \alpha }لكنها ليست رمزًا للنظام F نفسه، بل هي بالأحرى "رمز فوقي". وبالمثل،تي{\displaystyle \mathbf {T} }وF{\displaystyle \mathbf {F} }وهي أيضًا "رموز فوقية"، اختصارات ملائمة، لـ "تجميعات" النظام F (بمعنى بورباكي )؛ وإلا، إذا كان من الممكن تسمية هذه الوظائف (داخل النظام F)، فلن تكون هناك حاجة إلى جهاز التعبير عن لامدا القادر على تعريف الوظائف بشكل مجهول، ولا إلى مُركِّب النقطة الثابتة ، الذي يتجاوز هذا القيد.

ثم، مع هذين الاثنينλ{\displaystyle \lambda }- من حيث، يمكننا تعريف بعض عوامل التشغيل المنطقية (التي هي من النوعبooلهـأنبooلهـأنبooلهـأن{\displaystyle {\mathsf {Boolean}}\rightarrow {\mathsf {Boolean}}\rightarrow {\mathsf {Boolean}}}):

أشمالد=λxبooلهـأنλyبooلهـأن.xبooلهـأنyFياR=λxبooلهـأنλyبooلهـأن.xبooلهـأنتيyشمالياتي=λxبooلهـأن.xبooلهـأنFتي{\displaystyle {\begin{align}\mathrm {AND} &=\lambda x^{\mathsf {Boolean}}\lambda y^{\mathsf {Boolean}}{.}x\,{\mathsf {Boolean}}\,y\,\mathbf {F} \\\mathrm {OR} &=\lambda x^{\mathsf {منطقية}}\lambda y^{\mathsf {Boolean}}{.}x\,{\mathsf {Boolean}}\,\mathbf {T} \,y\\\mathrm {NOT} &=\lambda x^{\mathsf {Boolean}}{.}x\,{\mathsf {Boolean}}\,\mathbf {F} \,\mathbf {T} \end{محاذاة}}}

لاحظ أنه في التعريفات أعلاه،بooلهـأن{\displaystyle {\mathsf {Boolean}}}هو وسيط نوع لـx{\displaystyle x}، مع تحديد أن المعلمتين الأخريين اللتين يتم إعطاؤهما لـx{\displaystyle x}هي من النوعبooلهـأن{\displaystyle {\mathsf {Boolean}}}كما هو الحال في ترميزات الكنيسة، لا حاجة لدالة IFTHENELSE حيث يمكن استخدام البيانات الخام مباشرةً.بooلهـأن{\displaystyle {\mathsf {Boolean}}}المصطلحات المصنفة كدوال قرار. ومع ذلك، إذا طُلب أحدها:

أناFتيحهـشمالهـLSهـ=Λα.λxبooلهـأنλyαλzα.xαyz{\displaystyle \mathrm {IFTHENELSE} =\Lambda \alpha .\lambda x^{\mathsf {Boolean}}\lambda y^{\alpha }\lambda z^{\alpha }.x\alpha yz}

حسنًا. الدالة الشرطية هي دالة تُرجعبooلهـأن{\displaystyle {\mathsf {Boolean}}}القيمة المحددة النوع. أهم دالة أساسية هي ISZERO التي تُرجعتي{\displaystyle \mathbf {T} }إذا وفقط إذا كانت وسيطتها هي الرقم الكنسي 0 :

أناSZهـRيا=λنα.(αα)αα.نبooلهـأن(λxبooلهـأن.F)تي{\displaystyle \mathrm {ISZERO} =\lambda n^{\forall \alpha .(\alpha \rightarrow \alpha )\rightarrow \alpha \rightarrow \alpha }{.}n\,{\mathsf {Boolean}}\,(\lambda x^{\mathsf {Boolean}}{.}\mathbf {F} )\,\mathbf {T} }

علاوة على ذلك، يمكن تنفيذ المُكمِّم الوجودي (وبالتالي الأنواع الوجودية) في النظام F على النحو التالي: [ 4 ] [ 5 ]

X.أ=Y.(X.أY)Y{\displaystyle \exists X.A=\forall Y.(\forall X.A\rightarrow Y)\rightarrow Y}

هياكل النظام F

يُتيح النظام F تضمين البنى التكرارية بطريقة طبيعية، على غرار نظرية مارتن-لوف للأنواع . تُنشأ البنى المجردة ( S ) باستخدام الدوال البانية . وهي دوال مُصنفة على النحو التالي:

ك1ك2S{\displaystyle K_{1}\rightarrow K_{2}\rightarrow \dots \rightarrow S}.

تتجلى الخاصية التكرارية عندما يظهر S نفسه ضمن أحد الأنواعكأنا{\displaystyle K_{i}}إذا كان لديك m من هذه المُنشئات، فيمكنك تعريف نوع S على النحو التالي:

α.(ك11[α/S]α)(ك1م[α/S]α)α{\displaystyle \forall \alpha .(K_{1}^{1}[\alpha /S]\rightarrow \dots \rightarrow \alpha )\dots \rightarrow (K_{1}^{m}[\alpha /S]\rightarrow \dots \rightarrow \alpha )\rightarrow \alpha }

على سبيل المثال، يمكن تعريف الأعداد الطبيعية كنوع بيانات استقرائي N مع مُنشئات

zهـرo:شمالsuجج:شمالشمال{\displaystyle {\begin{aligned}{\mathit {zero}}&:\mathrm {N} \\{\mathit {succ}}&:\mathrm {N} \rightarrow \mathrm {N} \end{aligned}}}

نوع النظام F المقابل لهذا الهيكل هو α.α(αα)α{\displaystyle \forall \alpha .\alpha \to (\alpha \to \alpha )\to \alpha }تتضمن المصطلحات من هذا النوع نسخة مطبوعة من أرقام الكنيسة ، وأولى هذه المصطلحات هي:

0:=Λα.λxα.λوαα.x1:=Λα.λxα.λوαα.وx2:=Λα.λxα.λوαα.و(وx)3:=Λα.λxα.λوαα.و(و(وx)){\displaystyle {\begin{aligned}0&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.x\\1&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.fx\\2&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.f(fx)\\3&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.f(f(fx))\end{aligned}}}

إذا عكسنا ترتيب الحجج المُدمجة ( أي،α.(αα)αα{\displaystyle \forall \alpha .(\alpha \rightarrow \alpha )\rightarrow \alpha \rightarrow \alpha }إذا كان لدينا عددان من نوع Church، فإن العدد n هو دالة تأخذ دالة f كمعامل وتعيد القوة النونية لـ f . أي أن العدد Church هو دالة من الرتبة العليا - فهو يأخذ دالة ذات معامل واحد f ، ويعيد دالة أخرى ذات معامل واحد.

يُستخدم في لغات البرمجة

يُستخدم في هذه المقالة نظام F بصيغة حسابية صريحة النوع، أو ما يُعرف بحساب تشيرش. وتُسهّل معلومات النوع المُضمنة في حدود λ عملية التحقق من النوع . وقد حسم جو ويلز (1994) "مشكلة مفتوحة مُحرجة" بإثبات أن التحقق من النوع غير قابل للتقرير بالنسبة لمتغير من نظام F بنمط كاري، أي المتغير الذي يفتقر إلى تعليقات النوع الصريحة. [ 6 ] [ 7 ]

تشير نتيجة ويلز إلى استحالة استنتاج النوع في النظام F. يوجد قيد على النظام F يُعرف باسم " هيندلي-ميلنر " أو اختصارًا "HM"، ويحتوي على خوارزمية سهلة لاستنتاج النوع، ويُستخدم في العديد من لغات البرمجة الوظيفية ذات الأنواع الثابتة ، مثل هاسكل 98 وعائلة لغات ML . مع مرور الوقت، ومع اتضاح قيود أنظمة الأنواع من نمط HM، اتجهت اللغات تدريجيًا نحو منطق أكثر تعبيرًا لأنظمة أنواعها. يتجاوز مُصرّف GHC ، وهو مُصرّف للغة هاسكل، نمط HM (حتى عام 2008) ويستخدم النظام F المُوسّع بمساواة الأنواع غير النحوية؛ [ 8 ] وتشمل ميزات نظام أنواع OCaml غير HM، GADT . [ 9 ] [ 10 ]

تماثل جيرارد-رينولدز

في منطق الحدس من الرتبة الثانية ، اكتشف جيرارد (1972) حساب لامدا متعدد الأشكال من الرتبة الثانية (F2)، ثم اكتشفه رينولدز (1974) بشكل مستقل. [ 11 ] أثبت جيرارد نظرية التمثيل : أنه في منطق المسندات الحدسي من الرتبة الثانية (P2)، تشكل الدوال من الأعداد الطبيعية إلى الأعداد الطبيعية التي يمكن إثبات كليتها، إسقاطًا من P2 إلى F2. [ 11 ] أثبت رينولدز نظرية التجريد : أن كل حد في F2 يحقق علاقة منطقية، يمكن تضمينها في العلاقات المنطقية P2. [ 11 ] أثبت رينولدز أن إسقاط جيرارد متبوعًا بتضمين رينولدز يشكلان التطابق، أي تماثل جيرارد-رينولدز . [ 11 ]

النظام F ω

بينما يتوافق النظام F مع المحور الأول لمكعب لامدا لباريندريخت ، فإن النظام F ω أو حساب لامدا متعدد الأشكال من الدرجة الأعلى يجمع بين المحور الأول (تعدد الأشكال) مع المحور الثاني ( عوامل النوع )؛ إنه نظام مختلف وأكثر تعقيدًا.

يمكن تعريف النظام F ω استقرائياً على مجموعة من الأنظمة، حيث يعتمد الاستقراء على الأنواع المسموح بها في كل نظام:

  • Fن{\displaystyle F_{n}}أنواع التصاريح:
    • {\displaystyle \star }(أنواع الأنواع) و
    • جك{\displaystyle J\Rightarrow K}أينجFن-1{\displaystyle J\in F_{n-1}}وكFن{\displaystyle K\in F_{n}}(نوع الدوال من أنواع إلى أنواع، حيث يكون نوع الوسيط من رتبة أدنى)

في النهاية، يمكننا تعريف النظامFω{\displaystyle F_{\omega }}يكون

  • Fω=1أناFأنا{\displaystyle F_{\omega }={\underset {1\leq i}{\bigcup }}F_{i}}

أي أن F ω هو النظام الذي يسمح للدوال من أنواع إلى أنواع حيث يمكن أن يكون الوسيط (والنتيجة) من أي رتبة.

لاحظ أنه على الرغم من أن F ω لا يفرض أي قيود على ترتيب الوسائط في هذه التعيينات، إلا أنه يقيد نطاق الوسائط لهذه التعيينات: يجب أن تكون أنواعًا وليست قيمًا. لا يسمح النظام F ω بالتعيينات من القيم إلى الأنواع ( الأنواع التابعة )، على الرغم من أنه يسمح بالتعيينات من القيم إلى القيم (λ{\displaystyle \lambda }التجريد)، والتحويلات من الأنواع إلى القيم (Λ{\displaystyle \Lambda }التجريد)، والتحويلات من أنواع إلى أنواع (λ{\displaystyle \lambda }التجريد على مستوى الأنواع).

النظام F < :

نظام F < : ، الذي يُنطق "إف-ساب"، هو امتداد لنظام F مع خاصية التنميط الفرعي . وقد حظي نظام F < : بأهمية مركزية في نظرية لغات البرمجة منذ ثمانينيات القرن الماضي، لأن جوهر لغات البرمجة الوظيفية ، مثل تلك الموجودة في عائلة ML ، يدعم كلاً من تعدد الأشكال البارامتري والتنميط الفرعي للسجلات ، والذي يمكن التعبير عنه في نظام F < : . [ 12 ] [ 13 ]

انظر أيضاً

ملحوظات

  1. جيرارد، جان إيف (1986). "نظام F ذو الأنواع المتغيرة، بعد خمسة عشر عامًا". علوم الحاسوب النظرية . 45 : 160. doi : 10.1016/0304-3975(86)90044-7 . مع ذلك، في [3]، تبين أن قواعد التحويل الواضحة لهذا النظام، المسمى F مصادفةً، كانت تتقارب.
  2. هاربر ر . "الأسس العملية للغات البرمجة، الطبعة الثانية" . ص 142-143 . 
  3. Geuvers H, Nordström B, Dowek G. "إثباتات البرامج وصياغة الرياضيات" (PDF) . ص 51. 
  4. كزافييه ليروي، البرمجة = إثبات؟ مراسلات كاري-هوارد اليوم، محاضرات في كوليج دو فرانس، المحاضرة 2، ص 15، 21 نوفمبر 2018 https://xavierleroy.org/CdF/2018-2019/2.pdf
  5. "CS 4110: لغات البرمجة والمنطق - المحاضرة 26: الأنواع الوجودية" (ملف PDF) . كلية آن إس. باورز للحوسبة وعلوم المعلومات، جامعة كورنيل . قسم علوم الحاسوب، جامعة كورنيل. 2018. مؤرشف (ملف PDF) من الأصل بتاريخ 26 سبتمبر 2025. تم الاطلاع عليه بتاريخ 8 نوفمبر 2025 .
  6. ويلز، جيه بي (2005-01-20). "اهتمامات جو ويلز البحثية" . جامعة هيريوت وات.
  7. ويلز، جيه بي (1999). "قابلية الكتابة والتحقق من النوع في النظام F متكافئان وغير قابلين للتقرير" . حوليات المنطق البحت والتطبيقي . 98 ( 1-3 ): 111-156 . doi : 10.1016/S0168-0072(98)00047-5 ."مشروع الكنيسة: قابلية الكتابة والتحقق من النوع في النظام {F} متكافئان وغير قابلين للتقرير" . 29 سبتمبر 2007. مؤرشف من الأصل في 29 سبتمبر 2007.
  8. "System FC: equal constraints and coercions" . gitlab.haskell.org . تم الاطلاع عليه بتاريخ 2019-07-08 .
  9. "ملاحظات إصدار OCaml 4.00.1" . ocaml.org . 2012-10-05 . تم الاطلاع عليه بتاريخ 2019-09-23 .
  10. "دليل مرجعي لـ OCaml 4.09" . 11-09-2012 . تم الاطلاع عليه بتاريخ 23-09-2019 .
  11. 1 2 3 4 فيليب وادلر (2005) تماثل جيرارد-رينولدز (الطبعة الثانية) جامعة إدنبرة ، لغات البرمجة وأسسها في إدنبرة
  12. كارديلي، لوكا؛ مارتيني، سيموني؛ ميتشل، جون سي؛ سيدروف، أندريه (1994). "امتداد للنظام F مع التنميط الفرعي". المعلومات والحوسبة، المجلد 9. نورث هولاند، أمستردام. الصفحات 4-56 . doi : 10.1006/inco.1994.1013 . 
  13. بيرس، بنجامين (2002). أنواع ولغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-16209-8.الفصل 26: التحديد الكمي المحدود

مراجع

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