我想知道是否可以在具有公平约束的程序中验证 LTL 属性,该公平约束表明必须经常无限执行多个语句。
例如:
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 公式)之间产生一个循环。
我认为进度标签会强制执行无限频繁地通过它们,但情况似乎并非如此。那么,是否可以添加这种公平约束?
谢谢,努诺