Что означает "свободная логика" в контексте SMT?
Даже для простейших арифметических задач SMT экзистенциальный квантификатор необходим для объявления символических переменных. А также ∀
квантификатор можно превратить в ∃
инвертируя ограничение. Итак, я могу использовать их оба в QF_*
логика и все работает.
Я так понимаю, термин "без квантификатора" означает что-то еще для такой логики SMT, но что именно?
2 ответа
Утверждается, что
∀
квантификатор можно превратить в∃
инвертируя ограничение
AFAIK, следующие два отношения имеют место:
∀x.φ(x) <=> ¬∃x.¬φ(x)
¬∀x.φ(x) <=> ∃x.¬φ(x)
Так как формула SMT без кванторов φ(x)
равноудален к своему экзистенциальному замыканию ∃x.φ(x)
мы можем использовать свободный от кванторов фрагмент теории SMT, чтобы выразить (простое) отрицательное вхождение универсального количественного определения, и [AFAIK] также (простое) положительное вхождение универсального количественного определения по тривиальным формулам (например, если [∃x.]φ(x)
является unsat
затем ∀x.¬φ(x)
¹).
¹: при условии φ(x)
не содержит квантификаторов; Как отмечает @Levent Erkok в своем ответе, этот подход не дает результатов, когда оба φ(x)
а также ¬φ(x)
выполнимы
Однако, мы не можем, например, найти модель для следующей количественной формулы, использующей фрагмент SMT без кванторов:
[∃y.]((∀x.y <= f(x)) and (∃z.y = f(z)))
Для записей это кодировка проблемы OMT min(y), y=f(x)
в качестве количественной формулы SMT. [ связанный документ ]
Термин
t
без квантификаторов, еслиt
синтаксически не содержит квантификаторов. Формула без квантификаторовφ
равноудален с его экзистенциальным замыканием(∃x1. (∃x2 . . .(∃xn.φ ). . .))
где
x1, x2, . . . , xn
любое перечислениеfree(φ)
свободные переменные вφ
,Множество свободных переменных члена
t
,free(t)
, индуктивно определяется как:
free(x) = {x}
еслиx
переменная,free((f t1 t2 . . . tk)) = \cup_{i∈[1,k]} free(ti)
для функциональных приложений,free(∀x.φ) = free(φ) \ {x}
, а такжеfree(∃x.φ) = free(φ) \ {x}
,
Патрик дал отличный ответ, но вот еще несколько мыслей. (Я бы поставил это как комментарий, но Stackru считает, что это слишком долго!)
Обратите внимание, что вы не всегда можете сыграть трюк "отрицай и проверь обратное". Это работает только потому, что если отрицание свойства неудовлетворительно, то свойство должно быть истинным для всех входных данных. Но это не наоборот: свойство может быть выполнимым, и его отрицание также может быть выполнимым. Простой пример:
x < 10
, Это, очевидно, выполнимо, как и его отрицаниеx >= 10
, Таким образом, вы не всегда можете избавиться от квантификаторов, используя этот трюк. Это работает, только если вы хотите что-то доказать: тогда вы можете отрицать это и посмотреть, является ли это отрицание неудовлетворительным. Если вас беспокоит поиск модели для формулы, этот метод не применяется.Вы всегда можете сколемизировать формулу и устранить все экзистенциальные квантификаторы, заменив их неинтерпретированными функциями. То, что вы в итоге получите, это уравновешенная формула, которая имеет все префиксные универсалии. Понятно, что это не бесплатная квантификатор, но это очень распространенный трюк, который большинство инструментов делают для вас автоматически.
Где все это болит, это чередующиеся квантификаторы. Независимо от сколемизации, если у вас есть чередующиеся квантификаторы, с вашей проблемой уже трудно справиться. Страница Википедии об исключении квантификаторов довольно краткая, но она дает очень хорошее введение: https://en.wikipedia.org/wiki/Quantifier_elimination Вывод: не каждая теория допускает исключение кванторов, и даже те, которые действительно могут требовать экспоненциальных алгоритмов избавиться от них; вызывая проблемы с производительностью.