我试图了解如何在ltl公式中正确使用Until运算符。我发现this定义(下面)很清楚:
û NTIL
U B:如果存在i,则为true:
B在[s i ,s i + 1 ,s i + 2 中为真,...... ]
对于所有j,使得0≤j<1。 i,公式A在[s j ,s j + 1 ,s j + 2 中为真, ......]
含义:
B在时间我是
对于介于0和i-1之间的时间,公式A为真
仍在使用“在时间我真实”的形式化
示例代码包含示例ltl formula:
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
答案 0 :(得分:1)
STRONG UNTIL
正式定义是:
M,s k ⊨φUψ
&LT; - &GT;
∃j∈N。
(j≥k)∧
∀i∈N。 ((k≤i&lt; j)⇒(&lt; s i ,s i + 1 &gt;∈R t ))∧< / p>
(M,s j ⊨ψ)∧
- 醇>
∀i∈N。 ((k≤i
i ⊨φ)) ,其中
M是Kripke Structure
R t 是过渡关系
说明:
条件(1) - (2)强制执行状态序列(s k ,s k + 1 ,. ..,s j ,...)是转换系统的有效执行路径,可以在其上评估 ltl 公式。
条件(3)强制ψ
保留在s j 。
条件(4)强制ϕ
保持任何状态s i 位于路径上s k (包括)直到s j (不包括)。
由于false
前提的含义始终为true
,因此条件(4)中的逻辑含义非常符合 适用于i
范围之外的任何[k, j)
。每当选择j
等于k
时,就像在您的问题中一样,范围[k, j) = [k, k)
为空,并且i
的任何选择都位于所述间隔之外。在这种情况下,无论M, s ⊨ ϕ
为某些s
保留(或不是)这一事实,条件(4)对于任何选择都非常满意i
并且它不再对执行路径施加任何约束(s k ,s k + 1 ,...,s j < / sub>,...)。换句话说,当j = k
条件(4)不再对状态s k 上的属性ϕ U ψ
的验证提供任何有意义的贡献时。
WEAK UNTIL
弱到之间的区别,特此用ϕ W ψ
表示,而强到之间的区别是弱到也满足任何执行路径G (ϕ ∧ ¬ψ)
,而强,直到强制F ψ
。
示例分析
属性 p0
[] ((state == Reverse) U (state != Reverse))
需要 p1
((state == Reverse) U (state != Reverse))
保持系统的每个状态。为清晰起见,我将在两个组件中分解 p1 ,并将φ定义为等于state == Reverse
且ψ等于{{ 1}}(注意:state != Reverse
)。
为简化起见,我们假设您的系统由以下三种状态组成:
为了保持 p0 , p1 必须适用于这些状态。
ϕ <-> !ψ
等于 0 j
。但是,我们认为φ在 s_1 中保持,而ψ在 s_2 中保留,这是它的直接,并且仅接班人。因此 s_1 属性 p1 。false
,因此 p1 再次得到满足。