#define a ([] (x%2 == 1)) /* gilt nicht immer, da x auch gerade sein kann */ #define b (<> (x == 10)) /* gilt nicht immer, da x == 10 durch x=x+2 übersprungen werden kann */ #define c (<> (x != 10)) /* gilt immer (Startwert!) */ #define d (<> ([] (x%2 == 1))) /* ab einem bestimmten Zeitpunkt ist ggf. x immer ungerade gilt aber nicht für alle Zeitpunkte. Wenn nur P1 ausgeführt wird (keine Fairness) kann es vorkommen */ #define e ([] (<> (x%2 == 1))) /* min einmal? wenn unfair dann z.b. ab 244 und dann immer P1 byte x=1; byte y=0; ltl formel1{e} active proctype P1(){ do :: x=x+2 od; } active proctype P2(){ do :: x=x+1 od; } active proctype P3(){ do :: y y=x od; } /* Formulieren Sie folgende Anforderungen möglichst präzise als LTL-Formeln. Überlegen Sie zunächst, ob diese Formeln mit oder ohne schwacher Fairness gelten. Überprüfen Sie Ihre Überlegungen mit ISPIN. a) x ist immer ungerade b) x ist irgendwann 10 c) x ist irgendwann nicht 10 d) es gibt eine Möglichkeit, dass x ab einem bestimmten Zeitpunkt immer ungerade ist e) es gibt eine Möglichkeit, dass x ab einem bestimmten Zeitpunkt immer wieder ungerade ist f) es gibt eine Möglichkeit, dass x ab einem bestimmten Zeitpunkt immer 10 ist g) es gilt immer y ist kleiner-gleich x h) auf y ungleich x folgt immer y gleich x i) auf y gleich x folgt immer y ungleich x */