z3 числовые ограничения: что лучше?
Какой из следующих двух способов записи (эквивалентных) ограничений предпочтителен (с точки зрения производительности) при решении целочисленных вещественных ограничений с использованием z3?
(assert (=> (и (<= значение 0,0009765625) (<значение 0,001953125)) (= новое значение 0,0009765625)))
OR
(assert (=> (и (<= (/ 1,0 1024,0) значение) (<значение (/ 1,0 512,0)))) (= новое значение (/ 1,0 1024,0))))
Обратите внимание, что у нас здесь есть взаимные степени степеней двойки (и существует много таких ограничений этого типа, включающих как меньшие, так и большие числа).
1 ответ
Внутри Z3 преобразует все цифры в десятичной записи в дроби. Это преобразование выполняется при разборе формулы. В любом случае, мы не ожидаем увидеть большую разницу в производительности между этими двумя кодировками. Время анализа обычно незначительно в Z3 (по сравнению со временем решения).