我試圖解決與農民,狼,山羊和捲心菜有關的任務。SPIN:解釋錯誤跟蹤
所以,我發現瞭如下因素PROMELA描述:
#define fin (all_right_side == true)
#define wg (g_and_w == false)
#define gc (g_and_c == false)
ltl ltl_0 { <> fin && [] (wg && gc) }
bool all_right_side, g_and_w, g_and_c;
active proctype river()
{
bit f = 0,
w = 0,
g = 0,
c = 0;
all_right_side = false;
g_and_w = false;
g_and_c = false;
printf("MSC: f %c w %c g %c c %c \n", f, w, g, c);
do
:: (f==1) && (f == w) && (f ==g) && (f == c) ->
all_right_side = true;
break;
:: else ->
if
:: (f == w) ->
f = 1 - f;
w = 1 - w;
:: (f == c) ->
f = 1 - f;
w = 1 - c;
:: (f == g) ->
f = 1 - f;
w = 1 - g;
:: (true) ->
f = 1 - f;
fi;
printf("M f %c w %c g %c c %c \n", f, w, g, c);
if
:: (f != g && g == c) ->
g_and_c = true;
:: (f != g && g == w) ->
g_and_w = true;
::else ->
skip
fi
od;
printf ("MSC: OK!\n")
}
我添加有一個LTL-式:LTL ltl_0 {<>鰭& & [](WG & & GC)} 驗證,狼不會吃山羊,山羊不會吃白菜。我想要舉一個例子,農民如何運輸他所有的需求(w-g-c)而不損失。
當運行驗證時,得到以下結果: 狀態矢量20字節,深度達到59,錯誤:1 64個狀態,存儲 23個州,匹配 87轉變(=存儲+匹配) 0原子步驟 散列衝突:0(已解決)
這意味着該程序爲我生成了一個示例。但我無法解釋它。 * .pml.trial文件的內容是:enter image description here
請幫我解釋。