Хорошо бы еще построить схему, инвертирующую
входов.
Для начала, построим схему, которая выдает 1, если для заданного
включено не менее
входов. Возьмем все возможные комбинации из
входов, каждую комбинацию соединим в один элемент И, а выходы всех элементов И соединим в одно ИЛИ. Обозначим такую схему как
(greater or equal).
Из рассуждения в предыдущем посте и из того, что мы могли включать входы в любом порядке, следует, что значения на выходах инверторов полностью определяются количеством включенных входов. А именно, на входе
-го инвертора должна быть единичка, если количество включенных входов в двоичном представлении имеет
-ый бит, равный единичке, считая от старшего бита к младшему. На выходе
-го инвертора должен быть, соответственно, инвертированный
-ый бит.
Теперь укажем схему, как должны быть эти инверторы соединены, чтобы они действительно вычисляли соответствующие биты двоичного представления количества включенных входов. Строить будем по индукции. Пусть у нас уже
инверторов, которые вычисляют первые
инвертированных бит. Эти инверторы позволяют построить схемы, выдающие 1 в случае, если первые
бит числа включенных входов имеют произвольные заданные значения, а именно, берем элемент И с
входами, на которые подаем сигналы либо со входов, либо с выходов этих инверторов. Построим
таких схем для всех возможных значений
бит, они нам все понадобятся. Обозначим эти схемы как
, где
.
выдает 1, если первые
бит числа включенных входов образуют число
. Соединим каждую из
со схемой
элементом И, а потом все эти элементы И, в количестве
штук, соединим элементом ИЛИ. На выходе ИЛИ будет 1, если
-ый бит равен 1, иначе 0. Выход ИЛИ воткнем в
-ый инвертор. Конец шага индукции.
Теперь мы можем вычислять каждый бит числа включенных входов, а это позволяет построить схемы, выдающие 1 в том случае, если количество включенных входов в точности равно заданному (в отличие от упоминавшихся в начале схем GE). Обозначим такие схемы как
.
Всё, теперь можно инвертировать входы, например, первый вход. Делать будем так: рассмотрим все возможные наборы значений остальных
входов. Таких наборов будет
штук. Для каждого набора возьмем элемент И, на который подадим тех входы, значение которых равно 1 в этом наборе и схему, выдающую 1, если количество всех включенных входов равно количеству входов, принимающих значение 1 в этом наборе, а потом все эти элементы И соединим в одно ИЛИ. Например, для
будет так:
. На выходе будет инвертированный первый бит.