Z3中的地图数据结构

时间:2018-09-13 11:50:59

标签: z3

我需要证明有关地图数据结构的一些属性(例如空度,域,更新等)。 Z3中是否支持地图?

我找到了一个建议:https://www.kroening.com/smt-lib-lsm.pdf 及其相关的SMT理论http://www.philipp.ruemmer.org/smt-lsm/SMT-LIB.tar.gz。该建议将地图视为具有相应公理的数组。但是,我无法在定理证明者中找到现成的实现。

如果我想在Z3中支持地图,有何建议?

我最好的选择是我需要在Z3中添加一个新理论,该理论假定您对Z3的实现有很好的了解-对此我的情况不成立。

2 个答案:

答案 0 :(得分:1)

Z3没有地图的本机支持。最好的选择是暂时使用记录数组(代数数据类型)来模拟它们。

向SMT求解器添加理论是一项艰巨的任务。我建议先探索数组和记录,然后再沿着那条路走。

答案 1 :(得分:0)

或者,看看达夫尼的地图公理:

https://github.com/Microsoft/dafny/blob/master/Binaries/DafnyPrelude.bpl#L1113

Dafny被广泛使用(用于正式方法工具;-),因此其公理化已经相当成熟。

地图公理以Boogie语言表示,但通常将Boogie公理化直接转换为SMT-LIB。