Борис Цирлин

Определяется понятие изоморфности схем, построенных из логических элементов. Предлагаются алгоритмы подсчета таких схем.

Введение

В статье "Полумодулярные схемы" рассматривались схемы из nлогических элементов, заданные системами из n логических уравнений. Для каждого элемента в каждом состоянии схемы определялось понятие "возбуждения" - когда значение его выхода не соответствовало значению определяющей его логической функции в уравнении. Было введено понятие "векто возбуждений", как последовательность Q из G = 2**n чисел, где G очевидно равно числу состояний схемы (** символ возведения в степень - как и раньше будем использовать систему обозначения для математических операций, принятую в алгоритмическом языке Питон). Каждая компонента Q[i] вектора возбуждение может иметь одно из G возможных значений, т.е. 0=<G<2**n, откуда понятно, что число таких схем определяется формулой:

N = G**G = (2**n)**(2**n)

Такое представление "векторами возбуждения" используется для нумерации произвольных схем из n элементов, заданных системами n логических уравнений. Однако имеют место схемы идентичные на уровне физической реализации и логики работы, но имеющие различные векторы возбуждения, Назовем такие схемы изоморфными и покажем, как формально получаются схемы, изоморфные данной.

Пронумеруем переменные, соответствующие выходам схемы, т.е. имеем набор x1, x2,...,xn. Теперь обозначим выход x1 через x2, а выход, ранее бывший x2 - через x1. Фактически схема останется идентичной исходный, но вектор возбуждения очевидным образом изменится. Из школьного курса известно, что число таких перестановок n переменных равно n! (n факториал), что, в принципе, и определяет число изоморфных схем полученных таким образом.

Второй способ получения изоморфных схем не столь прозрачен. Он заключается в использовании, вместо какой-либо переменной xk, ее инверсии ~xk. Напомним, что инверсия переменной имеет значение противоположное значению самой переменной, т.е. если xk = 1, то ~xk = 0 и наоборот, если xk = 0, то ~xk = 1, так что значение xk, вырабатываемое схемой, будет инверсно, по сравнению с исходной, что, естественно, изменит и ее вектор возбуждения. Но использоваться-то теперь будет ~xk вместо xk, т.е. фактически в схеме ничего не поменяется. Каждая из n переменных при этом способе может либо остаться в натуральном виде , либо инвертирована, что дает знакомые

G = 2**n

вариантов. Применяя оба этих способа можно получить для каждой схемы список из

K = (n!)*G = (n!)*(2**n)

изоморфных и, казалось бы, поделив число N на К, наконец, узнаем сколько всего различных схем из n элементов имеют место:

N/K = ((2**n)**(2**n))/((n!)*(2**n)) = (2**n)*(2**n - 1)/n!

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

В качестве примера рассмотрим уникальную схему, не имеющую изоморфных вообще. Для n = 3 она задается системой логических уравнений:

x1 = x1; x2 = x2; x3 = x3.

Все ее переменные устойчивы во всех ее 8 состояниях, т.е. она имеет нулевой вектор возбуждений.

Формализация получения изоморфных схем перестановками

Начнем с самих перестановок, которые, для заданного n, определим, используя готовую программу (обычно она называется permutation), образцы которой имеются интернете. Результат работы такой программы для n = 3 - это список вида:

pertmutation(3) = [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]],

не требует пояснений. Далее построим двумерный список s измененных состояний, в которые преобразуются состояния исходной схемы в результате применения перестановок. При этом первой координатой в s будут номера перестановок из permutation, а второй - номера состояний (или компонент вектора Q возбуждений). Два состояния схемы, а именно такие, в которых значения всех выходов ее элементов одинаковы и равны 0 или 1 - инвариантны к перестановкам, остальные же легко вычислить, представив состояния исходной схемы в двоичном коде, а затем, изменив веса компонент этого кода в соответствии с выбранной перестановкой, сложить эти модифицированные компоненты.
Заметим, что список s справедлив и для измененных компонент векторов возбуждений. На рисунке приведен список s для n = 3.

Список S
Список S

Для любой i-й перестановки из permutation, j-й компоненте вектора Q возбуждения некоторой схемы соответствует s[j][i]-я компонента вектора возбуждений, для изоморфной схемы. При этом соответствие это взаимно однозначное, что следует хотя бы из того, что в каждом столбце в s нет повторяющихся цифр. Значение этой компоненты определяется тоже с помощью списка s и равно s[Q[j]][i], а ее вес в составе номера схемы M[i] равен G**s[j][i]. Т.е. номер M[i] схемы, соответствующей данной для перестановки i, вычисляется циклом:

for j in range(G): M[i]+=s[(Q[j])][i]*G**s[j][i]

Формализация получения изоморфных схем инверсией

