TLA +定理证明:从更新的函数推断基数关系

时间:2019-05-30 23:11:58

标签: formal-verification tla+ tlaps

在TLA +中,通常使用诸如编程语言数组之类的功能。

我的规范更新了一个功能范围值,用TLA表示为:

f' = [f EXCEPT ![x]=e]    

在证明安全特性的情况下,我想推断旧函数f与新函数f'之间的基数关系。

要给出具体的方案,请考虑以下内容:

S == {1,2,3}
f == [x \in S |-> FALSE]
g == [f EXCEPT ![2]=TRUE]

THEOREM t1 ==    
  Cardinality({x \in S : g[x]}) = Cardinality({x \in S : f[x]}) + 1
  PROOF BY DEF S, f, g, Cardinality

问题是gf的功能完全相同,只是x=2除外。 现在Cardinality({x \in S : g[x]})应该大一个单位。但这无法证明。

我可以添加一些前提,以使后端证明更容易:

THEOREM t1 ==    
 /\ f[2]=FALSE /\ g[2]=TRUE 
 /\ \A k \in S\{2} : f[k]=g[k] /\ g[k]=FALSE
 => Cardinality({x \in S : g[x]}) = Cardinality({x \in S : f[x]}) + 1
 PROOF BY DEF S, f, g, Cardinality

但仍然无法证明。证明者要注意基数的变化需要什么明确表示?

总的来说,在这种情况下,当我们使用要更新的函数并且想要断言更新前后的关系时,如何进行处理的一般规则或技巧是什么?

0 个答案:

没有答案