دلالات محول المسند

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

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

أضعف الشروط المسبقة

تعريف

بالنسبة لعبارة S وشرط لاحق R ، فإن أضعف شرط مسبق هو مسند Q بحيث يكون لأي شرط مسبق P ،{P}S{R}{\displaystyle \{P\}S\{R\}}إذا وفقط إذاPسؤال{\displaystyle P\Rightarrow Q}بمعنى آخر، هو الشرط "الأقل تقييدًا" أو الأقل صرامة اللازم لضمان تحقق R بعد S. ويترتب على التفرد بسهولة من التعريف: إذا كان كل من Q و Q' من أضعف الشروط المسبقة، فإنه بحسب التعريف{سؤال}S{R}{\displaystyle \{Q'\}S\{R\}}لذاسؤالسؤال{\displaystyle Q'\Rightarrow Q}و{سؤال}S{R}{\displaystyle \{Q\}S\{R\}}لذاسؤالسؤال{\displaystyle Q\Rightarrow Q'}وبالتاليسؤال=سؤال{\displaystyle Q=Q'}نستخدم غالبًاwص(S،R){\displaystyle wp(S,R)}للدلالة على أضعف شرط مسبق للعبارة S فيما يتعلق بشرط لاحق R.

الاتفاقيات

نستخدم الرمز T للدلالة على المسند الصحيح في كل مكان، والرمز F للدلالة على المسند الخاطئ في كل مكان. يجب ألا نخلط بين هذا المفهوم والتعبير المنطقي المُعرَّف بقواعد لغة معينة، والذي قد يحتوي أيضًا على القيمتين true و false كقيم منطقية عددية. بالنسبة لهذه القيم العددية، نحتاج إلى تحويل نوعي بحيث يكون لدينا T = predicate(true) و F = predicate(false). غالبًا ما يتم هذا التحويل بشكل غير رسمي، لذا يميل الناس إلى اعتبار T صحيحًا و F خاطئًا.

يتخطى

wص(يتخطى،R) = R{\displaystyle wp({\texttt {skip}},R)\ =\ R}

إجهاض

wص(إجهاض،R) = F{\displaystyle wp({\texttt {abort}},R)\ =\ {\texttt {F}}}

تكليف

نقدم فيما يلي شرطين متكافئين من أضعف الشروط المسبقة لعبارة التخصيص. في هذه الصيغ،R[xهـ]{\displaystyle R[x\leftarrow E]}هي نسخة من R حيث يتم استبدال حالات x الحرة بـ E. وبالتالي ، هنا، يتم إجبار التعبير E ضمنيًا على أن يصبح مصطلحًا صالحًا للمنطق الأساسي: إنه بالتالي تعبير نقي ، محدد تمامًا، نهائي وبدون آثار جانبية.

  • الإصدار 1:
wص(x:=هـ،R) = (y.y=هـR[xy]){\displaystyle wp(x:=E,R)\ =\ (\forall yy=E\Rightarrow R[x\leftarrow y])}

حيث يمثل y متغيرًا جديدًا وغير حر في E و R (يمثل القيمة النهائية للمتغير x )

  • الإصدار 2:

بافتراض أن E محددة جيدًا، نطبق ما يسمى بقاعدة النقطة الواحدة على الإصدار 1. ثم

wص(x:=هـ،R) = R[xهـ]{\displaystyle wp(x:=E,R)\ =\ R[x\leftarrow E]}

يتجنب الإصدار الأول احتمال تكرار x في R ، بينما يكون الإصدار الثاني أبسط عندما يكون هناك ظهور واحد على الأكثر لـ x في R. كما يكشف الإصدار الأول عن ازدواجية عميقة بين أضعف شرط مسبق وأقوى شرط لاحق (انظر أدناه).

مثال على حساب صحيح لـ wp (باستخدام الإصدار 2) لعمليات الإسناد مع متغير x ذي قيمة عددية صحيحة هو:

wص(x:=x-5،x>10)=x-5>10x>15{\displaystyle {\begin{array}{rcl}wp(x:=x-5,x>10)&=&x-5>10\\&\Leftrightarrow &x>15\end{array}}}

هذا يعني أنه لكي يتحقق الشرط اللاحق x > 10 بعد عملية الإسناد، يجب أن يتحقق الشرط المسبق x > 15 قبل عملية الإسناد. وهذا أيضًا هو "أضعف شرط مسبق"، لأنه "أضعف" قيد على قيمة x الذي يجعل x > 10 صحيحًا بعد عملية الإسناد.

تسلسل

wص(S1؛S2،R) = wص(S1،wص(S2،R)){\displaystyle wp(S_{1};S_{2},R)\ =\ wp(S_{1},wp(S_{2},R))}

على سبيل المثال،

wص(x:=x-5؛x:=x*2 ، x>20)=wص(x:=x-5،wص(x:=x*2،x>20))=wص(x:=x-5،x*2>20)=(x-5)*2>20=x>15{\displaystyle {\begin{array}{rcl}wp(x:=x-5;x:=x*2\ ,\ x>20)&=&wp(x:=x-5,wp(x:=x*2,x>20))\\&=&wp(x:=x-5,x*2>20)\\&=&(x-5)*2>20\\&=&x>15\end{array}}}

شرطي

wص(لو هـ ثم S1 آخر S2 نهاية،R) = (هـwص(S1،R))(¬هـwص(S2،R)){\displaystyle wp({\texttt {if}}\ E\ {\texttt {then}}\ S_{1}\ {\texttt {else}}\ S_{2}\ {\texttt {end}},R)\ =\ (E\Rightarrow wp(S_{1},R))\wedge (\neg E\Rightarrow wp(S_{2},R))}

على سبيل المثال:

wص(لو x<y ثم x:=y آخريتخطىنهاية، xy)=(x<ywص(x:=y،xy))  (¬(x<y)wص(يتخطى،xy))=(x<yyy)  (¬(x<y)xy)حقيقي// \wedge \ (\neg (x<y)\Rightarrow wp({\texttt {skip}},x\geq y))\\&=&(x<y\Rightarrow y\geq y)\ \wedge \ (\neg (x<y)\Rightarrow x\geq y)\\&\Leftrightarrow &{\texttt {true}}\end{array}}}

حلقة التكرار

صحة جزئية

بغض النظر عن الإنهاء للحظة، يمكننا تعريف قاعدة أضعف شرط مسبق ليبرالي ، ويرمز له بـ wlp ، باستخدام دالة منطقية INV ، تسمى Loop INV ariant ، والتي عادةً ما يوفرها المبرمج:

wلص(بينما هـ يفعل S منتهي،R) INV  لو  (هـINVwلص(S،INV)) (¬هـINVR){\displaystyle wlp({\texttt {while}}\ E\ {\texttt {do}}\ S\ {\texttt {done}},R)\Leftarrow \ {\textit {INV}}\ \ {\text{if}}\ \ {\begin{array}{l}\\(E\wedge {\textit {INV}}\Rightarrow wlp(S,{\textit {INV}}))\\\wedge \ (\neg E\wedge {\textit {INV}}\Rightarrow R)\end{array}}}

صحة تامة

لإثبات صحة الحل تمامًا، علينا أيضًا إثبات انتهاء الحلقة. ولتحقيق ذلك، نُعرّف علاقةً راسخةً على فضاء الحالة، ونرمز لها بـ ( wfs , <)، ونُعرّف دالةً مُتغيرةً vf ، بحيث يكون لدينا:

wص(بينما هـ يفعل S منتهي،R)  INV  لو    (هـINVvfwfs) (هـINVv=vfwص(S،INVv<vf)) (¬هـINVR){\displaystyle wp({\texttt {while}}\ E\ {\texttt {do}}\ S\ {\texttt {done}},R)\ \Leftarrow \ {\textit {INV}}\ \ {\text{if}}\ \ \ \ {\begin{array}{l}\\(E\wedge {\textit {INV}}\Rightarrow {\textit {vf}}\in {\textit {wfs}})\\\wedge \ (E\wedge {\textit {INV}}\wedge v={\textit {vf}}\Rightarrow wp(S,{\textit {INV}}\wedge v<{\textit {vf}}))\\\wedge \ (\neg E\wedge {\textit {INV}}\Rightarrow R)\end{array}}}

حيث v عبارة عن مجموعة جديدة من المتغيرات

بصورة غير رسمية، في الجمع بين الصيغ الثلاث المذكورة أعلاه:

  • الأول يعني أن المتغير يجب أن يكون جزءًا من العلاقة الراسخة قبل دخول الحلقة؛
  • أما الثاني فيعني أن جسم الحلقة (أي العبارة S ) يجب أن يحافظ على الثابت ويقلل من المتغير؛
  • أما الشرط الأخير فيعني أنه يجب تحديد شرط ما بعد الحلقة R عند انتهاء الحلقة.

لكن اجتماع هذه العناصر الثلاثة ليس شرطاً ضرورياً. بالضبط، لدينا

wص(بينما هـ يفعل S منتهي،R)  =  أقوى حل للمعادلة التكرارية Z:[Z(هـwص(S،Z))(¬هـR)]{\displaystyle wp({\texttt {while}}\ E\ {\texttt {do}}\ S\ {\texttt {done}},R)\ \ =\ \ {\text{الحل الأقوى للمعادلة التكرارية}}\ {\begin{array}{l}Z:[Z\equiv (E\wedge wp(S,Z))\vee (\neg E\wedge R)]\end{array}}}

أوامر محمية غير حتمية

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

  • أن هناك تنفيذًا نهائيًا (على سبيل المثال، هناك تطبيق)،
  • وأن الحالة النهائية لجميع عمليات التنفيذ المنتهية تفي بالشرط اللاحق.

إن تعريفات أضعف شرط مسبق المذكورة أعلاه (وخاصة بالنسبة لحلقة while ) تحافظ على هذه الخاصية.

اختيار

الاختيار هو تعميم لعبارة if :

wص(لو هـ1S1 [] ... [] هـنSن fi،R) =(هـ1...هـن) (هـ1wص(S1،R))... (هـنwص(Sن،R)){\displaystyle wp({\texttt {if}}\ E_{1}\rightarrow S_{1}\ [\!]\ \ldots \ [\!]\ E_{n}\rightarrow S_{n}\ {\texttt {fi}},R)\ ={\begin{array}{l}(E_{1}\vee \ldots \vee E_{n})\\\wedge \ (E_{1}\Rightarrow wp(S_{1},R))\\\ldots \\\wedge \ (E_{n}\Rightarrow wp(S_{n},R))\\\end{array}}}

هنا، عندما كان هناك حارسانهـأنا{\displaystyle E_{i}}وهـج{\displaystyle E_{j}}إذا كانت هذه العبارات صحيحة في آن واحد، فيمكن تنفيذ أي من العبارات المرتبطة بها.Sأنا{\displaystyle S_{i}}أوSج{\displaystyle S_{j}}.

تكرار

التكرار هو تعميم لعبارة while بطريقة مماثلة.

بيان المواصفات

يُوسّع حساب التحسين لغة GCL بمفهوم عبارة المواصفات . من الناحية التركيبية، نُفضّل كتابة عبارة المواصفات على النحو التالي:

x:ل[صرهـ،صosت]{\displaystyle x:l[pre,post]}

والتي تحدد عملية حسابية تبدأ في حالة تحقق الشرط pre وتضمن أن تنتهي في حالة تحقق الشرط post عن طريق تغيير x فقط . نسميهال{\displaystyle l}ثابت منطقي يُستخدم للمساعدة في تحديد المواصفات. على سبيل المثال، يمكننا تحديد عملية حسابية تزيد قيمة x بمقدار 1 كما يلي:

x:ل[x=ل،x=ل+1]{\displaystyle x:l[x=l,x=l+1]}

مثال آخر هو حساب الجذر التربيعي لعدد صحيح.

x:ل[x=ل2،x=ل]{\displaystyle x:l[x=l^{2},x=l]}

تبدو عبارة التحديد بدائيةً بمعنى أنها لا تحتوي على عبارات أخرى. ومع ذلك، فهي معبرة للغاية، لأن الشرطين المسبق واللاحق عبارة عن مسندات اختيارية. وأضعف شرط مسبق لها هو كما يلي.

wص(x:ل[صرهـ،صosت]،R)=(ل::صرهـ)(s:(ل:صرهـ:صosت(xs)):R(xs)){\displaystyle wp(x:l[pre,post],R)=(\exists l::pre)\wedge (\forall s:(\forall l:pre:post(x\leftarrow s)):R(x\leftarrow s))}

حيث s تعني طازج.

يجمع هذا الأسلوب بين فكرة مورغان النحوية وفكرة الحدة التي طرحها بيجلسما وماثيوز وويلتينك. [ 1 ] وتكمن ميزته الأساسية في قدرته على تعريف wp لأمر goto L وعبارات القفز الأخرى. [ 2 ]

انتقل إلى البيان

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

wص(انتقل إلى ل،R)=wصل{\displaystyle wp({\texttt {goto}}\ L,R)=wpL}

حيث wpL هو أضعف شرط مسبق عند العلامة L.

بالنسبة لأمر goto ينقل التنفيذ التحكم إلى التسمية L التي يجب أن يتحقق عندها أضعف شرط مسبق. ولا ينبغي اعتبار طريقة الإشارة إلى wpL في القاعدة مفاجئة. إنها فقطwص(ل:S،سؤال){\displaystyle wp(L:S,Q)}بالنسبة لقيمة Q المحسوبة حتى تلك النقطة. يشبه هذا أي قاعدة wp، حيث تستخدم عبارات مكونة لإعطاء تعريفات wp، على الرغم من أن goto L تبدو عملية بدائية. لا تتطلب القاعدة التفرد للمواقع التي يتحقق فيها wpL داخل البرنامج، لذا فهي تسمح نظريًا بظهور نفس التسمية في مواقع متعددة طالما أن أضعف شرط مسبق في كل موقع هو نفس wpL. يمكن لعبارة goto الانتقال إلى أي من هذه المواقع. هذا في الواقع يبرر أنه يمكننا وضع نفس التسميات في نفس الموقع عدة مرات، كما هو الحال في ...S(ل:ل:S1){\displaystyle S(L:L:S1)}، وهو نفس الشيءS(ل:S1){\displaystyle S(L:S1)}كما أنه لا يتضمن أي قاعدة نطاق، مما يسمح بالقفز إلى داخل حلقة تكرارية، على سبيل المثال. لنحسب قيمة 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).

