منطق هوار

منطق هوار (المعروف أيضًا بمنطق فلويد-هوار أو قواعد هوار ) هو نظام رسمي يتضمن مجموعة من القواعد المنطقية للاستدلال بدقة حول صحة برامج الحاسوب . اقترحه عالم الحاسوب والمنطقي البريطاني توني هوار عام 1969 ، ثم قام هوار وباحثون آخرون بتطويره لاحقًا. [ 1 ] استُلهمت الأفكار الأصلية من أعمال روبرت دبليو فلويد ، الذي نشر نظامًا مشابهًا [ 2 ] للمخططات الانسيابية .

هوار الثلاثي

السمة الأساسية لمنطق هوار هي ثلاثية هوار . تصف الثلاثية كيف يُغير تنفيذ جزء من التعليمات البرمجية حالة الحساب. تأخذ ثلاثية هوار الشكل التالي:

{P}ج{سؤال}{\displaystyle \{P\}C\{Q\}}

أينP{\displaystyle P}وسؤال{\displaystyle Q}هي ادعاءات وج{\displaystyle C}هو أمر . [ ملاحظة 1 ]P{\displaystyle P}يُطلق عليه اسم الشرط المسبق وسؤال{\displaystyle Q}الشرط اللاحق : عند تحقق الشرط المسبق، يؤدي تنفيذ الأمر إلى إثبات الشرط اللاحق. التأكيدات هي صيغ في منطق المسند .

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

صحة جزئية وصحيحة كاملة

باستخدام منطق هوار القياسي، لا يمكن إثبات سوى صحة جزئية . تتطلب الصحة الكاملة أيضًا إنهاءً ، والذي يمكن إثباته بشكل منفصل أو باستخدام نسخة موسعة من قاعدة "While". [ 3 ] وبالتالي، فإن القراءة البديهية لثلاثية هوار هي: كلماP{\displaystyle P}ممتلكات الدولة قبل تنفيذج{\displaystyle C}، ثمسؤال{\displaystyle Q}سيُعقد بعد ذلك، أوج{\displaystyle C}لا تنتهي. في الحالة الأخيرة، لا يوجد شيء اسمه "بعد"، لذاسؤال{\displaystyle Q}يمكن أن تكون أي عبارة على الإطلاق. في الواقع، يمكن للمرء أن يختارسؤال{\displaystyle Q}أن تكون كاذباً للتعبير عن ذلكج{\displaystyle C}لا ينتهي.

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

من أوجه القصور الأخرى في البديهيات والقواعد المذكورة أعلاه أنها لا تُقدّم أساسًا لإثبات نجاح إنهاء البرنامج. قد يعود عدم الإنهاء إلى حلقة تكرار لا نهائية، أو إلى تجاوز حدٍّ مُحدّد من قِبل النظام، مثل نطاق المعاملات العددية، أو حجم التخزين، أو حدّ زمني لنظام التشغيل. ومن هنا جاءت التسمية "P{سؤال}R{\displaystyle P\{Q\}R}ينبغي تفسير العبارة التالية على النحو التالي: "شريطة أن ينتهي البرنامج بنجاح، يتم وصف خصائص نتائجه بواسطةR{\displaystyle R}من السهل نسبيًا تعديل البديهيات بحيث لا يمكن استخدامها للتنبؤ بنتائج البرامج غير المنتهية؛ لكن الاستخدام الفعلي لهذه البديهيات سيعتمد الآن على معرفة العديد من الخصائص المرتبطة بالتنفيذ، مثل حجم الحاسوب وسرعته، ونطاق الأرقام، واختيار تقنية معالجة تجاوز السعة. وبغض النظر عن براهين تجنب الحلقات اللانهائية، فمن الأفضل على الأرجح إثبات صحة البرنامج "المشروطة" والاعتماد على التنفيذ لإصدار تحذير في حال اضطراره إلى التوقف عن تنفيذ البرنامج نتيجةً لتجاوز أحد حدود التنفيذ.

