دلالات محول المسند
قدّم إدسكار ديكسترا دلالات محوّلات المسندات في بحثه الرائد " الأوامر المحمية، وعدم الحتمية، والاشتقاق الرسمي للبرامج ". تُعرّف هذه الدلالات دلالات نموذج البرمجة الإجرائية من خلال إسناد محوّل مسند مُناسب لكل عبارة في هذه اللغة : وهو دالة كلية بين مسندين على فضاء حالة العبارة. وبهذا المعنى، تُعدّ دلالات محوّلات المسندات نوعًا من الدلالات التفسيرية . في الواقع، في الأوامر المحمية ، يستخدم ديكسترا نوعًا واحدًا فقط من محوّلات المسندات: الشروط المسبقة الأضعف المعروفة (انظر أدناه).
علاوة على ذلك، تُعدّ دلالات محوّلات المسندات إعادة صياغة لمنطق فلويد-هوار . فبينما يُقدّم منطق هوار كنظام استنتاجي ، تُشكّل دلالات محوّلات المسندات (سواءً باستخدام أضعف الشروط المسبقة أو أقوى الشروط اللاحقة، انظر أدناه) استراتيجيات متكاملة لبناء استنتاجات صحيحة لمنطق هوار. بعبارة أخرى، تُوفّر هذه الدلالات خوارزمية فعّالة لاختزال مشكلة التحقق من ثلاثية هوار إلى مشكلة إثبات صيغة من الدرجة الأولى . من الناحية التقنية، تُنفّذ دلالات محوّلات المسندات نوعًا من التنفيذ الرمزي للعبارات في المسندات: حيث يسير التنفيذ عكسيًا في حالة أضعف الشروط المسبقة، أو يسير للأمام في حالة أقوى الشروط اللاحقة.
أضعف الشروط المسبقة
تعريف
بالنسبة لعبارة S وشرط لاحق R ، فإن أضعف شرط مسبق هو مسند Q بحيث يكون لأي شرط مسبق P ،إذا وفقط إذابمعنى آخر، هو الشرط "الأقل تقييدًا" أو الأقل صرامة اللازم لضمان تحقق R بعد S. ويترتب على التفرد بسهولة من التعريف: إذا كان كل من Q و Q' من أضعف الشروط المسبقة، فإنه بحسب التعريفلذاولذاوبالتالينستخدم غالبًاللدلالة على أضعف شرط مسبق للعبارة S فيما يتعلق بشرط لاحق R.
الاتفاقيات
نستخدم الرمز T للدلالة على المسند الصحيح في كل مكان، والرمز F للدلالة على المسند الخاطئ في كل مكان. يجب ألا نخلط بين هذا المفهوم والتعبير المنطقي المُعرَّف بقواعد لغة معينة، والذي قد يحتوي أيضًا على القيمتين true و false كقيم منطقية عددية. بالنسبة لهذه القيم العددية، نحتاج إلى تحويل نوعي بحيث يكون لدينا T = predicate(true) و F = predicate(false). غالبًا ما يتم هذا التحويل بشكل غير رسمي، لذا يميل الناس إلى اعتبار T صحيحًا و F خاطئًا.
يتخطى
إجهاض
تكليف
نقدم فيما يلي شرطين متكافئين من أضعف الشروط المسبقة لعبارة التخصيص. في هذه الصيغ،هي نسخة من R حيث يتم استبدال حالات x الحرة بـ E. وبالتالي ، هنا، يتم إجبار التعبير E ضمنيًا على أن يصبح مصطلحًا صالحًا للمنطق الأساسي: إنه بالتالي تعبير نقي ، محدد تمامًا، نهائي وبدون آثار جانبية.
- الإصدار 1:
حيث يمثل y متغيرًا جديدًا وغير حر في E و R (يمثل القيمة النهائية للمتغير x ) |
- الإصدار 2:
بافتراض أن E محددة جيدًا، نطبق ما يسمى بقاعدة النقطة الواحدة على الإصدار 1. ثم
يتجنب الإصدار الأول احتمال تكرار x في R ، بينما يكون الإصدار الثاني أبسط عندما يكون هناك ظهور واحد على الأكثر لـ x في R. كما يكشف الإصدار الأول عن ازدواجية عميقة بين أضعف شرط مسبق وأقوى شرط لاحق (انظر أدناه).
مثال على حساب صحيح لـ wp (باستخدام الإصدار 2) لعمليات الإسناد مع متغير x ذي قيمة عددية صحيحة هو:
هذا يعني أنه لكي يتحقق الشرط اللاحق x > 10 بعد عملية الإسناد، يجب أن يتحقق الشرط المسبق x > 15 قبل عملية الإسناد. وهذا أيضًا هو "أضعف شرط مسبق"، لأنه "أضعف" قيد على قيمة x الذي يجعل x > 10 صحيحًا بعد عملية الإسناد.
تسلسل
على سبيل المثال،
شرطي
على سبيل المثال:
حلقة التكرار
صحة جزئية
بغض النظر عن الإنهاء للحظة، يمكننا تعريف قاعدة أضعف شرط مسبق ليبرالي ، ويرمز له بـ wlp ، باستخدام دالة منطقية INV ، تسمى Loop INV ariant ، والتي عادةً ما يوفرها المبرمج:
صحة تامة
لإثبات صحة الحل تمامًا، علينا أيضًا إثبات انتهاء الحلقة. ولتحقيق ذلك، نُعرّف علاقةً راسخةً على فضاء الحالة، ونرمز لها بـ ( wfs , <)، ونُعرّف دالةً مُتغيرةً vf ، بحيث يكون لدينا:
حيث v عبارة عن مجموعة جديدة من المتغيرات |
بصورة غير رسمية، في الجمع بين الصيغ الثلاث المذكورة أعلاه:
- الأول يعني أن المتغير يجب أن يكون جزءًا من العلاقة الراسخة قبل دخول الحلقة؛
- أما الثاني فيعني أن جسم الحلقة (أي العبارة S ) يجب أن يحافظ على الثابت ويقلل من المتغير؛
- أما الشرط الأخير فيعني أنه يجب تحديد شرط ما بعد الحلقة R عند انتهاء الحلقة.
لكن اجتماع هذه العناصر الثلاثة ليس شرطاً ضرورياً. بالضبط، لدينا
أوامر محمية غير حتمية
في الواقع، تُعد لغة الأوامر المحمية لديكسترا (GCL) امتدادًا للغة الأمرية البسيطة المُقدمة حتى الآن، مع تضمينها عبارات غير حتمية. وتهدف GCL إلى أن تكون تدوينًا رسميًا لتعريف الخوارزميات. تمثل العبارات غير الحتمية خيارات تُترك للتنفيذ الفعلي (في لغة برمجة فعالة): تُضمن الخصائص المُثبتة على العبارات غير الحتمية لجميع خيارات التنفيذ الممكنة. بعبارة أخرى، تضمن أضعف الشروط المسبقة للعبارات غير الحتمية
- أن هناك تنفيذًا نهائيًا (على سبيل المثال، هناك تطبيق)،
- وأن الحالة النهائية لجميع عمليات التنفيذ المنتهية تفي بالشرط اللاحق.
إن تعريفات أضعف شرط مسبق المذكورة أعلاه (وخاصة بالنسبة لحلقة while ) تحافظ على هذه الخاصية.
اختيار
الاختيار هو تعميم لعبارة if :
هنا، عندما كان هناك حارسانوإذا كانت هذه العبارات صحيحة في آن واحد، فيمكن تنفيذ أي من العبارات المرتبطة بها.أو.
تكرار
التكرار هو تعميم لعبارة while بطريقة مماثلة.
بيان المواصفات
يُوسّع حساب التحسين لغة GCL بمفهوم عبارة المواصفات . من الناحية التركيبية، نُفضّل كتابة عبارة المواصفات على النحو التالي:
والتي تحدد عملية حسابية تبدأ في حالة تحقق الشرط pre وتضمن أن تنتهي في حالة تحقق الشرط post عن طريق تغيير x فقط . نسميهاثابت منطقي يُستخدم للمساعدة في تحديد المواصفات. على سبيل المثال، يمكننا تحديد عملية حسابية تزيد قيمة x بمقدار 1 كما يلي:
مثال آخر هو حساب الجذر التربيعي لعدد صحيح.
تبدو عبارة التحديد بدائيةً بمعنى أنها لا تحتوي على عبارات أخرى. ومع ذلك، فهي معبرة للغاية، لأن الشرطين المسبق واللاحق عبارة عن مسندات اختيارية. وأضعف شرط مسبق لها هو كما يلي.
حيث s تعني طازج. |
يجمع هذا الأسلوب بين فكرة مورغان النحوية وفكرة الحدة التي طرحها بيجلسما وماثيوز وويلتينك. [ 1 ] وتكمن ميزته الأساسية في قدرته على تعريف wp لأمر goto L وعبارات القفز الأخرى. [ 2 ]
انتقل إلى البيان
يتطلب وضع صيغة رسمية لعبارات الانتقال مثل goto L عملية طويلة وشاقة. ويبدو أن الاعتقاد السائد يشير إلى أن عبارة goto لا يمكن تبريرها إلا من الناحية العملية. وربما يعود ذلك إلى عدم إدراك أن goto L في الواقع عبارة غير تقليدية (أي غير صارمة) ولا تتبع قانون ديكسترا "قانون استبعاد المعجزات" كما هو قائم بذاته. ولكنها تتمتع بنظرة عملية بسيطة للغاية من منظور أضعف الشروط المسبقة، وهو أمر غير متوقع. نُعرّف
حيث wpL هو أضعف شرط مسبق عند العلامة L. |
بالنسبة لأمر goto L، ينقل التنفيذ التحكم إلى التسمية L التي يجب أن يتحقق عندها أضعف شرط مسبق. ولا ينبغي اعتبار طريقة الإشارة إلى wpL في القاعدة مفاجئة. إنها فقطبالنسبة لقيمة Q المحسوبة حتى تلك النقطة. يشبه هذا أي قاعدة wp، حيث تستخدم عبارات مكونة لإعطاء تعريفات wp، على الرغم من أن goto L تبدو عملية بدائية. لا تتطلب القاعدة التفرد للمواقع التي يتحقق فيها wpL داخل البرنامج، لذا فهي تسمح نظريًا بظهور نفس التسمية في مواقع متعددة طالما أن أضعف شرط مسبق في كل موقع هو نفس wpL. يمكن لعبارة goto الانتقال إلى أي من هذه المواقع. هذا في الواقع يبرر أنه يمكننا وضع نفس التسميات في نفس الموقع عدة مرات، كما هو الحال في ...، وهو نفس الشيءكما أنه لا يتضمن أي قاعدة نطاق، مما يسمح بالقفز إلى داخل حلقة تكرارية، على سبيل المثال. لنحسب قيمة wp للبرنامج S التالي، الذي يتضمن قفزة إلى داخل حلقة تكرارية.
wp(do x > 0 → L: x := x-1 od; if x < 0 → x := -x; goto L ⫿ x ≥ 0 → skip fi, post) = { قواعد التركيب والتناوب التسلسلي } wp(do x > 0 → L: x := x-1 od, (x<0 ∧ wp(x := -x; goto L, post)) ∨ (x ≥ 0 ∧ post) = { التركيب التسلسلي، الانتقال إلى، قواعد التعيين } wp(do x > 0 → L: x := x-1 od, x<0 ∧ wpL(x ← -x) ∨ x≥0 ∧ post) = { قاعدة التكرار } الحل الأقوى لـ Z: [ Z ≡ x > 0 ∧ wp(L: x := x-1, Z) ∨ x < 0 ∧ wpL(x ← -x) ∨ x=0 ∧ post ] = { قاعدة التخصيص، تم إيجاد wpL = Z(x ← x-1) } الحل الأقوى لـ Z: [ Z ≡ x > 0 ∧ Z(x ← x-1) ∨ x < 0 ∧ Z(x ← x-1) (x ← -x) ∨ x=0 ∧ post] = { استبدال } الحل الأقوى لـ Z:[ Z ≡ x > 0 ∧ Z(x ← x-1) ∨ x < 0 ∧ Z(x ← -x-1) ∨ x=0 ∧ post ] = { حل المعادلة بالتقريب } post(x ← 0)لذلك،
wp(S, post) = post(x ← 0).
محولات المسند الأخرى
أضعف شرط ليبرالي مسبق
يُعد الشرط الليبرالي الأضعف أحد المتغيرات المهمة لأضعف شرط مسبقوهذا يُنتج أضعف شرطٍ إما أن لا تنتهي فيه S أو أن تُنشئ R. ولذلك، فهو يختلف عن wp في عدم ضمانه للإنهاء. ومن ثم، فهو يُطابق منطق هوار في صحته الجزئية: بالنسبة للغة العبارات المذكورة أعلاه، يختلف wlp عن wp فقط في حلقة while ، حيث لا يتطلب متغيرًا (انظر أعلاه).
أقوى حالة ما بعد العلاج
بفرض أن S عبارة و R شرط مسبق (مسند على الحالة الأولية)، فإن هو أقوى شرط لاحق لديهم : فهو يستلزم أي شرط لاحق تحققه الحالة النهائية لأي تنفيذ لـ S، لأي حالة ابتدائية تحقق R. بعبارة أخرى، ثلاثية هواريمكن إثبات ذلك في منطق هوار إذا وفقط إذا تحققت الشرطية التالية:
عادةً ما تُستخدم أقوى الشروط اللاحقة في الصحة الجزئية. ومن ثم، لدينا العلاقة التالية بين أضعف الشروط المسبقة الليبرالية وأقوى الشروط اللاحقة:
على سبيل المثال، لدينا في المهمة ما يلي:
حيث يكون y طازجًا |
في المثال أعلاه، يمثل المتغير المنطقي y القيمة الأولية للمتغير x . وبالتالي،
في التسلسل، يبدو أن sp يعمل للأمام (بينما wp يعمل للخلف):
محولات المسند للربح والخطيئة
اقترح ليزلي لامبورت استخدام win و sin كمحولات للمسندات في البرمجة المتزامنة . [ 3 ]
خصائص محولات المسند
يعرض هذا القسم بعض الخصائص المميزة لمحولات المسند. [ 4 ] فيما يلي، يرمز S إلى محول المسند (دالة بين مسندين في فضاء الحالة)، و P إلى مسند. على سبيل المثال، قد يرمز S(P) إلى wp(S,P) أو sp(S,P) . نبقي x كمتغير فضاء الحالة.
رتيب
تكون محولات المسند ذات الأهمية ( wp و wlp و sp ) رتيبة . يكون محول المسند S رتيبًا إذا وفقط إذا:
ترتبط هذه الخاصية بقاعدة النتيجة في منطق هوار .
حازم
يكون محول المسند S صارمًا إذا وفقط إذا:
على سبيل المثال، يتم جعل wp صارمًا بشكل مصطنع، بينما لا يتم ذلك عادةً. على وجه الخصوص، إذا كان من غير الممكن إنهاء العبارة S،قابل للتنفيذ. لدينا
في الواقع، T هو ثابت صالح لتلك الحلقة.
تُسمى محولات المسند غير الصارمة، ولكنها رتيبة أو ترابطية، بالمعجزات، ويمكن استخدامها أيضًا لتعريف فئة من بنيات البرمجة، ولا سيما عبارات القفز، التي لم يُعرها ديكسترا اهتمامًا كبيرًا. تشمل عبارات القفز هذه الانتقال المباشر إلى L، وعبارات break وcontinue في حلقة تكرارية، وعبارات return في جسم إجراء، ومعالجة الاستثناءات، وما إلى ذلك. وقد تبيّن أن جميع عبارات القفز معجزات قابلة للتنفيذ، [ 5 ] أي أنه يمكن تنفيذها ولكنها ليست صارمة.
إنهاء
يكون محول المسند S منتهياً إذا:
في الواقع، لا يكون لهذا المصطلح معنى إلا بالنسبة لمحولات المسند الصارمة: في الحقيقة،هو أضعف شرط مسبق يضمن إنهاء S.
يبدو أن تسمية هذه الخاصية بـ "عدم الإجهاض" ستكون أكثر ملاءمة: ففي الصحة الكاملة، عدم الإنهاء هو إجهاض، بينما في الصحة الجزئية، ليس كذلك.
حرف عطف
يكون محول المسند S عطفيًا إذا وفقط إذا:
وينطبق هذا على، حتى لو كانت العبارة S غير حتمية كعبارة اختيار أو عبارة تحديد.
طباقي
يكون محول المسند S منفصلاً إذا وفقط إذا:
هذا ليس هو الحال عموماً بالنسبة لـعندما تكون العبارة S غير حتمية. في الواقع، لنفترض عبارة غير حتمية S تختار قيمة منطقية عشوائية. تُعطى هذه العبارة هنا على شكل عبارة الاختيار التالية :
ثم،يُختزل إلى الصيغة.
لذلك،يختزل إلى التكرار
بينما الصيغة يؤدي إلى الفرضية الخاطئة.
التطبيقات
- تُستخدم حسابات أضعف الشروط المسبقة إلى حد كبير للتحقق الثابت من التأكيدات في البرامج باستخدام مُثبت النظرية (مثل مُحلِّل قابلية الإرضاء modulo النظريات (SMT) أو مساعد إثبات النظرية التفاعلي ): انظر Frama-C أو ESC/Java 2.
- على عكس العديد من الصيغ الدلالية الأخرى، لم تُصمم دلالات محولات المسندات كبحث في أسس الحوسبة، بل كان الهدف منها تزويد المبرمجين بمنهجية لتطوير برامجهم "بشكل صحيح من حيث التصميم" بأسلوب حسابي. وقد دافع عن هذا الأسلوب "التنازلي" كل من ديكسترا [ 6 ] ون . ويرث [ 7 ] . وقد تم تطويره بشكل أكبر من قبل ر. ج. باك وآخرين في حساب التحسين . وتوفر بعض الأدوات، مثل B-Method، الآن استدلالًا آليًا لتعزيز هذه المنهجية.
- في النظرية الميتافيزيقية لمنطق هوار ، تظهر الشروط المسبقة الأضعف كمفهوم أساسي في إثبات الاكتمال النسبي . [ 8 ]
ما وراء محولات المسند
أضعف الشروط المسبقة وأقوى الشروط اللاحقة للتعبيرات الأمرية
في دلالات محولات المسند، تقتصر التعبيرات على حدود المنطق (انظر أعلاه). مع ذلك، يبدو هذا التقييد مفرطًا بالنسبة لمعظم لغات البرمجة الحالية، حيث قد يكون للتعبيرات آثار جانبية (مثل استدعاء دالة له أثر جانبي)، وقد لا تنتهي أو تُجهض (مثل القسمة على صفر ). هناك العديد من المقترحات لتوسيع نطاق أضعف الشروط المسبقة أو أقوى الشروط اللاحقة للغات التعبير الإجرائية، وخاصةً للغات المونادات .
من بينها، تجمع نظرية أنواع هوار بين منطق هوار للغة شبيهة بلغة هاسكل ، ومنطق الفصل، ونظرية الأنواع . [ 9 ] يُنفذ هذا النظام كمكتبة روك تُسمى Ynot . [ 10 ] في هذه اللغة، يتوافق تقييم التعبيرات مع حسابات أقوى الشروط اللاحقة .
محولات المسند الاحتمالي
تُعدّ محوّلات المسند الاحتمالية امتدادًا لمحوّلات المسند للبرامج الاحتمالية . لهذه البرامج استخدامات عديدة في علم التشفير (إخفاء المعلومات باستخدام ضوضاء عشوائية)، والحوسبة الموزعة (كسر التناظر). [ 11 ]
انظر أيضاً
- الدلالات البديهية – تشمل دلالات محول المسند
- المنطق الديناميكي – حيث تظهر محولات المسند كطرائق
- الدلالات الرسمية للغات البرمجة - نظرة عامة
ملحوظات
- ↑ تشين، وي وأودينغ، جان تيجمان، "صياغة بيان المواصفات المُحسّنة" WUCS-89-37 (1989). https://openscholarship.wustl.edu/cse_research/749
- ↑ تشين، وي، "توصيف عبارات القفز باستخدام لغة wp"، الندوة الدولية لعام 2021 حول الجوانب النظرية لهندسة البرمجيات (TASE)، 2021، ص 15-22. doi: 10.1109/TASE52547.2021.00019.
- ↑ لامبورت، ليزلي (يوليو 1990). " الربح والخطأ : محولات المسند للتزامن" . معاملات ACM في لغات البرمجة والأنظمة . 12 (3): 396-428 . CiteSeerX 10.1.1.33.90 . doi : 10.1145 /78969.78970 . S2CID 209901 .
- ↑ باك، رالف-يوهان؛ رايت، يواكيم (2012) [1978]. حساب التكرير: مقدمة منهجية . نصوص في علوم الحاسوب. سبرينغر. ISBN 978-1-4612-1674-2.
- ↑ تشين، وي، "عبارات الخروج معجزات قابلة للتنفيذ"، WUCS-91-53 (1991). https://openscholarship.wustl.edu/cse_research/671
- ↑ ديجكسترا، إدسكار دبليو. (1968). "مقاربة بنائية لمشكلة صحة البرنامج". الرياضيات العددية في BIT . 8 (3): 174-186 . doi : 10.1007/bf01933419 . S2CID 62224342 .
- ↑ ويرث، ن. (أبريل 1971). "تطوير البرامج من خلال التحسين التدريجي" (ملف PDF) . مجلة الاتصالات ACM . 14 (4): 221-227 . doi : 10.1145/362575.362577 . hdl : 20.500.11850/80846 . S2CID 13214445 .
- ↑ برنامج تعليمي حول عكس توليد التزامات إثبات هوار في Coq (برنامج تعليمي حول منطق هوار) : مكتبة Rocq (الحوسبة) ، تقدم برهانًا بسيطًا ولكنه رسمي على أن منطق هوار سليم وكامل فيما يتعلق بالدلالات التشغيلية .
- ↑ نانفسكي، ألكسندر؛ موريسيت، جريج؛ بيركيدال، لارس (سبتمبر 2008). "نظرية هوار للأنواع، وتعدد الأشكال، والفصل" (ملف PDF) . مجلة البرمجة الوظيفية . 18 ( 5-6 ): 865-911 . doi : 10.1017/S0956796808006953 . S2CID 6956622 .
- ↑ Ynot مكتبة Rocq تُنفذ نظرية أنواع Hoare.
- ↑ مورغان، كارول؛ ماك إيفر، أنابيل ؛ سيدل، كارين (مايو 1996). "محولات المسند الاحتمالية" (ملف PDF) . معاملات ACM في لغات البرمجة والأنظمة . 18 (3): 325-353 . CiteSeerX 10.1.1.41.9219 . doi : 10.1145/229542.229547 . S2CID 5812195 .
مراجع
- دي باكر، جيه دبليو (1980). النظرية الرياضية لصحة البرامج . برنتيس هول. ISBN 978-0-13-562132-5.
- بونسانج، مارسيلو م.؛ كوك، جوست ن. (نوفمبر 1994). "حساب الشروط المسبقة الأضعف: الاستدعاء الذاتي والازدواجية". الجوانب الرسمية للحوسبة . 6 (6): 788-800 . CiteSeerX 10.1.1.27.8491 . doi : 10.1007/BF01213603 . S2CID 40323488 .
- ديجكسترا، إدسكار دبليو. (أغسطس 1975). "الأوامر المحمية، وعدم الحتمية، والاشتقاق الرسمي للبرامج" . مجلة الاتصالات ACM . 18 (8): 453-457 . doi : 10.1145/360933.360975 . S2CID 1679242 .
- ديكسترا، إدجر دبليو. (1976). منهج البرمجة . برنتيس هول. ISBN 978-0-613-92411-5.– مقدمة منهجية لإصدار من لغة الأوامر المحمية مع العديد من الأمثلة العملية
- ديكسترا، إدسجر دبليو؛ شولتن، كاريل س. (1990). حساب التفاضل والتكامل المسند ودلالات البرنامج . النصوص والدراسات في علوم الكمبيوتر. سبرينغر-فيرلاغ. رقم ISBN 978-0-387-96957-2.– معالجة أكثر تجريدًا ورسمية وحسمًا
- جريس ، ديفيد (1981). علم البرمجة . سبرينغر-فيرلاغ. رقم ISBN 978-0-387-96480-5.
!-- فئات مخفية أدناه -->
- الأساليب الرسمية
- منطق البرنامج
- إدسكار دبليو. ديكسترا
