В Z3 вы должны to_real получить реальный эквивалент Int. Есть ли какая-то поддержка обратных преобразований, то есть усечения, округления и т.п.? В отрицательном случае, каким может быть наиболее удобный для Z3 способ их определения, если таковой имеется? Всем большое спасибо ответите.
Поддерживает ли Z3 преобразование Real-to-Int?
Ответы (1)
Да, в Z3 есть функция to_int
, которая преобразует вещественное число в целое число. Семантика to_int
определена в стандарте SMT 2.0. Вот пример: http://rise4fun.com/Z3/uJ3J
(declare-fun x () Real)
(assert (= (to_int x) 2))
(assert (not (= x 2.0)))
(check-sat)
(get-model)
person
Leonardo de Moura
schedule
15.10.2012
Спасибо большое; поскольку мне нужно округление до нуля, я буду использовать (define-fun round_to_zero ((x Real)) Int (if (›= x 0.0) (to_int x) (- (to_int (- x))))). Еще раз спасибо и продолжайте в том же духе с Z3.
- person Pietro Braione; 16.10.2012