هوار 1969 ، الصفحات 578-579 

قواعد

مخطط بديهية العبارة الفارغة

تنص قاعدة العبارة الفارغة على أن عبارة التخطي لا تُغير حالة البرنامج، وبالتالي فإن أي شيء صحيح قبل التخطي يظل صحيحًا بعده. [ ملاحظة 2 ]

{P}يتخطى{P}{\displaystyle {\dfrac {}{\{P\}{\texttt {skip}}\{P\}}}}

مخطط بديهية التخصيص

تنص بديهية التخصيص على أنه بعد التخصيص، فإن أي مسند كان صحيحًا سابقًا للجانب الأيمن من التخصيص ، يصبح صحيحًا الآن للمتغير. رسميًا، ليكن P عبارة يكون فيها المتغير x حرًا . إذن:

{P[هـ/x]}x:=هـ{P}{\displaystyle {\dfrac {}{\{P[E/x]\}x:=E\{P\}}}}

أينP[هـ/x]{\displaystyle P[E/x]}يشير إلى التأكيد P الذي تم فيه استبدال كل ظهور حر لـ x بالتعبير E.

يعني مخطط بديهية التخصيص أن صحةP[هـ/x]{\displaystyle P[E/x]}يكافئ ذلك صحة P بعد التخصيص . وبالتالي، لوP[هـ/x]{\displaystyle P[E/x]}إذا كانت العبارة صحيحة قبل التخصيص، وفقًا لمسلمة التخصيص، فإن العبارة ستكون صحيحة بعد ذلك. والعكس صحيح.P[هـ/x]{\displaystyle P[E/x]}خطأ (أي¬P[هـ/x]{\displaystyle \neg P[E/x]}إذا كانت P صحيحة قبل عبارة التخصيص، فيجب أن تكون خاطئة بعدها.

من أمثلة الثلاثيات الصحيحة ما يلي:

  • {x+1=43}y:=x+1{y=43}{\displaystyle \{x+1=43\}y:=x+1\{y=43\}}
  • {x+1شمال}x:=x+1{xشمال}{\displaystyle \{x+1\leq N\}x:=x+1\{x\leq N\}}

يمكن نقل جميع الشروط المسبقة التي لم يتم تعديلها بواسطة التعبير إلى الشرط اللاحق. في المثال الأول، يتم تعيينy:=x+1{\displaystyle y:=x+1}لا يغير ذلك من حقيقة أنx+1=43{\displaystyle x+1=43}لذا، قد يظهر كلا البيانين في الشرط اللاحق. رسميًا، يتم الحصول على هذه النتيجة بتطبيق مخطط البديهيات مع كون P (y=43{\displaystyle y=43}وx+1=43{\displaystyle x+1=43})، مما ينتج عنهP[(x+1)/y]{\displaystyle P[(x+1)/y]}كون (x+1=43{\displaystyle x+1=43}وx+1=43{\displaystyle x+1=43})، والتي يمكن بدورها تبسيطها إلى الشرط المسبق المحددx+1=43{\displaystyle x+1=43}.

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

{x=5}x:=3{3=5}{\displaystyle \{x=5\}x:=3\{3=5\}}

قاعدة أخرى خاطئة تبدو مغرية للوهلة الأولى هي{P}x:=هـ{Px=هـ}{\displaystyle \{P\}x:=E\{P\wedge x=E\}}ويؤدي ذلك إلى أمثلة غير منطقية مثل:

{x=5}x:=x+1{x=5x=x+1}{\displaystyle \{x=5\}x:=x+1\{x=5\wedge x=x+1\}}

بينما يحدد شرط ما بعد معين P بشكل فريد الشرط المسبقP[هـ/x]{\displaystyle P[E/x]}أما العكس فليس صحيحاً. على سبيل المثال:

  • {0yyyy9}x:=yy{0xx9}{\displaystyle \{0\leq y\cdot y\wedge y\cdot y\leq 9\}x:=y\cdot y\{0\leq x\wedge x\leq 9\}}،
  • {0yyyy9}x:=yy{0xyy9}{\displaystyle \{0\leq y\cdot y\wedge y\cdot y\leq 9\}x:=y\cdot y\{0\leq x\wedge y\cdot y\leq 9\}}،
  • {0yyyy9}x:=yy{0yyx9}{\displaystyle \{0\leq y\cdot y\wedge y\cdot y\leq 9\}x:=y\cdot y\{0\leq y\cdot y\wedge x\leq 9\}}، و
  • {0yyyy9}x:=yy{0yyyy9}{\displaystyle \{0\leq y\cdot y\wedge y\cdot y\leq 9\}x:=y\cdot y\{0\leq y\cdot y\wedge y\cdot y\leq 9\}}

تُعدّ هذه أمثلة صحيحة لمخطط بديهية التخصيص.

لا تنطبق بديهية التخصيص التي اقترحها هوار عندما يشير أكثر من اسم إلى نفس القيمة المخزنة. على سبيل المثال،

{y=3}x:=2{y=3}{\displaystyle \{y=3\}x:=2\{y=3\}}

يكون هذا خطأً إذا كان x و y يشيران إلى نفس المتغير ( التداخل )، على الرغم من أنه مثال صحيح لمخطط بديهية التخصيص (مع كليهما).{P}{\displaystyle \{P\}}و{P[2/x]}{\displaystyle \{P[2/x]\}}كون{y=3}{\displaystyle \{y=3\}}).

