農夫、オオカミ、ヤギ、キャベツに関するタスクをスピンして解決しようとします。
それで、私は次のプロメラの説明を見つけました:
#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 { <> fin && [] ( wg && gc ) } 検証するために、オオカミはヤギを食べず、ヤギはキャベツを食べません。農家がすべてのニーズ (wgc) を損失なく輸送する方法の例を取得したいと思います。
検証を実行すると、次の結果が得られます: 状態ベクトル 20 バイト、深度が 59 に到達、エラー: 1 64 状態、保存された 23 状態、一致した 87 遷移 (= 保存 + 一致) 0 アトミック ステップ ハッシュ競合: 0 (解決済み)
これは、プログラムが私の例を生成したことを意味します。しかし、私はそれを解釈することはできません。*.pml.trial ファイルの内容:ここに画像の説明を入力
解釈を手伝ってください。