Kāda ir atšķirība starp kopējo un daļējo pareizību?


Atbilde 1:

Kopējā pareizības specifikācija ir arī daļēja pareizības specifikācija. Daļēja pareizība ir vājāka, jo tai nepieciešama papildu palīdzība “S beidz”, lai nonāktu pie secinājuma: R tur galīgajā stāvoklī.

Daļējas pareizības specifikācijai {Q} S {R} var iegūt šādu informāciju: Ņemot vērā sākuma stāvokli, kas atbilst Q, S var izbeigties vai ne. Ja S izbeidzas, pēc S izpildes jūs sasniegsit gala stāvokli, kas atbilst R. Ja nē, tad R ir bezjēdzīgs, jo gala stāvokļa nav.

Piemēram:

{x == 10}
kamēr (y! = 0):
    y = y - 1
x = 0
{x == 0}

Tā ir daļēja pareizības specifikācija. Ja y tiek inicializēts ar skaitli, kas vienāds vai lielāks par 0, S izbeidzas un pēc tam x ir 0. Lai gan, ja y sākas ar negatīvu skaitli, S tiks cilpa uz visiem laikiem, un, tā kā tas nebeidzas, jūs nesasniegsit stāvokli ' pēc S izpildes ”.

Patiešām, R var būt jebkas, ja S ir mirusi cilpa. Piemēram, jebkuram Q un R:

{Q}
kamēr (taisnība):
    y = y - 1
{R}

vienmēr ir daļēja pareizības specifikācija.

Ja Q nav pietiekami spēcīgs, jūs nevarat garantēt S izbeigšanu, nemaz nerunājot par iemeslu valstij pēc S izpildes. Šajā gadījumā jūs varat manuāli pievienot nosacījumu: S beidzas. Ar Q un to spriešana var turpināties.

Lai iegūtu pilnīgu pareizības specifikāciju {Q} S {R}, Q ir pietiekami stiprs, lai garantētu S izbeigšanos, tāpēc jūs varat secināt, ka S izbeigsies un gala stāvoklis atbilst R.

Piemēram:

{x == 10}
kamēr (x! = 0):
    x = x - 1
{x == 0}

ir pilnīgas pareizības specifikācija.

BTW: Es neesmu pārliecināts, vai atbilde ir pareiza, jo jautājums ir apzīmēts ar politisko pareizību. Kaut arī jautājumā sniegtā definīcija izskatās tieši tāda pati kā datorzinātnēs.