我使用Frama-C,Alt-Ergo和Why3进行系统验证。 Frama-C生成并发送给Why3的一个证明义务如下所示(这是Why3版本):
(p_StableRemove t_1[a_5 <- x] a_1 x_1 a i_2)
我想知道t_1[a_5 <- x]
的含义。
在访问x
之前,它是a_5
到t_1[a_5 <- x]
的分配吗?
答案 0 :(得分:2)
[ <- ]
是Why3中数组修改的表示法。但是,与命令式语言不同,t[i <- v]
是t
的功能更新,即将i
映射到v
的(新)数组,和t
中所有其他有效索引的值t
。 t
本身未经修改,您通过复制t
的大部分内容来创建新数组。
这些是Why3 standard library on arrays
的相关部分function set (a: array ~'a) (i: int) (v: 'a) : array 'a =
{ a with elts = M.set a.elts i v }
function ([<-]) (a: array 'a) (i: int) (v: 'a) : array 'a = set a i v