我想知道是否有可能在程序中驗證LTL屬性,該公共約束聲明多個語句必須無限次地執行。SPIN:無限次地訪問語句
例如爲:
bool no_flip;
bool flag;
active[1] proctype node()
{
do
:: skip -> progress00: no_flip = 1
:: skip -> progress01: flag = 1
:: !no_flip -> flag = 0
od;
}
// eventually we have flag==1 forever
ltl p0 { <> ([] (flag == 1)) }
這個程序是正確的當且僅當最終no_flip
標誌變爲真和flag
爲真。
但是,運行'pan -a'和'pan -a -f'(弱公平性)會產生一條通過no_flip=1
聲明和接受狀態(來自LTL公式)的循環。
我認爲進度標籤會強制執行通過他們的執行無限次,但似乎並非如此。 那麼,是否有可能增加這種公平性約束?
感謝, 努諾
感謝您的回答。不幸的是,我不明白你的意思。我認爲我無法直接將LTL公式寫入從未聲稱。你能否展示如何用公平約束來擴展上面的例子? 謝謝! –
我更新了我的答案。運行您的示例仍然會導致違規行爲 - 我在'note' – GoZoner
中解釋了這一點,謝謝!那麼,是否有任何常規的技巧來解決這個問題?我假設可能會重寫程序以使其「工作」(即以某種方式限制公平調度)。 –