Z3 реальная арифметика и статистика
Учитывая проблему, которая закодирована с использованием действительных значений Z3, какая из статистическихZ3 /smt2 /st
Может быть полезно производить, чтобы определить, есть ли у движка reals «проблемы / много работы»?
В моем случае у меня есть две в основном эквивалентные кодировки задачи, обе с использованием реалов. & Quot; маленький & quot; разница в кодировании, однако, имеет большое значение во время выполнения, а именно, то, что кодирование A занимает 2: 30 минут, а кодирование B - 13 минут. Статистика Z3 показывает, чтоconflicts
а такжеquant-instantiations
в основном эквивалентны, а другие нет, напримерgrobner
, pivots
а такжеnonlinear-horner
.
Две разные статистические данные доступны каксуть.
EDIT (чтобы обратиться к комментарию Льва):
SMT2-кодирование, генерируемое обеими версиями, составляет ~ 30 тыс. Строк, а утверждения, в которых используются вещественные числа, разбросаны по всему коду. Основное различие заключается в том, что кодирование B использует множество недоопределенных констант реального типа из диапазона0.0
в1.0
которые ограничены неравенствами, например0.0 < r1 < 1.0
или же0.0 < r3 < 0.75 - r1 - r2
тогда как при кодировании A многие из этих недостаточно указанных констант были заменены фиксированными действительными значениями из того же диапазона, например,0.1
или же0.75 - 0.01
, В обоих кодировках используется нелинейная вещественная арифметика, напримерr1 * (1.0 - r2)
.
Несколько случайных примеров из двух кодировок доступны в видесуть, Все встречающиеся переменные являются заниженными действительными значениями, как описано выше.
PS: вводит псевдонимы для фиксированных реальных значений, например,
(define-sort $Perms () Real)
(declare-const $Perms.$Full $Perms)
(declare-const $Perms.$None $Perms)
(assert (= $Perms.Zero 0.0))
(assert (= $Perms.Write 1.0))
нанести значительный ущерб производительности?