محولات المسند الأخرى

أضعف شرط ليبرالي مسبق

يُعد الشرط الليبرالي الأضعف أحد المتغيرات المهمة لأضعف شرط مسبقwلص(S،R){\displaystyle wlp(S,R)}وهذا يُنتج أضعف شرطٍ إما أن لا تنتهي فيه S أو أن تُنشئ R. ولذلك، فهو يختلف عن wp في عدم ضمانه للإنهاء. ومن ثم، فهو يُطابق منطق هوار في صحته الجزئية: بالنسبة للغة العبارات المذكورة أعلاه، يختلف wlp عن wp فقط في حلقة while ، حيث لا يتطلب متغيرًا (انظر أعلاه).

أقوى حالة ما بعد العلاج

بفرض أن S عبارة و R شرط مسبق (مسند على الحالة الأولية)، فإن sص(S،R){\displaystyle sp(S,R)}هو أقوى شرط لاحق لديهم : فهو يستلزم أي شرط لاحق تحققه الحالة النهائية لأي تنفيذ لـ S، لأي حالة ابتدائية تحقق R. بعبارة أخرى، ثلاثية هوار{P}S{سؤال}{\displaystyle \{P\}S\{Q\}}يمكن إثبات ذلك في منطق هوار إذا وفقط إذا تحققت الشرطية التالية:

