我目前正在研究通过 C 程序将“路径”转换为相应的 SMT 查询的代码,以测试该路径的可行性。我有创建 SMT-LIB v1.2 查询的工作代码,并使用 Z3 2.11 和 QF_AUFBV 逻辑来解决查询。我目前正在将此代码移植到 Z3 4.3,以利用从那时起可能发生的任何速度进步,特别是因为我以前的代码似乎需要很长时间(大约 22 分钟)处理仅分配 24 个值的查询一个三维数组并检查数组中某个位置的值。
但是,似乎 QF_AUFBV 逻辑(从 SMT-LIB v2.0 标准开始)不再支持多维数组,或者更确切地说,其值也是数组的数组(可能更深)。一旦我从查询中取出“(set-logic QF_AUFBV)”行,Z3 4.3 就能够处理查询,但仍然需要很长时间。
我想知道是否有人知道为什么在 SMT-LIB v2.0 标准中停止支持多维数组,以及我可以使用哪些替代逻辑。当我取出指定 QF_AUFBV 理论的那条线时,我还想知道 Z3 到底在使用什么逻辑。
谢谢!