2
我想使用z3py在給定動作和後期條件的情況下找到最弱的前提條件。使用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來說是新的,無法弄清楚採取什麼方法或如何實現它。
感謝您的快速響應,您的解決方案完美工作。 – bettsmatt