我想使用 z3py 找到给定动作和后置条件的最弱前置条件。
给定动作N = N + 1
和后置条件N == 5
,最弱的前置条件是 N == 4。
使用战术solve-eqs
这种方法适用于某些后置条件,但不适用于其他条件。使用后置条件时,N < 5
我得到[[Not(4 <= N)]]
.
但是当我用N == 5
的[[]]
时候,我想要的时候N == 4
。
N2 = Int('N2') # N after the action
N = Int('N') # N before the action
weakestPreconditionGoal = Goal()
# 'N2 == n + 1' action
# 'N2 == 5' post condition.
weakestPreconditionGoal.add(N2 == N + 1, N2 == 5)
t = Tactic('solve-eqs')
wp = t(weakestPreconditionGoal)
print(wp)
这是找到最弱前提条件的最佳方法吗?
我尝试了几种方法,但对 Z3 很陌生,无法弄清楚要采取什么方法或如何实现它。