قاعدة التأليف

تنطبق قاعدة هوار للتركيب على البرامج التي يتم تنفيذها بالتسلسل S و T ، حيث يتم تنفيذ S قبل T ويتم كتابتهاS؛تي{\displaystyle S;T}( يُطلق على Q اسم الشرط المتوسط ): [ 4 ]

{P}S{سؤال}،{سؤال}تي{R}{P}S؛تي{R}{\displaystyle {\dfrac {\{P\}S\{Q\}\quad ,\quad \{Q\}T\{R\}}{\{P\}S;T\{R\}}}}

على سبيل المثال، انظر إلى الحالتين التاليتين لبديهية التخصيص:

{x+1=43}y:=x+1{y=43}{\displaystyle \{x+1=43\}y:=x+1\{y=43\}}

و

{y=43}z:=y{z=43}{\displaystyle \{y=43\}z:=y\{z=43\}}

وبناءً على قاعدة التسلسل، نستنتج ما يلي:

{x+1=43}y:=x+1؛z:=y{z=43}{\displaystyle \{x+1=43\}y:=x+1;z:=y\{z=43\}}

يظهر مثال آخر في المربع الأيمن.

القاعدة الشرطية

{بP}S{سؤال}،{¬بP}تي{سؤال}{P}لو ب ثم S آخر تي endif{سؤال}{\displaystyle {\dfrac {\{B\wedge P\}S\{Q\}\quad ,\quad \{\neg B\wedge P\}T\{Q\}}{\{P\}{\texttt {if}}\ B\ {\texttt {then}}\ S\ {\texttt {else}}\ T\ {\texttt {endif}}\{Q\}}}}

تنص القاعدة الشرطية على أن الشرط اللاحق Q المشترك بين جزئي then و else هو أيضًا شرط لاحق لعبارة if...endif بأكملها . [ 5 ] في جزئي then و else ، يمكن إضافة الشرط B غير المنفي والمنفي إلى الشرط المسبق P ، على التوالي. يجب ألا يكون للشرط B أي آثار جانبية. يرد مثال على ذلك في القسم التالي .

لم تكن هذه القاعدة واردة في منشور هوار الأصلي. [ 1 ] ومع ذلك، منذ صدور بيان

لو ب ثم S آخر تي endif{\displaystyle {\texttt {if}}\ B\ {\texttt {then}}\ S\ {\texttt {else}}\ T\ {\texttt {endif}}}

