리버싱/+

z3 정리~

육키티 2025. 1. 16. 21:36

문제를 조건에 맞게 해결할 때 사용하는 라이브러리 

from z3 import *
s = Solver()

일단 Solver()로 인스턴스 생성 

 

x = Int('x')
s.add(x > 0)
s.add(x < 10)

add()로 제약 조건 추가 

 

result = s.check()

check()로 해당 조건으로 문제가 해결되는지 판단 

sat(가능) unsat(불가능) unknown(몰라) 

 

if s.check() == sat:
    m = s.model()
    print(m[x])

sat일 시(가능하다면) model()로 해 반환 

 

추가 기능은 코드로 한 번에 정리 

# push()와 pop(), 스택 관리 
s.push()  # 현재 상태 저장
s.add(x == 5)
s.pop()   # 이전 상태로 복원


# reset() 초기화 
s.reset()


# assertions(), 제약 조건 반환 
for assertion in s.assertions():
    print(assertion)


# statistics() 성능 통계 
print(s.statistics())

# unsat_core() 불만족하는 제약 조건 반환(항상 최소한으로) 

# proof() 불만족의 증명 생성