Z3의 PDR 엔진을 사용하여 전환 시스템의 불변 조건을 증명합니다. 전환 시스템에 특정 상태에 도달하기 위해 통과해야하는 카운터 루프가 포함되어 있으면 성능이 느립니다.전환 시스템의 카운터 루프 - Z3
다음 소스 코드에서 Z3 Fixedpoint Homepage에 전환 시스템 파이썬 클래스로 구현 된 3 가지 상태와 3 가지 전환을 포함하는 전환 시스템의 예를 볼 수 있습니다. 마지막 줄에는 상태 L0에서 시작하여 상태 L2에 도달하는 쿼리가 있습니다. 따라서 천이 t2는 y 번 통과해야합니다.
y == 10으로 초기화하면 답이 빨리 계산됩니다. 하지만 초기화 y == 1000 성능이 느립니다.
L0 = L.L0
L1 = L.L1
L2 = L.L2
y=Int('y')
i = Int('i')
state = Const('state', L)
t1 = { "guard" : state == L0,
"effect" : [ L1, i ] }
t2 = { "guard" : And(state == L1),
"effect" : [ L1, i+1 ] }
t3 = { "guard" : And(state == L1,i>y),
"effect" : [ L2, i]}
ptr = TransitionSystem(And(state == L0, i == 0, y==10),[t1, t2, t3],[state, i])
ptr.query(state==L2)
더 나은 성능을 얻기 위해 Z3으로 L0에서 L2 로의 경로를 계산할 가능성이 있습니까?
답장을 보내 주셔서 감사합니다. 당신은 PDR 엔진을 최적화하여 그러한 문제에 대해 더 빨리 얻을 수있는 기회를 얻었습니까? 전개시 동일한 특성을 병합하여? –
... 또는 예 : 펼쳐질 때 전이 시스템 구조 또는 상태 전이를 별도로 고려하십시오. –