我想了解如何在ltl公式中正确使用Until运算符。我发现this定义(见下文)是明确的:在SPIN公式中使用(U)ntil运算符公式
ù NTIL
甲û B:如果存在真实我使得:
中的B是真[s i,s i + 1,s i + 2,... ]
对于所有的j,使得0≤Ĵ< I,式A是真[秒Ĵ,S J + 1,S J + 2, ...]
含义:
B是在时间真我
为0和i-1之间的时间中,式A为真
仍在使用的形式化 “真实在时间i”
示例代码与示例LTL式:
mtype = {Regular, Reverse, Quit}
mtype state = Regular;
init {
do ::
if
::state == Regular -> state = Reverse
::state == Reverse -> state = Quit
::state == Quit -> break
fi
od
}
ltl p0 { [] ((state == Reverse) U (state != Reverse))}
根据我给出的until操作符的定义,我不明白上面的ltl公式如何不会产生任何错误。 state == Reverse
需要一直保持到state != Reverse
?最初为state == Regular
。
下面是运行测试后的SPIN输出:
(Spin Version 6.4.6 -- 2 December 2016)
+ Partial Order Reduction
Full statespace search for:
never claim + (p0)
assertion violations + (if within scope of claim)
acceptance cycles + (fairness disabled)
invalid end states - (disabled by never claim)
State-vector 28 byte, depth reached 13, errors: 0
9 states, stored (11 visited)
2 states, matched
13 transitions (= visited+matched)
0 atomic steps
hash conflicts: 0 (resolved)
Stats on memory usage (in Megabytes):
0.000 equivalent memory usage for states (stored*(State-vector + overhead))
0.288 actual memory usage for states
128.000 memory used for hash table (-w24)
0.534 memory used for DFS stack (-m10000)
128.730 total actual memory usage
unreached in init
(0 of 12 states)
unreached in claim p0
_spin_nvr.tmp:14, state 20, "-end-"
(1 of 20 states)
pan: elapsed time 0 seconds
谢谢!你可以给你链接找到那个定义吗? “R_t()”和“M”究竟是什么?那么对于所有的i
cmoses
我觉得我的主要困惑是,我只能找到直到操作符的定义,直到没有强。例如,[this](http://www.cse.chalmers.se/edu/year/2009/course/TDA956/TH/l05.html?18)链接的定义并不是直到定义,因为它要求p对于所有时间步骤都是正确的,直到q变成真,对吧? – cmoses