x،sص(S،P)سؤال{\displaystyle \forall x,sp(S,P)\Rightarrow Q}

عادةً ما تُستخدم أقوى الشروط اللاحقة في الصحة الجزئية. ومن ثم، لدينا العلاقة التالية بين أضعف الشروط المسبقة الليبرالية وأقوى الشروط اللاحقة:

(x،Pwلص(S،سؤال))  (x،sص(S،P)سؤال){\displaystyle (\forall x,P\Rightarrow wlp(S,Q))\ \Leftrightarrow \ (\forall x,sp(S,P)\Rightarrow Q)}

على سبيل المثال، لدينا في المهمة ما يلي:

sص(x:=هـ،R) = y،x=هـ[xy]R[xy]{\displaystyle sp(x:=E,R)\ =\ \exists y,x=E[x\leftarrow y]\wedge R[x\leftarrow y]}

حيث يكون y طازجًا

في المثال أعلاه، يمثل المتغير المنطقي y القيمة الأولية للمتغير x . وبالتالي،

sص(x:=x-5،x>15) = y،x=y-5y>15  x>10{\displaystyle sp(x:=x-5,x>15)\ =\ \exists y,x=y-5\wedge y>15\ \Leftrightarrow \ x>10}

في التسلسل، يبدو أن sp يعمل للأمام (بينما wp يعمل للخلف):

