Model perfect¶
Cited in: [AliasDFG10].
Tag: complexity.
Figure¶
Source code¶
model main {
var x, y1, y2, y3;
states start, lbl_11_1, lbl_8_2, lbl_16, stop;
transition t_47 := {
from := start;
to := lbl_11_1;
guard := 2 <= x;
action := y1' = x - 1, y2' = 1, y3' = x;
};
transition t_33 := {
from := start;
to := stop;
guard := x <= 1;
action := ;
};
transition t_43 := {
from := lbl_11_1;
to := lbl_8_2;
guard := 1 <= y1 && 0 = y2;
action := y1' = y1 - 1, y2' = x, y3' = y3 - y1;
};
transition t_42 := {
from := lbl_11_1;
to := lbl_8_2;
guard := y2 + 1 <= y1 && y2 + 1 <= 0 || y2 + 1 <= y1 && 1 <= y2;
action := y1' = y1 - 1, y2' = x;
};
transition t_41 := {
from := lbl_11_1;
to := lbl_11_1;
guard := y1 <= y2;
action := y2' = y2 - y1;
};
transition t_44 := {
from := lbl_8_2;
to := lbl_11_1;
guard := y1 <= y2 && 1 <= y1;
action := y2' = y2 - y1;
};
transition t_37 := {
from := lbl_8_2;
to := lbl_16;
guard := y1 <= 0;
action := ;
};
transition t_46 := {
from := lbl_8_2;
to := lbl_8_2;
guard := 1 <= y1 && 0 = y2;
action := y1' = y1 - 1, y2' = x, y3' = y3 - y1;
};
transition t_45 := {
from := lbl_8_2;
to := lbl_8_2;
guard := y2 + 1 <= y1 && 1 <= y2 || 1 <= y1 && y2 + 1 <= 0;
action := y1' = y1 - 1, y2' = x;
};
transition t := {
from := lbl_16;
to := stop;
guard := true;
action := ;
};
}
strategy main_s {
Region init := {state = start};
}
Expected invariant¶
{ lbl_16[v1, 0, v1, v4] : v4 <= -1 + v1 and v1 >= 2; lbl_11_1[v1, v2, v3, v4] : v3 >= 0 and v2 >= 1 and v3 <= v1 - v2 and v2 <= -1 + v1 and v4 <= v1; lbl_8_2[v1, v2, v1, v4] : v4 <= v1 and v4 <= -1 + v1 + v2 and v2 >= 0 and v2 <= -2 + v1 }
Results¶
- With Aspic: { start[x, y1, y2, y3]; lbl_8_2[x, y1, x, y3] : y1 >= 0 and y1 <= -2 + x and y3 <= x and y3 <= -1 + x + y1; lbl_11_1[x, y1, y2, y3] : y2 >= 0 and y1 >= 1 and y2 <= x - y1 and y1 <= -1 + x and y3 <= x; lbl_16[x, 0, x, y3] : y3 <= -1 + x and x >= 2; stop[x, y1, y2, y3] } (0.04s), OK.
- With ISL: { stop[x__1, y1__1, y2__1, y3__1] : x__1 <= 1; stop[x__1, 0, x__1, y3__1] : x__1 >= 3 and y3__1 <= -9 + 3x__1 and y3__1 <= -1 + x__1; stop[x__1, 0, x__1, -1 + x__1] : x__1 >= 3; stop[2, 0, 2, 1]; lbl_16[x__1, 0, x__1, y3__1] : x__1 >= 3 and y3__1 <= -9 + 3x__1 and y3__1 <= -1 + x__1; lbl_16[x__1, 0, x__1, -1 + x__1] : x__1 >= 3; lbl_16[2, 0, 2, 1]; lbl_11_1[x__1, y1__1, y2__1, y3__1] : (x__1 >= 3 and y2__1 >= 1 and y2__1 <= -2 + x__1 - y1__1 and y3__1 <= y1__1) or (x__1 >= 3 and y1__1 <= -2 + x__1 and y3__1 <= -6 + 3x__1 - 2y1__1 and y3__1 <= x__1 and y2__1 >= 0) or (x__1 >= 3 and y1__1 <= -2 + x__1 and y2__1 >= 1 and y3__1 <= 2 - x__1 + 2y1__1) or (x__1 >= 3 and y2__1 <= -3 + x__1 - y1__1 and y3__1 <= x__1 and y1__1 <= -3 + x__1 and y2__1 >= 0); lbl_11_1[x__1, y1__1, y2__1, x__1] : x__1 >= 3 and y1__1 <= -1 + x__1 and y2__1 >= 0; lbl_11_1[2, y1__1, y2__1, 2] : y2__1 >= 0 and y1__1 <= 1; lbl_11_1[x__1, -1 + x__1, 1, x__1] : x__1 >= 2; lbl_11_1[2, y1__1, y2__1, y3__1] : (y2__1 <= -y1__1 and y3__1 <= y1__1 and y2__1 >= 1) or (y3__1 <= -2y1__1 and y1__1 <= 0 and y2__1 >= 0 and y3__1 <= 2) or (y3__1 <= 2y1__1 and y1__1 <= 0 and y2__1 >= 1) or (y3__1 <= 2 and y2__1 <= -1 - y1__1 and y2__1 >= 0 and y1__1 <= -1); start[x, y1, y2, y3]; lbl_8_2[x__1, y1__1, x__1, y3__1] : x__1 >= 3 and y1__1 <= -3 + x__1 and y3__1 <= -1 + x__1 + y1__1 and y3__1 <= x__1 and y1__1 >= 0 and y3__1 <= -8 + 3x__1 - 2y1__1 and y3__1 <= -9 + 3x__1 - y1__1; lbl_8_2[x__1, y1__1, x__1, x__1] : x__1 >= 3 and y1__1 >= 1 and y1__1 <= -2 + x__1; lbl_8_2[x__1, y1__1, x__1, -1 + x__1 - y1__1] : x__1 >= 3 and y1__1 <= -2 + x__1 and y1__1 >= 0; lbl_8_2[x__1, -2 + x__1, x__1, x__1] : x__1 >= 3; lbl_8_2[2, 0, 2, 1] } (3.86s), failed.