포스터에 합금 기능을 비교하는 방법이 나와 있습니다. 작은 예제 (함수 대신 술어 비교)를 사용하여 질문에 답하는 동안, 나는 다음과 같은 행동을 발견했다.술어 비교
분석기는 check 명령의 경계가 3보다 크고 사실 'f1'이 활성화 될 때마다 반례를 발견하지 못합니다. 분석기는 예상대로 작동하지 않습니다. 중복 된 사실 'f1'이 분석기의 동작을 왜 수정하고 왜 경계가 3보다 큰지는 왜입니까?
open util/ordering [V]
sig V {}
fact f1 {
# V > 0
}
pred p1 [x: V] {
x = last
}
pred p2 [x: V] {
x = first
}
assert a1 {
all x: V | p1[x] <=> p2[x]
}
check a1 for 3
체크 경계가 4 이상 및 'F1'때마다 분석 보고서 '0 바르 활성화되어있는 것으로 보인다. 0 기본 vars. 0 개의 조항들. '
높은 Int 범위를 지정하면 문제가 해결됩니다. 귀하의 조언에 감사드립니다. –
서명에 대한 순서를 설정하면 해당 서명으로 입력 된 원자 수는 분석이 실행되는 범위가되도록 추가됩니다. 따라서 사실 1을 제거 할 수 있습니다. –