sص(S1؛S2 ، R) = sص(S2،sص(S1،R)){\displaystyle sp(S_{1};S_{2}\ ,\ R)\ =\ sp(S_{2},sp(S_{1},R))}

محولات المسند للربح والخطيئة

اقترح ليزلي لامبورت استخدام win و sin كمحولات للمسندات في البرمجة المتزامنة . [ 3 ]

خصائص محولات المسند

يعرض هذا القسم بعض الخصائص المميزة لمحولات المسند. [ 4 ] فيما يلي، يرمز S إلى محول المسند (دالة بين مسندين في فضاء الحالة)، و P إلى مسند. على سبيل المثال، قد يرمز S(P) إلى wp(S,P) أو sp(S,P) . نبقي x كمتغير فضاء الحالة.

رتيب

تكون محولات المسند ذات الأهمية ( wp و wlp و sp ) رتيبة . يكون محول المسند S رتيبًا إذا وفقط إذا:

(x:P:سؤال)(x:S(P):S(سؤال)){\displaystyle (\forall x:P:Q)\Rightarrow (\forall x:S(P):S(Q))}

ترتبط هذه الخاصية بقاعدة النتيجة في منطق هوار .

حازم

يكون محول المسند S صارمًا إذا وفقط إذا:

S(F)  F{\displaystyle S({\texttt {F}})\ \Leftrightarrow \ {\texttt {F}}}

