Я планирую несколько экспериментов по символьному выполнению кода C, используя готовый SMT-решатель, и мне интересно, какой решатель использовать; глядя на например. участники конкурса SMT и, принимая только системы с открытым исходным кодом, сужают его до Beaver, Boolector, CVC3, OpenSMT, Sateen, Sonolar, STP, Verit; который по-прежнему длинный список.
Пытаясь еще больше сузить круг, я заметил, что некоторые системы рекламируют возможность обработки арифметики с битовыми векторами, в то время как другие рекламируют только возможность обработки общей целочисленной арифметики. В принципе, первое правильно для C, где переменными являются машинные слова, а не неограниченные целые числа. Какая разница на практике? Что произойдет, если вы попытаетесь использовать общую целочисленную систему для такого рода работы? Применяется ли один из следующих сценариев?
Бит-векторная система немного более эффективна, но вы можете использовать любую из них без проблем.
Вы можете использовать общую целочисленную систему с небольшими изменениями.
Общая целочисленная система подходит для целого числа со знаком (поскольку результат переполнения не определен), но дает неверный ответ для беззнакового.
Общая целочисленная система просто не подходит для арифметики машинных слов, и я могу сократить свой краткий список только до тех систем, которые обеспечивают арифметику битового вектора.
Что-то другое...?
Я пытался задать как можно более конкретный вопрос, но если кто-нибудь может предложить какие-либо другие критерии для сужения списка, это было бы здорово!