2012-05-31 12 views
0

문제는 매우 간단합니다. C API 인터페이스를 사용하여 Z3에서 다음 명령문을 사용합니다.Z3 ast_to_string() 뺄셈이있는 API

(assert(>= (xA 1) (- (yB 0) period)))) 

가끔 어쩌면 어떤 종류의 어설 션과 결과가 SatSolver에 있는지 확인할 필요가 있습니다. ast_to_string() API를 사용하여 텍스트 파일을 생성하여이 작업을 수행합니다. 나는 토 찾기이 파일을 먹일 때 오류 나를 불평

(assert(>= (xA 1) (+ (yB 0) (* -1 period)))) 

- -

(error "ERROR: line 150 column 56: could not locate id -1.")

내가 수동으로 모든 -1 수정해야, 그럼으로이 API는 문 위의 저를 반환 코드를 작성하고 sat 솔버를 실행하십시오. 내가 이것을 피할 수있는 다른 방법이 있습니까?

+0

SatSolver의 의미는 무엇입니까? 텍스트 파일을 사용해야하는 이유는 무엇입니까? API에서도 호출 할 수 없습니까? – Philippe

답변

1

설정 기억이 출력 공식 SMTLIB 2.0 형식을 준수하기 ast_to_string()를 사용하기 전에

Z3_set_ast_print_mode(ctx,Z3_PRINT_SMTLIB2_COMPLIANT); 

.

+0

정말 문제를 해결하지 않습니다. 예를 들어, 출력에서 ​​-'(assert (let ((? x28)) (> =? x28 0)))' 을 따르기 때문에 결과적으로 파일에 인쇄하는 이점이 사라집니다. – Raj

+0

것은 출력이 Z3에 의해 파싱 가능한지 여부입니다. 마침내 SMTLIB는 사람이 읽을 수있는 형식이 아닌 기계가 읽을 수있는 형식입니다. – pad