له نفس تأثير بنية الحلقة لمرة واحدة

منطقي ب:=حقيقي؛بينما بب يفعل S؛ب:=خطأ شنيع منتهي؛ب:=حقيقي؛بينما ¬بب يفعل تي؛ب:=خطأ شنيع منتهي{\displaystyle {\texttt {bool}}\ b:={\texttt {true}};{\texttt {while}}\ B\wedge b\ {\texttt {do}}\ S;b:={\texttt {false}}\ {\texttt {done}};b:={\texttt {true}};{\texttt {while}}\ \neg B\wedge b\ {\texttt {do}}\ T;b:={\texttt {false}}\ {\texttt {done}}}

يمكن اشتقاق القاعدة الشرطية من قواعد هوار الأخرى. وبالمثل، يمكن اختزال قواعد بنيات البرامج المشتقة الأخرى، مثل حلقة for ، وحلقة do...until ، و switch ، وbreak ، و continue ، عن طريق تحويل البرنامج إلى القواعد الواردة في ورقة هوار الأصلية.

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

P1P2،{P2}S{سؤال2}،سؤال2سؤال1{P1}S{سؤال1}{\displaystyle {\dfrac {P_{1}\rightarrow P_{2}\quad ,\quad \{P_{2}\}S\{Q_{2}\}\quad ,\quad Q_{2}\rightarrow Q_{1}}{\{P_{1}\}S\{Q_{1}\}}}}

تسمح هذه القاعدة بتعزيز الشرط المسبقP2{\displaystyle P_{2}}و/أو لإضعاف الشرط اللاحقسؤال2{\displaystyle Q_{2}}. يتم استخدامه، على سبيل المثال، لتحقيق شروط لاحقة متطابقة حرفيًا لجزء then وجزء else .

على سبيل المثال، برهان على

{0x15}لو x<15 ثم x:=x+1 آخر x:=0 endif{0x15}{\displaystyle \{0\leq x\leq 15\}{\texttt {if}}\ x<15\ {\texttt {then}}\ x:=x+1\ {\texttt {else}}\ x:=0\ {\texttt {endif}}\{0\leq x\leq 15\}}

يتطلب الأمر تطبيق القاعدة الشرطية، والتي بدورها تتطلب إثبات

{0x15x<15}x:=x+1{0x15}{\displaystyle \{0\leq x\leq 15\wedge x<15\}x:=x+1\{0\leq x\leq 15\}}أو  بشكل مبسط
{0x<15}x:=x+1{0x15}{\displaystyle \{0\leq x<15\}x:=x+1\{0\leq x\leq 15\}}

بالنسبة للجزء السابق ، و

{0x15x15}x:=0{0x15}{\displaystyle \{0\leq x\leq 15\wedge x\geq 15\}x:=0\{0\leq x\leq 15\}}أو  بشكل مبسط
{x=15}x:=0{0x15}{\displaystyle \{x=15\}x:=0\{0\leq x\leq 15\}}

أما بالنسبة للجزء الآخر .

ومع ذلك، تتطلب قاعدة التخصيص للجزء "ثم" اختيار P كـ0x15{\displaystyle 0\leq x\leq 15}وبالتالي فإن تطبيق القاعدة ينتج

{0x+115}x:=x+1{0x15}{\displaystyle \{0\leq x+1\leq 15\}x:=x+1\{0\leq x\leq 15\}}وهو  ما يعادل منطقياً ما يلي:
{-1x<15}x:=x+1{0x15}{\displaystyle \{-1\leq x<15\}x:=x+1\{0\leq x\leq 15\}}.

قاعدة العواقب ضرورية لتعزيز الشرط المسبق{-1x<15}{\displaystyle \{-1\leq x<15\}}تم الحصول عليها من قاعدة التخصيص إلى{0x<15}{\displaystyle \{0\leq x<15\}}مطلوب للقاعدة الشرطية.