على سبيل المثال، يتم جعل wp صارمًا بشكل مصطنع، بينما لا يتم ذلك عادةً. على وجه الخصوص، إذا كان من غير الممكن إنهاء العبارة wلص(S،F){\displaystyle wlp(S,{\texttt {F}})}قابل للتنفيذ. لدينا

wلص(بينما حقيقي يفعل يتخطى منتهي،F) تي{\displaystyle wlp({\texttt {while}}\ {\texttt {true}}\ {\texttt {do}}\ {\texttt {skip}}\ {\texttt {done}},{\texttt {F}})\ \Leftrightarrow {\texttt {T}}}

في الواقع، T هو ثابت صالح لتلك الحلقة.

تُسمى محولات المسند غير الصارمة، ولكنها رتيبة أو ترابطية، بالمعجزات، ويمكن استخدامها أيضًا لتعريف فئة من بنيات البرمجة، ولا سيما عبارات القفز، التي لم يُعرها ديكسترا اهتمامًا كبيرًا. تشمل عبارات القفز هذه الانتقال المباشر إلى L، وعبارات break وcontinue في حلقة تكرارية، وعبارات return في جسم إجراء، ومعالجة الاستثناءات، وما إلى ذلك. وقد تبيّن أن جميع عبارات القفز معجزات قابلة للتنفيذ، [ 5 ] أي أنه يمكن تنفيذها ولكنها ليست صارمة.

إنهاء

يكون محول المسند S منتهياً إذا:

S(تي)  تي{\displaystyle S({\texttt {T}})\ \Leftrightarrow \ {\texttt {T}}}

في الواقع، لا يكون لهذا المصطلح معنى إلا بالنسبة لمحولات المسند الصارمة: في الحقيقة،wص(S،تي){\displaystyle wp(S,{\texttt {T}})}هو أضعف شرط مسبق يضمن إنهاء S.

يبدو أن تسمية هذه الخاصية بـ "عدم الإجهاض" ستكون أكثر ملاءمة: ففي الصحة الكاملة، عدم الإنهاء هو إجهاض، بينما في الصحة الجزئية، ليس كذلك.

حرف عطف

يكون محول المسند S عطفيًا إذا وفقط إذا:

S(Pسؤال)  S(P)S(سؤال){\displaystyle S(P\wedge Q)\ \Leftrightarrow \ S(P)\wedge S(Q)}

وينطبق هذا علىwص(S،.){\displaystyle wp(S,.)}، حتى لو كانت العبارة S غير حتمية كعبارة اختيار أو عبارة تحديد.

طباقي

يكون محول المسند S منفصلاً إذا وفقط إذا:

S(Pسؤال)  S(P)S(سؤال){\displaystyle S(P\vee Q)\ \Leftrightarrow \ S(P)\vee S(Q)}

هذا ليس هو الحال عموماً بالنسبة لـwص(S،.){\displaystyle wp(S,.)}عندما تكون العبارة S غير حتمية. في الواقع، لنفترض عبارة غير حتمية S تختار قيمة منطقية عشوائية. تُعطى هذه العبارة هنا على شكل عبارة الاختيار التالية :

S = لو حقيقيx:=0 [] حقيقيx:=1 fi{\displaystyle S\ =\ {\texttt {if}}\ {\texttt {true}}\rightarrow x:=0\ [\!]\ {\texttt {true}}\rightarrow x:=1\ {\texttt {fi}}}

ثم،wص(S،R){\displaystyle wp(S,R)}يُختزل إلى الصيغةR[x0]R[x1]{\displaystyle R[x\leftarrow 0]\wedge R[x\leftarrow 1]}.

