Ich möchte (∀i(0≤i<k→a[i]>0)∧a[k]>0)→∀i(0≤i≤k→a[i]>0)
von z3 beweisen. Die Negation davon ist: ∀i(0≤i<k→a[i]>0)∧a[k]>0∧∃i(0≤i≤k∧¬(a[i]>0))
. Zuerst habe ich den Wert von k bis 5 und ignorieren den Teil a[k]>0
und versuchen:Z3: Modellierung mit Quantifizierern
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()
Die Ausgabe lautet:
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]]
Ich weiß nicht, die Bedeutung des Ausgangs und ich denke, Sein Modell sollte i = 5
sein. Dann füge ich in a[5] > 0
hinzu, und ich denke, dass es unzufrieden sein sollte. Der Code lautet wie folgt:
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()
Und der Ausgang ist:
unsat
Also, wie kann ich (∀i(0≤i<k→a[i]>0)∧a[k]>0)→∀i(0≤i≤k→a[i]>0)
von z3py beweisen, und was ist der Sinn der Ausgabe?