وبالمثل، بالنسبة لجزء else ، فإن قاعدة التخصيص تُعطي

{0015}x:=0{0x15}{\displaystyle \{0\leq 0\leq 15\}x:=0\{0\leq x\leq 15\}}أو  ما يعادل ذلك
{حقيقي}x:=0{0x15}{\displaystyle \{{\texttt {true}}\}x:=0\{0\leq x\leq 15\}}،

وبالتالي، يجب تطبيق قاعدة العواقب معP1{\displaystyle P_{1}}وP2{\displaystyle P_{2}}كون{x=15}{\displaystyle \{x=15\}}و{حقيقي}{\displaystyle \{{\texttt {true}}\}}وبالتالي، لتعزيز الشرط المسبق مرة أخرى. وبشكل غير رسمي، فإن تأثير قاعدة النتيجة هو "نسيان" ذلك{x=15}{\displaystyle \{x=15\}}يتم معرفة ذلك عند إدخال جزء else ، لأن قاعدة التعيين المستخدمة لجزء else لا تحتاج إلى تلك المعلومات.

بينما القاعدة

{Pب}S{P}{P}بينما ب يفعل S منتهي{¬بP}{\displaystyle {\dfrac {\{P\wedge B\}S\{P\}}{\{P\}{\texttt {while}}\ B\ {\texttt {do}}\ S\ {\texttt {done}}\{\neg B\wedge P\}}}}

هنا، P هو ثابت الحلقة ، والذي يجب أن يحافظ عليه جسم الحلقة S. بعد انتهاء الحلقة، يظل هذا الثابت P قائمًا، وعلاوة على ذلك¬ب{\displaystyle \neg B}لا بد أن يكون هذا قد تسبب في إنهاء الحلقة. وكما هو الحال في القاعدة الشرطية، يجب ألا يكون لـ B آثار جانبية.

على سبيل المثال، برهان على

{x10}بينما x<10 يفعل x:=x+1 منتهي{¬x<10x10}{\displaystyle \{x\leq 10\}{\texttt {while}}\ x<10\ {\texttt {do}}\ x:=x+1\ {\texttt {done}}\{\neg x<10\wedge x\leq 10\}}

يتطلب تطبيق قاعدة "بينما" إثبات

{x10x<10}x:=x+1{x10}{\displaystyle \{x\leq 10\wedge x<10\}x:=x+1\{x\leq 10\}}أو  بشكل مبسط
{x<10}x:=x+1{x10}{\displaystyle \{x<10\}x:=x+1\{x\leq 10\}}،

والذي يمكن الحصول عليه بسهولة من خلال قاعدة التخصيص. وأخيرًا، الشرط اللاحق{¬x<10x10}{\displaystyle \{\neg x<10\wedge x\leq 10\}}يمكن تبسيطها إلى{x=10}{\displaystyle \{x=10\}}.

كمثال آخر، يمكن استخدام قاعدة while للتحقق رسميًا من البرنامج الغريب التالي لحساب الجذر التربيعي الدقيق x لعدد عشوائي a —حتى لو كان x متغيرًا صحيحًا و a ليس عددًا مربعًا:

{حقيقي}بينما xxأ يفعل يتخطى منتهي{xx=أحقيقي}{\displaystyle \{{\texttt {true}}\}{\texttt {while}}\ x\cdot x\neq a\ {\texttt {do}}\ {\texttt {skip}}\ {\texttt {done}}\{x\cdot x=a\wedge {\texttt {true}}\}}

بعد تطبيق قاعدة while مع كون P صحيحًا ، يبقى إثبات

{حقيقيxxأ}يتخطى{حقيقي}{\displaystyle \{{\texttt {true}}\wedge x\cdot x\neq a\}{\texttt {skip}}\{{\texttt {true}}\}}،

وهذا ما يترتب على قاعدة التخطي وقاعدة العواقب.