Для реализации этого способа получения изоморфных схем достаточно вспомнить, что для нумерации всех возможных способов инвертирования использовалось кодирование - 1 наличие инверсии переменной в данном варианте и 0 - если переменная не инвертируется. В булевой алгебре именно так определяется операция "исключающее или". Т.е. при j
способе инвертирования, i-е состояние исходной схемы (номер компоненты Q) трансформируется в состояние i^j ("исключающее или" i и j)изоморфной схемы с номером N[j], что сделает ее вес в этом номере равным G**(i^j). При этом значение самой компоненты не измениться, а этот номер вычисляется циклом:

for i in range (G): N[j]+=Q[i]*G**(i^j)

Замечания к программной реализации

В главном цикле программа перебирает номера I схем по возрастанию - от 0 до G**G. Для каждой определяется сначала список М изоморфных по перестановкам, а потом, для каждого его члена M[i] - по инверсии. Результат последнего действия сводится в общий список N схем, изоморфных данной.

Когда вычисляется список изоморфных для очередной схемы, то возможна ситуация, что этот список не уникален, т. е. уже было порожден другой схемой, рассмотренной раньше. Тогда этот список (будем и дальше называть его не уникальным) содержит и ту схему, что была уже рассмотрена, а соответствующий ей номер, очевидно, меньше текущего. Следовательно признаком уникальности списка изоморфных схем является то, что номер порождающей его схемы минимальный в этом списке. Используя этот признак программа учитывает только уникальные списки изоморфных схем, исключая из рассмотрения все остальные, т.е. избегает дублирования этих списков изоморфных, причем эту проверку проводит на обеих этапах.

Построенные списки N изоморфных схем могут содержать повторяющиеся элементы, тогда как интерес представляет число различных схем в каждом таком списке. Для получения этого числа Питон предлагает метод, основанный на преобразовании списка (list) во множество (set) - в котором повторяющиеся элементы исключаются по определению, и получение длины последнего стандартной функцией len():

l=len(set(N))

Подсчитав количество, полученных таким образом, списков N изоморфных схем, как раз и определим искомое число различных (не изоморфных) схем из n элементов. Заодно появляется возможность рассортировать списки изоморфных схем по длине, что интересно с точки зрения понимания структуры этого феномена.
Листинг обсуждаемой программы приведен ниже.

Листинг 1
Листинг 1

Заключение

В статье "Полумодулярные схемы" были определены формальные признаки принадлежности схемы этому классу, позволившие подсчитать количество таких схем для n = 1, 2 и 3, где n, как всегда, число ее элементов. Добавив в обсуждаемую программу такую же проверку (место для вставки выделено комментариями), получим число не изоморфных полумодулярных схем и их распределение по различной длины спискам изоморфных.

Такую же процедуру можно проделать с проверкой схемы на принадлежность ее классу последовательных, признаком нарушения которой является значение компоненты Q[i] вектора возбуждения соответствующее возбуждению более одного элемента, т. е. при n = 2:

Q[i] == 3,

а при n = 3:

(Q[i] == 3) or (Q[i] == 5) or (Q[i] == 6) or (Q[i] == 7)

Такие эксперименты были проделаны и все результаты сведены в табл. 1 и табл. 2.

Табл. 1
Табл. 1
Табл. 2
Табл. 2

Заметим, подсчет изоморфных последовательных схем описан в статье "Последовательные схемы ч.2". Правда, там применен другой способ кодирования схем, учитывающий их специфику и за счет этого снижающий вычислительную сложность задачи.

Назовем последовательности изоморфных схем ущербными, если число членов этих последовательностей меньше максимально возможного K, напомним:

K = (n!)*(2**n)

Из сравнения табл. 1 и 2 видно, что хотя с ростом n число ущербных последовательностей растет, их доля по сравнению с количеством не ущербных падает. Это позволяет предположить, что число не изоморфных схем с ростом n приближается (сверху) к предложенной оценке N/K.

Такой же вывод можно сделать и для последовательных и полумодулярных схем.

