Розв'язувачі SMT, такі як Z3 або Boolector, використовують складний набір евристики для вирішення проблем. Однак це також дуже важко передбачити ефективність такого рішення для даної проблеми. Моє питання таким чином:
Питання
Чи є спосіб зрозуміти чи отримати розуміння продуктивності розв'язувача SMT для конкретного в теорії біттераторів, що не містять кількісних показників (QFBV)?
Сюди також входять будь-які інструменти візуалізації, які допомогли б зрозуміти, де вирішувач "застряг" / не має прогресу.
Програми
Зрозумійте заздалегідь, як різні кодування однієї проблеми впливають на продуктивність вирішувача (найсучаснішим тут не може бути "просто спробуйте кілька різних кодувань і сподіваєтесь, що один досить швидкий", правда?)
Якщо задана проблема не вирішена SMT-рішенням через часові обмеження, знайдіть спосіб виразити проблему інакше, щоб її можна було вирішити.
Не витрачайте час на спрощення проблем, пов’язаних з доменом, які не вплинуть на продуктивність рішення або навіть негативно вплинуть на продуктивність вирішувача.
Існуючі дослідження
Я намагався знайти дослідження на цю тему, але мені так і не вдалося знайти. Я ще не маю великого досвіду в галузі вирішувачів SAT / SMT, тому вибачте, якщо я щось пропустив.
SATzilla : прогнозує найкраще вирішення на основі функцій, витягнутих із проблеми, використовуючи методи машинного навчання.
Це стосується лише SAT замість SMT, і не пояснює причин продуктивності рішення.
Профілер аксіоми Z3 Візуалізація графіка інстанціалізації Z3 та аналіз відповідних циклів
Схоже, це зосереджено лише на кількісно визначених теоріях.