في الواقع، البرنامج الغريب صحيح جزئيًا : إذا توقف، فمن المؤكد أن قيمة x قد احتوت (مصادفةً) على قيمة الجذر التربيعي لـ a . في جميع الحالات الأخرى، لن يتوقف؛ لذلك، فهو ليس صحيحًا تمامًا .

بينما القاعدة لتحقيق الصحة الكاملة

إذا استُبدلت قاعدة حلقة while العادية المذكورة أعلاه بالقاعدة التالية، يُمكن استخدام حساب هوار لإثبات صحة البرنامج بشكل كامل ، أي صحة الإنهاء، وكذلك صحته الجزئية. ويُستخدم عادةً الأقواس المربعة هنا بدلاً من الأقواس المعقوفة للدلالة على المفهوم المختلف لصحة البرنامج.

< يُعد هذا ترتيبًا سليمًا على المجموعة د،[Pبتدت=z]S[Pتدت<z][Pتد]بينما ب يفعل S منتهي[¬بPتد]{\displaystyle {\dfrac {<\ {\text{is a well-founded ordering on the set}}\ D\quad ,\quad [P\wedge B\wedge t\in D\wedge t=z]S[P\wedge t\in D\wedge t<z]}{[P\wedge t\in D]{\texttt {while}}\ B\ {\texttt {do}}\ S\ {\texttt {done}}[\neg B\wedge P\wedge t\in D]}}}

في هذه القاعدة، بالإضافة إلى الحفاظ على ثبات الحلقة، يتم إثبات الإنهاء أيضًا عن طريق تعبير t ، يُسمى متغير الحلقة ، والذي تتناقص قيمته بشكل صارم بالنسبة لعلاقة مؤسسة جيدًا < على مجموعة مجال D خلال كل تكرار. بما أن < مؤسسة جيدًا، فإن سلسلة متناقصة تمامًا من عناصر D لا يمكن أن يكون لها إلا طول محدود، لذا لا يمكن أن يستمر t في التناقص إلى الأبد. (على سبيل المثال، الترتيب المعتاد < مؤسس جيدًا على الأعداد الصحيحة الموجبة).شمال{\displaystyle \mathbb {N} }لكن ليس على الأعداد الصحيحةZ{\displaystyle \mathbb {Z} }ولا على الأعداد الحقيقية الموجبةR+{\displaystyle \mathbb {R} ^{+}}; جميع هذه المجموعات تعني بالمعنى الرياضي، وليس بالمعنى الحسابي، وهي جميعها لانهائية على وجه الخصوص.)

بالنظر إلى ثابت الحلقة P ، يجب أن يستلزم الشرط B أن t ليس عنصرًا أدنى في D ، وإلا فلن يتمكن الجسم S من تقليل t أكثر، أي أن فرضية القاعدة ستكون خاطئة. (هذه إحدى طرق التعبير عن الصحة الكاملة.) [ ملاحظة 3 ]

بالعودة إلى المثال الأول من القسم السابق ، للحصول على برهان صحة تامة لـ

[x10]بينما x<10 يفعل x:=x+1 منتهي[¬x<10x10]{\displaystyle [x\leq 10]{\texttt {while}}\ x<10\ {\texttt {do}}\ x:=x+1\ {\texttt {done}}[\neg x<10\wedge x\leq 10]}

يمكن تطبيق قاعدة "while" لضمان الصحة الكاملة، على سبيل المثال، حيث D هي الأعداد الصحيحة غير السالبة بالترتيب المعتاد، والتعبير t هو 10-x{\displaystyle 10-x}وهذا بدوره يتطلب إثبات

[x10x<1010-x010-x=z]x:=x+1[x1010-x010-x<z]{\displaystyle [x\leq 10\wedge x<10\wedge 10-x\geq 0\wedge 10-x=z]x:=x+1[x\leq 10\wedge 10-x\geq 0\wedge 10-x<z]}

