Вопрос

У меня большое количество эквивалентных эквивалентных, которые выглядят:

$ (A \ leq 0.54 \ quctge b \ geq 0.12) \ vee (c \ gt 0.98) $ $ \ Leftrightarrow $ $ (x \ leq 0.25) \ vee (x \ gt 0.91 \ enge y \ geq 0,01) $

Это просто пример. В целом, формулы на левой, либо правой стороне эквивалентности могут быть все, что принимает форму дизъюнктивной нормальной формы (DNF) пункт, числа могут быть любыми реальными числами с фиксированной точностью, а признаки неравенства могут быть $ \ leq $ , $ \ lt $ $ , $ \ geq $ или $ \ gt $ .

Что важно, так это то, что возможные переменные на левой части всех формул (здесь $ \ {a, b, c \} $ ) Форма набор Это отличается от возможных переменных на правой стороне всех формул (здесь $ \ {x, y, z \} $ ). Может быть любое фиксированное количество переменных с обеих сторон: не нужно 3 переменных, и не должно быть равным числом с обеих сторон.

У меня также есть некоторые последствия формы:

$ (a \ leq 0.32 \ quild b \ geq 0.62) $ $ \ pruralarrow $ < Spaness Class="Math-container"> $ (C \ GT 0,00) $

Здесь как левые, так и правые стороны - это просто соединения неравенств, но то, что важно, это то, что набор переменных на как в левой и правой сторонах , т. Е. $ \ {a, b, c \} $ здесь, совпадает с набором переменных на только в левой части предыдущего типа формулы (то есть эквивалента).

Мой вопрос: какой автоматический аналог мне нужно найти логические последствия набора таких формул? Я просто ищу конкретную идентификацию общего класса проблем, которые относятся к этому, и любые неуверенные разум, которые могут быть доступны. Возможно, это проблема SMT?

Это было полезно?

Решение

Да, вы можете решить это с SMT Solver, который поддерживает линейную реальную арифметику. Однако SMT поддерживает более общие неравенства, где вы можете иметь линейные суммы переменных (например, $ 2a + 3x \ le 5,7 $ ) вместо простых сравнений между одной переменной и Константа (например, $ a a a a 1.6 $ ), поэтому он может быть более мощным, чем вам нужно, поэтому, если у вас нет линейных неравенств, связанных с суммами, то Я согласен с псевдонимом, что лучший подход может быть использовать SAT Solver.

Я бы предложил немного другой кодировкой, чтобы сел. Вместо однотакового кодирования, где $ x_i $ означает, что $ C_ {I-1} \ le x \ le c_i $ , я бы предложил немного разное кодирование: $ x_i $ означает $ x \ le c_i $ < / span>. Таким образом, вместо кодирования на $ (x_1, \ dots, x_n) $ Вектор, как $ (0,0,0, 1,0) $ Вы бы кодируете, чтобы $ (1,1,1,1,1,0) $ . Вы добавляете ограничения, которые $ x_i \ подразумевают x_ {i-1} $ , а затем каждое неравенство $ x \ le c_i $ соответствует логичному переменной $ x_i $ .

Другие советы

В вашем случае простейшее решение может быть использовано SAT.

Ваше первое предложение включает в себя $ x \ le 0,25 $ и $ x> 0,91 $ . Это означает, что есть пять областей, представляющих интерес для переменной $ x $ , который мы идентифицируем с логическими переменными: $ X_1 \ equiv x \ in (- \ infty, 0,25) $ , $ x_2 \ equiv x= 0,25 $ , $ X_3 \ equiv x \ in (0,25, 0,91) $ , $ x_4 \ equiv x= 0,91 $ , $ X_5 \ equiv x \ in (0,91, \ infty) $ .

Создайте логическую переменную для каждого из этих диапазонов и преобразовывать предложение, чтобы их использовать. Так, например, $ x \ le 0,25 $ преобразуется в $ x_1 \ vee x_2 $ , а также $ x <0,91 $ будет преобразовать $ x_1 \ vee x_2 \ vee x_3 $ .

Больше пунктов означало бы больше константе, и, следовательно, больше представляющих интерес для примитивной переменной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top