D.h. das ganze ist gleichbedeutend mit p_f({i}_assert) (ok, sieht etwas kryptisch aus…). Soweit klar (wenn richtig).
stimmt
{c}_comm wird ja entweder zu einem <top> (terminiert ?) oder einem <bottom> (terminiert nicht) ausgewertet.
{c}_comm kann man für sich schon mal gar nicht auswerten,
{c}_comm ist nichts anderes als eine Funktion SIGMA nach SIGMA_bottom
{c}_comm auf einen Zustand angewendet liefert also einen Folgezustand oder bottom (Nichttermination)
darauf wirkt dann die nächste Funktion {q}_assert,
die von SIGMA auf {true,false} abbildet,
(mit der Trickkiste doppelbottom: bottom wird auf bottom abgebildet)
und dann kommt die Funktion pf,
die von {true,false} auf {top, bottom} abbildet,
1) {c}_comm = <bottom>
Dann wird dann durch f_doppenbottom der ganze Formelteil zu bottom.
{c}_comm ist eine Funktion, bottom ein Zustand, das geht nicht,
es kann aber der Fall {c}_comm (sigma)= <bottom> auftreten, dass meinst du sicher,
2) {c}_comm = <top>
Dann wird mit der Ausführung von (p_f o {i}_assert) fortgefahren. {i}_assert ergibt einen Wert aus {true, false}, welcher dann von p_f auf {<top>,<bottom>} abgebildet wird.
{c}_comm (sigma)= sigma2 != <bottom>
dann wird die Nachbedingung geprüft (wieso schreibst du i und nicht q?) und es kommt am Ende top oder bottom raus
Für die Formel
(p_f o {i}_assert)_doppelbottom o {c}_comm =< p_f o {i and b}_assert
würde das heißen:
1) {c_comm} terminiert nicht
-> die like Seite wird <bottom>, damit ist die Gesamtgleichung erfüllt.
bis auf die Sprechweise '{c}_comm(sigma) terminiert nicht' richtig
2) {c_comm} terminiert
-> (p_f o {i}_assert) wird ausgewertet
-> wenn {i}_assert == true, dann p_f == <bottom>
d.h. die Gesamtgleichung müßte dann immer true ergeben. Das
würde, wie in einem der vorigen Beiträge, der Bedeutung von
partieller Korrektheit entsprechen.
wenn der linke Teil der Formel bottom ist dann ist alles ok, ja
-> wenn {i}_assert == false, dann p_f == <top>
d.h. um die Gesamtformel true werden zu lassen muss auch der
rechte Teil true werden.
->Der rechte Teil wird nur true, wenn die Auswertung von
{i and b}_assert zu false ausgewertet wird. Was insofern Sinn
ergibt, da die Invariante dann auf beiden Seite der
false ergibt.
Aber richtig einleuchtend ist das noch nicht.
das entspricht genau der Ursprungsdefintion 2.1,
entweder terminiert c nicht ODER die Nachbedingung ist erfüllt ODER die Vorbedingung ist falsch,
dass sind die 3 Fälle in denen partielle Korrektheit gilt,
die Formel drückt genau das aus, nur eben umständlich dafür sehr kurz formuliert