بصورة غير رسمية، علينا أن نثبت أن المسافة10-x{\displaystyle 10-x}يتناقص في كل دورة تكرار، بينما يظل دائمًا غير سالب؛ لا يمكن أن تستمر هذه العملية إلا لعدد محدود من الدورات.

يمكن تبسيط هدف البرهان السابق إلى

[x<1010-x=z]x:=x+1[x1010-x<z]{\displaystyle [x<10\wedge 10-x=z]x:=x+1[x\leq 10\wedge 10-x<z]}،

ويمكن إثبات ذلك على النحو التالي:

[x+11010-x-1<z]x:=x+1[x1010-x<z]{\displaystyle [x+1\leq 10\wedge 10-x-1<z]x:=x+1[x\leq 10\wedge 10-x<z]}يتم الحصول عليها من خلال قاعدة التخصيص، و
[x+11010-x-1<z]{\displaystyle [x+1\leq 10\wedge 10-x-1<z]}يمكن تعزيزها إلى[x<1010-x=z]{\displaystyle [x<10\wedge 10-x=z]}بحسب قاعدة العواقب.

بالنسبة للمثال الثاني من القسم السابق ، بالطبع، لا يمكن العثور على تعبير t يتم إنقاصه بواسطة جسم الحلقة الفارغ، وبالتالي لا يمكن إثبات الإنهاء.

انظر أيضاً

ملحوظات

  1. كتب هوار في الأصل "P{ج}سؤال{\displaystyle P\{C\}Q}"أفضل من"{P}ج{سؤال}{\displaystyle \{P\}C\{Q\}}".
  2. تستخدم هذه المقالة أسلوب الاستدلال الطبيعي في تدوين القواعد. على سبيل المثال،α،βϕ{\displaystyle {\dfrac {\alpha ,\beta }{\phi }}}يعني هذا بشكل غير رسمي "إذا تحققت كل من α و β ، فإن φ تتحقق أيضًا"؛ تُسمى α و β مقدمات القاعدة، وتُسمى φ لاحقتها. تُسمى القاعدة التي لا مقدمات لها بديهية، وتُكتب على النحو التالي:ϕ{\displaystyle {\dfrac {}{\quad \phi \quad }}}.
  3. لم تُقدّم ورقة هوار لعام 1969 قاعدةً للصحّة المطلقة؛ انظر مناقشته في الصفحة 579 (أعلى اليسار). على سبيل المثال، يُقدّم كتاب رينولدز [ 6 ] الصيغة التالية لقاعدة الصحّة المطلقة:Pب0ت،[Pبت=z]S[Pت<z][P]بينما ب يفعل S منتهي[P¬ب]{\displaystyle {\dfrac {P\wedge B\rightarrow 0\leq t\quad ,\quad [P\wedge B\wedge t=z]S[P\wedge t<z]}{[P]{\texttt {while}}\ B\ {\texttt {do}}\ S\ {\texttt {done}}[P\wedge \neg B]}}} عندما يكون z متغيرًا صحيحًا لا يظهر بشكل حر في P أو B أو S أو t ، ويكون t تعبيرًا صحيحًا (تمت إعادة تسمية متغيرات رينولدز لتتناسب مع إعدادات هذه المقالة).

مراجع

فهرس

  • هوث، مايكل؛ رايان، مارك (26 أغسطس 2004). المنطق في علوم الحاسوب: نمذجة الأنظمة والاستدلال عليها (  الطبعة الثانية). مطبعة جامعة كامبريدج . الصفحات:  14، 427. ISBN 978-0521543101.
  • KeY-Hoare هو نظام تحقق شبه آلي مبني على برنامج إثبات النظريات KeY . وهو يتميز بحساب Hoare للغة while بسيطة.
  • وحدة حساب التفاضل والتكامل لـ j-Algo ( j-Algo على GitHub ، j-Algo على SourceForge ) - تصور لحساب التفاضل والتكامل لـ Hoare في برنامج تصور الخوارزميات j-Algo.