Комментарии (10)


  1. Thealik
    09.12.2025 09:03

    Насколько я понимаю, поиск изоморфных схем здесь происходит не среди полумодулярных (живых), а среди автономных (которые могут быть и не живыми). Последние для практики малоинтересны, поскольку представляют собой генератор конечной последовательности импульсов (выбег и стоп). Очевидно, что перебор комбинаций только для живых схем будет существенно короче. Кроме того, можно определить такое расширение живых схем размерности n-1 до таковых размерности n, которое отличается только добалением буфера. Смысл в том, что функционально эти схемы одинаковы, поскольку буфер - это модель провода. Т.е. новая n-схема просто не чувствительна к задержке в этом проводе.


  1. borush Автор
    09.12.2025 09:03

    Во-первых не правильно противопоставляться полумодулярные и живые схемы. Схема имеющая устойчивые (тупиковые состояния) может быть вполне полумодулярной, например x=x; y=y.
    Во-вторых поиск изоморфных был осуществлен, как среди всех схем, так и среди таких классов, как полумодулярные и последовательные, что видно из результирующих таблиц (1 и 2).
    В-третьих понятие нечувствительности к задержке в проводе относится только к полумодулярным схемам и означает, что такая задержка не выводит схему из этого класса.
    Более того, еще Маллер показал, что все полумодулярные схемы не чувствительны к задержке в проводе исходящем из выхода элемента до первого разветвления - именно этот фокус и проделал комментатор. Скажем, в синхронной схеме он бы не прошел.

    И, строго говоря, схема с добавленной задержкой не эквивалентна исходной, т.к. имеет в двое больше состояний и может быть для получения этих дополнительных состояний задержку-то и добавили.


    1. Thealik
      09.12.2025 09:03

      Хорошо бы дать строгие определения что такое рассматриваемое множество схем, что такое подмножество тупиковых схем и т.д. Например, счётчик, который досчитав до четырёх, выдаёт какую-то заданную последовательность и останавливается (сначала цикл, потом хвост) это тупиковая схема?


    1. Thealik
      09.12.2025 09:03

      Кстати, электрически, 0(1)-схема - это вовсе не схема, а набор независимых схем. Что справедливо и в общем случае, булевы уравнения в системе могут и не подставляться одно в другое. Таким образом, интересно было бы отделить множественное число от единственного. Когда схема под номером таким-то это действительно одна схема, а не набор схем? К этому же вопросу примыкает вопрос буферов. Очевидно, что схему размерности n-1 можно доопределить до n введя набор буферов, замкнутых на себя. Это один способ. Второй - рассмотреть множество проводов и вставить буферы туда.


      1. borush Автор
        09.12.2025 09:03

        Это справедливое замечание, но я ограничился подсчетом схем (различных систем уравнений) не исследуя их структуру. Такая попытка исследования была предпринята в серии статей "Последовательные схемы" опубликованных в Песочнице Хабра. Меня больше интересовали статистические характеристики схем, а именно размеры множеств изоморфных к которым они принадлежат. То, что среди перечисляемых схем много "мусора" очевидно, но, как пошутил один математик, - это на Земле это мусор, а может на Альфе Центавра Ab лучшие умы пытаются создать что-то подобное, но не смогут пока не прочитают обсуждаемый материал.


  1. borush Автор
    09.12.2025 09:03

    Рассматриваются все возможные схемы поведение которых можно задать системой логических уравнений, как в известной комментатору Алгебре асинхронных логических схем.

    Тупиковые схемы не определяются, определяются тупиковые состояния, т.е. такие, в которых выходы всех элементов устойчивы. Например, генератор из трех, соединенных в кольцо, инверторов можно доопределить так, что состояния 000 и 111 будут устойчивы и схема станет последовательной для всех состояний, хотя, конечно, и усложнится.


    1. Thealik
      09.12.2025 09:03

      Это частный (и демонстративный случай) того, о чём говорилось в моём комментарии к предыдущей Вашей статье с медицинским названием "ПМС". А именно - если пометить тупиковые состояния иксами (don't care), то схема станет (гораздо) проще. Такие тупиковые состояния Вы раньше называли устойчивыми. В данном случае под словом тупик я имею ввиду последнее состояние в котором схема останавливается навсегда. Ключевое слово - навсегда, до сброса.


  1. borush Автор
    09.12.2025 09:03

    Естественно из тупикового (сиречь устойчивого) состояния схема сама не выйдет. Можно ли устойчивые состояния переопределять произвольно с целью минимизации схемы,- вопрос ее(схемы) применения и в данной статье не рассматривается, но как бы эти состояния не определить, полученная схема все равно будет описана системой логических уравнений, а значит и посчитана, если число n элементов не слишком велико.


    1. Thealik
      09.12.2025 09:03

      У Вас в той же статье ПМС используется тот же термин из теории сложности, что и для метода Квайна-МакКласки. Причём тут это? Притом, что сложность минимизации системы не полностью определённых булевых фуннкций (сильно разреженной таблицы истинности) - это, наверняка, не степенная функция. Можно спросить про такую минимизацию у искусственного интеллекта (и быть готовым к тому, что ответ будет поверхностным).


      1. borush Автор
        09.12.2025 09:03

        Теория сложности применяется к оценке разных алгоритмов и то, что комментатор знает о ее оценке метода Квайна-МакКласки, свидетельствует о его высокой образованности. Но так совпало, что и алгоритм пересчета схем о котором толкуют мои статьи обладает высокой сложностью. Такова природа вещей и не надо обвинять в этом автора.