Давайте рассмотрим следующую задачу: f(a, b, c, x, y, z)
— это логическая функция, где a, b, c, x, y и z — логические значения, а вывод f — логическое значение. Определение f состоит из ряда операторов и/или/ни. Я хочу найти набор из трех логических значений x0, y0 и z0, таких что:
f(0, 0, 0, x0, y0, z0) = 0 AND
f(0, 0, 1, x0, y0, z0) = 1 AND
f(0, 1, 0, x0, y0, z0) = 1 AND
f(0, 1, 1, x0, y0, z0) = 0 AND
...
f(1, 1, 1, x0, y0, z0) = 1 # A total of 8 constrains. Each of them is from an entry in the truth table.
Наивный подход состоит в том, чтобы определить 3 логические переменные x, y, z и повторно определить функцию f
8 раз. Однако f состоит из сложных логических выражений. Определение его 8 раз может взорвать модель. При этом фактически у меня есть 7 переменных: a, b, c, d, e, f, g. В таблице истинности 128 записей.
Есть ли способ определить что-то вроде переменных-заполнителей a, b, c, которые не являются частью решения? Затем я могу определить f для a, b, c, x, y, z только один раз, а позже каким-то образом присвоить a, b, c булевым константам.
Я новичок в решателях SMT, идея заполнителя может быть совершенно неуместной. Другие решения также приветствуются.