我想通過z3來證明(∀i(0≤i<k→a[i]>0)∧a[k]>0)→∀i(0≤i≤k→a[i]>0)
。否定它是:∀i(0≤i<k→a[i]>0)∧a[k]>0∧∃i(0≤i≤k∧¬(a[i]>0))
。首先,我k的值設置爲5,而忽略部分a[k]>0
,並嘗試:Z3:用量詞建模
from z3 import *
i = Int('i')`
a = Array('a',IntSort(),IntSort())
solver = Solver()
solver.add(ForAll(i, Implies(And(i >= 0,i < 5),a[i] > 0)))
solver.add(Exists(i, And(i >= 0,i <= 5, Not(a[i] > 0))))
print solver.check()
print solver.model()
輸出是:
sat
[i!0 = 5,
a = [else -> k!8!10(k!9(Var(0)))],
k!8 = [else -> k!8!10(k!9(Var(0)))],
k!9 = [else -> If(Var(0) >= 4, If(Var(0) >= 5, 5, 4), 0)],
k!8!10 = [0 -> 7720, 4 -> 1, else -> -38]]
我不知道輸出的意思,我想其型號應該是i = 5
。然後,我加入a[5] > 0
,我認爲它應該是不滿意的。代碼如下:
from z3 import *
i = Int('i')
a = Array('a',IntSort(),IntSort())
solver = Solver()
solver.add(ForAll(i, Implies(And(i >= 0,i < 5),a[i] > 0)))
solver.add(Exists(i, And(i >= 0,i <= 5, Not(a[i] > 0))))
solver.add(a[5] > 0)
print solver.check()
print solver.model()
,輸出是:
unsat
那麼,怎樣才能通過我證明z3py (∀i(0≤i<k→a[i]>0)∧a[k]>0)→∀i(0≤i≤k→a[i]>0)
,什麼是輸出的含義是什麼?