Превращение Цейтина
Преобразование Цейтина , альтернативно называемое преобразование Цейтина , принимает на вход произвольную комбинаторную логическую схему и создает эквивалентную булеву формулу в конъюнктивной нормальной форме (КНФ). Длина формулы линейно зависит от размера схемы. Входные векторы, которые делают выход схемы «истинным», находятся в однозначном соответствии с присваиваниями, удовлетворяющими формуле. Это сводит проблему выполнимости схем на любой схеме (включая любую формулу) к проблеме выполнимости формул 3-КНФ. Его открыл российский учёный Григорий Цейтин .
Мотивация
[ редактировать ]Наивный подход состоит в том, чтобы записать схему в виде логического выражения и использовать закон Де Моргана и распределительное свойство для преобразования ее в КНФ. Однако это может привести к экспоненциальному увеличению размера уравнения. Преобразование Цейтина выводит формулу, размер которой растет линейно относительно размера входной схемы.
Подход
[ редактировать ]Выходное уравнение — это константа 1, равная выражению. Это выражение представляет собой объединение подвыражений, где выполнение каждого подвыражения обеспечивает правильную работу одного вентиля во входной схеме. Таким образом, удовлетворение всего выходного выражения гарантирует, что вся входная схема работает правильно.
Для каждого вентиля вводится новая переменная, представляющая его выход. Небольшое предварительно рассчитанное выражение CNF, связывающее входные и выходные данные, добавляется (через операцию «и») к выходному выражению. Обратите внимание, что входными данными для этих элементов могут быть либо исходные литералы, либо введенные переменные, представляющие выходные данные подэлементов.
Хотя выходное выражение содержит больше переменных, чем входные, оно остается равновыполнимым , что означает, что оно выполнимо тогда и только тогда, когда исходное входное уравнение выполнимо. Когда найдено удовлетворительное присвоение переменных, эти присвоения введенным переменным можно просто отбросить.
К последнему предложению добавляется один литерал: выходная переменная последнего вентиля. Если этот литерал дополняется, то выполнение этого предложения приводит к тому, что выходное выражение становится ложным; в противном случае выражение становится истинным.
Примеры
[ редактировать ]Рассмотрим следующую формулу .
Рассмотрим все подформулы (исключая простые переменные):
Введите новую переменную для каждой подформулы:
Соедините все замены и замену на :
Все замены могут быть преобразованы в CNF, например
Подвыражения шлюза
[ редактировать ]Перечислены некоторые возможные подвыражения, которые можно создать для различных логических элементов. В выражении операции C действует как выход; в подвыражении CNF C действует как новая логическая переменная. Для каждой операции подвыражение CNF истинно тогда и только тогда, когда C придерживается контракта логической операции для всех возможных входных значений.
Тип | Операция | Подвыражение CNF |
---|---|---|
И | ||
NAND | ||
ИЛИ | ||
НИ | ||
НЕТ | ||
БЕСПЛАТНО | ||
ИСНО-ИЛИ |
Простая комбинаторная логика
[ редактировать ]Следующая схема возвращает true, если хотя бы некоторые из ее входных данных верны, но не более двух одновременно. Он реализует уравнение y = x1 · x2 + x1 · x2 + x2 · x3 . Для выхода каждого вентиля вводится переменная; здесь каждый отмечен красным:
Обратите внимание, что на выходе инвертора с x 2 входом представлены две переменные. Хотя это и избыточно, но не влияет на эквивыполнимость полученного уравнения. Теперь замените каждый элемент соответствующим подвыражением CNF:
ворота | Подвыражение CNF |
---|---|
ворота1 | (ворота1 ∨ x1) ∧ ( ворота1 ∨ x1 ) |
ворота2 | ( ворота2 ∨ ворота1) ∧ ( ворота2 ∨ x2) ∧ ( x2 ∨ ворота2 ∨ ворота1 ) |
ворота3 | (ворота3 ∨ x2) ∧ ( ворота3 ∨ x2 ) |
ворота4 | ( ворота4 ∨ x1) ∧ ( ворота4 ∨ ворота3) ∧ ( ворота3 ∨ ворота4 ∨ x1 ) |
ворота5 | (ворота5 ∨ x2) ∧ ( ворота5 ∨ x2 ) |
ворота6 | ( ворота6 ∨ ворота5) ∧ ( ворота6 ∨ x3) ∧ ( x3 ∨ ворота6 ∨ ворота5 ) |
ворота7 | (ворота7 ∨ ворота2 ) ∧ (ворота7 ∨ ворота4 ) ∧ (ворота2 ∨ ворота7 ∨ ворота4) |
ворота8 | (ворота8 ∨ ворота6 ) ∧ (ворота8 ∨ ворота7 ) ∧ (ворота6 ∨ ворота8 ∨ ворота7) |
Последней выходной переменной является Gate8, поэтому для обеспечения того, чтобы вывод этой схемы был истинным, добавляется еще одно последнее простое предложение: (ворота8). Объединение этих уравнений приводит к окончательному варианту SAT:
- (ворота1 ∨ x1) ∧ ( ворота1 ∨ x1 ) ∧ ( ворота2 ∨ ворота1) ∧ ( ворота2 ∨ x2) ∧
- ( x2 ∨ ворота2 ∨ ворота1 ) ∧ (ворота3 ∨ x2) ∧ ( ворота3 ∨ x2 ) ∧ ( ворота4 ∨ x1) ∧
- ( ворота4 ∨ ворота3) ∧ ( ворота3 ∨ ворота4 ∨ x1 ) ∧ (ворота5 ∨ x2) ∧
- ( ворота 5 ∨ x2 ) ∧ ( ворота 6 ∨ ворота 5) ∧ ( ворота 6 ∨ x3) ∧
- ( x3 ∨ ворота6 ∨ ворота5 ) ∧ (ворота7 ∨ ворота2 ) ∧ (ворота7 ∨ ворота4 ) ∧
- (ворота2 ∨ ворота7 ∨ ворота4) ∧ (ворота8 ∨ ворота6 ) ∧ (ворота8 ∨ ворота7 ) ∧
- (ворота6 ∨ ворота8 ∨ ворота7) ∧ (ворота8) = 1
Одним из возможных удовлетворительных назначений этих переменных является:
переменная | ценить |
---|---|
ворота2 | 0 |
ворота3 | 1 |
ворота1 | 1 |
ворота6 | 1 |
ворота7 | 0 |
ворота4 | 0 |
ворота5 | 1 |
ворота8 | 1 |
х2 | 0 |
х3 | 1 |
х1 | 0 |
Значения введенных переменных обычно отбрасываются, но по ним можно проследить логический путь в исходной схеме. Здесь, действительно соответствует критериям исходной схемы для вывода истины. Чтобы найти другой ответ, предложение (x1 ∨ x2 ∨ x3 можно добавить ) и снова запустить решатель SAT.
Вывод
[ редактировать ]Представлен один из возможных вариантов получения подвыражения CNF для некоторых выбранных вентилей:
ИЛИ Ворота
[ редактировать ]Логический элемент ИЛИ с двумя входами A и B и одним выходом C удовлетворяет следующим условиям:
- если выход C истинен, то хотя бы один из его входов A или B истинен,
- если выход C ложен, то оба его входа A и B ложны.
Мы можем выразить эти два условия как сочетание двух импликаций:
Замена импликаций эквивалентными выражениями, включающими только союзы, дизъюнкции и отрицания, дает
что уже почти находится в конъюнктивной нормальной форме . Распределение крайнего правого предложения дважды дает
и применение ассоциативности соединения дает формулу КНФ
НЕ ворота
[ редактировать ]Вентиль НЕ работает правильно, когда его вход и выход противоположны друг другу. То есть:
- если выход C истинен, вход A ложен
- если выход C ложен, вход A истинен
выразить эти условия в виде выражения, которое должно быть удовлетворено:
- ,
НО-ворота
[ редактировать ]Вентиль NOR работает правильно, если выполняются следующие условия:
- если вывод C истинен, то ни A, ни B не являются истинными
- если выход C ложный, то хотя бы один из A и B был истинным
выразить эти условия в виде выражения, которое должно быть удовлетворено:
- , , , ,
Ссылки
[ редактировать ]- Г. С. Цейтин : О сложности вывода в исчислении высказываний. В: Слисенко А.О. (ред.) Исследования по конструктивной математике и математической логике, Часть II, Семинары по математике, стр. 115–125. Математический институт им. Стеклова (1970). Перевод с русского: Записки научных семинаров ЛОМИ 8 (1968), стр. 234–259.
- Г. С. Цейтин: О сложности вывода в исчислении высказываний. Доложено на Ленинградском семинаре по математической логике, состоявшемся в сентябре 1966 года.