z3py API (4.3.0)를 사용하고 있습니다. 표현식 expr을 기본 컨텍스트에서 expr.translate(target_ctx)을 사용하여 새 컨텍스트 target_ctx으로 쉽게 변환 할 수 있습니다. 그러나 주어진 컨텍스트 ctx에서 기본 Z3 컨텍스트로 어떻게 변환 할 수 있습니까? 파이썬 API에서 기본값 Context을 얻을 수있는 방법이
방정식 펠 x*x - 193 * y*y = 1 z3py에서 을 가지고 방정식을 이해하는 데 도움이 필요 : x = BitVec('x',64)
y = BitVec('y',64)
solve(x*x - 193 * y*y == 1, x > 0, y > 0)
결과 : [y = 2744248620923429728, x = 8169167793018974721]
다음 프로그램 (89c1785b 커밋) 마스터 자식 지점에서 Z3의 최신 버전을 사용하여 인쇄 할 수없는 Z3 모델 (즉이 print solver.model() 예외를 throw) 생성 x = Int('x')
a = Array('a', IntSort(), BoolSort())
b = Array('b', IntSort(), BoolSort())
c =
g = And(ForAll([i, j, k], Implies(And(k <= 0, A * i + B * j + C * k + D <= 0), k + i - j <= 0)),Not(And(A==0,B==0,C==0)))을 만족하는 A, B, C, D의 값을 찾으려고합니다. solve(g)을 사용합니다. 여기에는 많은 가능한 해결책이 있는데, 하나는 A=1,B
Z3 모델에서 실제 파이썬 값을 얻으려면 어떻게해야합니까? 예. p = Bool('p')
x = Real('x')
s = Solver()
s.add(Or(x < 5, x > 10), Or(p, x**2 == 2), Not(p))
s.check()
print s.model()[x]
print s.model()[p]
인쇄 -1.4142135623
그것은 Z3 파이썬 인터페이스는 ** 연산자를 좋아하지 않는 것 같다, 그것을 해결할 수있는 X * X가 아닌 X ** 2 당신은 아마 버전 4.3을 사용하는 >>> x,y = x,y=Reals('x y')
>>> z3.prove(Implies(x -6 == 0,x**2 -36 == 0))
failed to prove
[x = 6]
>>> z3.pr
두 개의 수식 a1 == a + b과 a1 == b은 a == 0 인 경우에 동일합니다. Z3 python으로이 필요한 조건 (a == 0)을 찾고 싶습니다. from z3 import *
def equivalence(F, G):
s = Solver()
s.add(Not(F == G))
r = s.check()
if
문제의 예를 사용하여 거짓말 쟁이/진실 창구 인스턴스 해결 방법 : 거짓말 쟁이는 항상 false입니다 무슨 말을하고, 진실 창구는 항상 진실이 무엇인지 말을한다고 가정합니다. 또한 Amy, Bob, Cal, Dan, Erny 및 Francis가 각각 거짓말 쟁이이거나 진실을 말하는 사람이라고 가정합니다. Amy says, “Bob is a liar.”
저는 Python-API에서 Z3을 사용하고 있습니다. 아주 큰 선형 산술 제약 조건을 설정 중입니다. 그러나 push/pop은 check()이 무한대로 작동하도록합니다. push/pop을 사용하지 않는다면 아무 문제가 없습니다. 하지만 난 그냥 s.check() 전에 어딘가에 s.push()
s.pop()
를 삽입 할 때 s.check() 실행 끝
내가 Mac에서 z3py와 이상한 문제를보고하고를 얻을 수없는 사람이 전에 본 경우 궁금 해서요 : $ cat bug.py
from z3 import *
x = Int('x')
s = Solver()
s.add(x > 5)
print(s.check())
print(s.model())
$ python bug.py
sat
[x = ]
x의