Z3 4.0 Z3_parse_smtlib2_string

Eu estou usando o Z3 com SMT2 via C API / JNA / Scala e parece funcionar muito bem.

Eu quero tentar resolver incremental. Então, primeiro eu traduzo isso usandoZ3_parse_smtlib2_string:

(declare-fun x () Int)
(assert (>= x 0))
(check-sat)
(get-model)

Então eu voltoZ3_ast, coloque em um solucionador viaZ3_solver_assert, verifique com Z3_solver_check e recupere um modelo viaZ3_solver_get_model (se a verificação retornou satisfatória, o que é o caso neste exemplo). Até agora não há problema.

Mas quando eu quero afirmar algo adicionalmente assim:

(assert (= x 1))

Eu fico preso no ponto em queZ3_parse_smtlib2_string é chamado, porque reclama, que x é uma constante desconhecida. Se eu adicionar também adicionar odeclarar-divertido para o segundo trecho eu recebo um erro de argumento inválido. Essa variável já não deveria existir no ambiente? Eu tenho que definir os parâmetros adicionais deZ3_parse_smtlib2_string? Como posso tirar isso da fórmula previsivelmente analisada?

Usando também(set-option: global-decls true) não funcionou como Z3 me diz que issovalor da opção não pode ser modificado após a inicialização.

Alguém tem uma idéia de como resolver esse problema?

questionAnswers(1)

yourAnswerToTheQuestion