لذلك،wص(S، x=0x=1){\displaystyle wp(S,\ x=0\vee x=1)}يختزل إلى التكرار(0=00=1)(1=01=1){\displaystyle (0=0\vee 0=1)\wedge (1=0\vee 1=1)}

بينما الصيغةwص(S،x=0)wص(S،x=1){\displaystyle wp(S,x=0)\vee wp(S,x=1)} يؤدي إلى الفرضية الخاطئة(0=01=0)(1=01=1){\displaystyle (0=0\wedge 1=0)\vee (1=0\wedge 1=1)}.

التطبيقات

ما وراء محولات المسند

أضعف الشروط المسبقة وأقوى الشروط اللاحقة للتعبيرات الأمرية

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

من بينها، تجمع نظرية أنواع هوار بين منطق هوار للغة شبيهة بلغة هاسكل ، ومنطق الفصل، ونظرية الأنواع . [ 9 ] يُنفذ هذا النظام كمكتبة روك تُسمى Ynot . [ 10 ] في هذه اللغة، يتوافق تقييم التعبيرات مع حسابات أقوى الشروط اللاحقة .

محولات المسند الاحتمالي

تُعدّ محوّلات المسند الاحتمالية امتدادًا لمحوّلات المسند للبرامج الاحتمالية . لهذه البرامج استخدامات عديدة في علم التشفير (إخفاء المعلومات باستخدام ضوضاء عشوائية)، والحوسبة الموزعة (كسر التناظر). [ 11 ]

انظر أيضاً

ملحوظات

  1. تشين، وي وأودينغ، جان تيجمان، "صياغة بيان المواصفات المُحسّنة" WUCS-89-37 (1989). https://openscholarship.wustl.edu/cse_research/749
  2. تشين، وي، "توصيف عبارات القفز باستخدام لغة wp"، الندوة الدولية لعام 2021 حول الجوانب النظرية لهندسة البرمجيات (TASE)، 2021، ص 15-22. doi: 10.1109/TASE52547.2021.00019.
  3. لامبورت، ليزلي (يوليو 1990). " الربح والخطأ : محولات المسند للتزامن" . معاملات ACM في لغات البرمجة والأنظمة . 12 (3): 396-428 . CiteSeerX 10.1.1.33.90 . doi : 10.1145 /78969.78970 . S2CID 209901 .  
  4. باك، رالف-يوهان؛ رايت، يواكيم (2012) [1978]. حساب التكرير: مقدمة منهجية . نصوص في علوم الحاسوب. سبرينغر. ISBN 978-1-4612-1674-2.
  5. تشين، وي، "عبارات الخروج معجزات قابلة للتنفيذ"، WUCS-91-53 (1991). https://openscholarship.wustl.edu/cse_research/671
  6. ديجكسترا، إدسكار دبليو. (1968). "مقاربة بنائية لمشكلة صحة البرنامج". الرياضيات العددية في BIT . 8 (3): 174-186 . doi : 10.1007/bf01933419 . S2CID 62224342 . 
  7. ويرث، ن. (أبريل 1971). "تطوير البرامج من خلال التحسين التدريجي" (ملف PDF) . مجلة الاتصالات ACM . 14 (4): 221-227 . doi : 10.1145/362575.362577 . hdl : 20.500.11850/80846 . S2CID 13214445 . 
  8. برنامج تعليمي حول عكس توليد التزامات إثبات هوار في Coq (برنامج تعليمي حول منطق هوار) : مكتبة Rocq (الحوسبة) ، تقدم برهانًا بسيطًا ولكنه رسمي على أن منطق هوار سليم وكامل فيما يتعلق بالدلالات التشغيلية .
  9. نانفسكي، ألكسندر؛ موريسيت، جريج؛ بيركيدال، لارس (سبتمبر 2008). "نظرية هوار للأنواع، وتعدد الأشكال، والفصل" (ملف PDF) . مجلة البرمجة الوظيفية . 18 ( 5-6 ): 865-911 . doi : 10.1017/S0956796808006953 . S2CID 6956622 . 
  10. Ynot مكتبة Rocq تُنفذ نظرية أنواع Hoare.
  11. مورغان، كارول؛ ماك إيفر، أنابيل ؛ سيدل، كارين (مايو 1996). "محولات المسند الاحتمالية" (ملف PDF) . معاملات ACM في لغات البرمجة والأنظمة . 18 (3): 325-353 . CiteSeerX 10.1.1.41.9219 . doi : 10.1145/229542.229547 . S2CID 5812195 .  

مراجع

!-- فئات مخفية أدناه -->