Борис Цирлин
Продолжается рассмотрение класса дистрибутивных схем - подкласса схем, не зависящих от скорости, начатое в ч.1. Этот подкласс является промежуточным между параллельно-последовательным, рассмотренным в упомянутой статье и полумодулярными схемами которым посвящена статья "Полумодулярные схемы"
Все эти подклассы были описаны в книге "Автоматное управление асинхронными процессами в ЭВМ и дискретных системах, вышедшей под редакцией В.И.Варшавского в 1986 г. из которой и здесь заимствуются их формальные определения. Подсчитано количество дистрибутивных схем, состоящих из двух и трех элементов. Определены и подсчитаны неизоморфные схемы этого подкласса.
Введение
Объектом рассмотрения являются дистрибутивные схемы, подкласс схем, независящих от скорости, определенных Д. Маллером. Этот подкласс включает в себя параллельно-последовательные схемы, обсужденные в ч.1. В свою очередь, дистрибутивные являются подклассом полумодулярных схем, рассмотренных в упомянутой выше статье.
По-прежнему ограничимся только автономными схемами, т.е. не имеющими внешних входов и выходов, т.к. для полумодулярных это ограничение обходится (по известной теореме Малера) размыканием провода, соединяющего выход любого элемента схемы со входами остальных ее элементов.
Как и раньше схемы описываются системами из n логических уравнений, задающих поведение каждого из n ее элементов. Для элемента в каждом из G = 2n состояний схемы определено понятие "возбуждения" - когда значение его выхода не соответствует значению определяющей его логической функции. Задание схемы и определение ее свойств (принадлежность тому или иному классу) осуществляется с помощью "вектора возбуждений", т.е. последовательности Q из G чисел, где каждая компонента Q[i] вектора возбуждение может иметь одно из G возможных значений (0=<Q[i]<G) соответствующих номерам элементов с возбуждёнными выходами, или их суммам, если возбуждений несколько. Как и раньше, будем обозначать номера элементов схемы степенями двойки - от 1=2**0, до 2**(n-1), а нулем - отсутствие возбуждения в данном состоянии. Число таких векторов может быть
N = G**G = (2**n)**(2**n),
что и определяет количество различных схем из n элементов.
Для применения уже опробованных методы подсчета схем, для подкласса дистрибутивных надо определить локальные признаки нарушения этого свойства, которые можно формализовать используя компоненты Q[i] вектора возбуждения схемы.
Признак принадлежности схемы классу дистрибутивных
Для упрощения словесной формулы принадлежности схемы к тому или иному подклассу введем некоторые определения.
Возбужденный выход элемента может стать устойчивым двумя способами: либо изменив значение выхода через время, определяемое его физической задержкой, либо за счет изменения входного набора его логической функции при котором ее значение придет в соответствие с не изменившимся выходом элемента.
Состояние, которое возникает в результате второго варианта, называется конфликтным.
В полумодулярных схемах в каждом состоянии возбужденный выход может стать устойчивым при переходе схемы в другие состояния только за счет изменения своего значения, т.е. в ней не содержаться конфликтные состояния.
Состояние схемы называется соседним для данного, если схема в него переходит путем изменения значения выходов одного элемента, из возбужденных в данном.
Состояние схемы называется детонантным, если для него найдется пара соседних состояний таких, что в них возбужден элемент, не возбужденный в данном.
Полумодулярная схема является дистрибутивной если она не содержит детонантных состояний.
Обратим внимание на следующее обстоятельство. Для образования детонантного состояния в схеме должно быть минимум три элемента: два (возбужденных в данном состоянии) для перехода в соседние и третий (устойчивый в данном состоянии), возбуждение которого в соседних и является причиной детонантности данного. Отсюда следует, что при n = 2 все полумодулярные схемы являются и дистрибутивными - не хватает элементов для получения детонантных состояний. Напомним, что аналогичная ситуация имеет место для n = 1, когда все схемы являются последовательными. Таким образом для n = 2 получаем (без специальных расчетов):
Nd = Npm = 98
Формализация признаков дистрибутивности схем
Будем считать, что проверяемая схема полумодулярна, т. к. проверка этого свойства может быть проведена предварительно в соответствии ранее описанной методикой.
Осталось рассмотреть признаки дистрибутивности (точнее, нарушения последней) для n = 3, т. к. на n = 4, в силу вычислительной сложности задачи, даже не замахиваемся.
С точки зрения детонантности состояние i потенциально опасно если:
Q[i] = 3 = 1 + 2,
Q[i] = 5 = 1 + 4,
Q[i] = 6 = 2 + 4.
Для первого случая соседние состояния j определяются как j = i^1 или j = i^2.
Очевидно первое из них может породит детонантность, если кроме элемента номер 2 (возбужденного в силу полумодулярности проверяемой схемы), возбужден элемент 4, (устойчивый в состоянии i),т.е. Q[j] == 6, то "половина" детонантности уже заработана и есть повод проверить второе соседнее с i-м состояние. Для него опасно Q[j] == 5, которое (если это случится) и подтвердит детонантность состояния i.
Аналогично проверяются и случаи Q[i] равного 5 или 6.
Весь алгоритм проверки на детонантность, оформленный в виде функции Питона, имеющей
булевское выходное значение, приведен на листинге 1.

Также оформлен ранее описанный алгоритм проверки схемы на полумодулярность, который здесь не приводится.
Программа подсчета числа дистрибутивных схем для n = 3, выродившаяся за счет использования этих функций в несколько строк приведена на листинге 2.

В результате ее работы получено:
Nd = 110624
Заключение
Полученные результаты, в совокупности с данными из предыдущих статей на эту тему, сведены в таблицу 1.

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

borush Автор
26.12.2025 15:20Вот наконец-то вопрос, свидетельствующий о понимании сути. Действительно, если схема задана на всех возможных состояниях, то выбор начального состояния - прихоть пользователя. Хотя если диаграмма имеет тупиковые состояния, то их выбор в качестве начального не может показаться неоправданным. Но возвращаясь к смыслу статей - они посвящены подсчету схем того или иного класса, а не их семантике, которая-то и определяет выбор начального состояния.

Thealik
26.12.2025 15:20Вы привели пример неоживляемых схем, поэтому уточню вопрос. Может ли неудачный выбор начальных состояний перевести схему из класса полумодулярных в класс дистрибутивных?

borush Автор
26.12.2025 15:20В статьях оговорено, что указанные свойства (полумодулярнойсть, дистрибутивность, etc) проверяется для всех 2^n состояний схемы, поэтому, какое состояние не назови начальным, схема свой класс не поменяет. Кроме того в вашем вопрос закралась неточность - дистрибутивные схемы полумодулярны по определению - имеет место иерархия вложенности классов.

Thealik
26.12.2025 15:20Тогда напрашивается не сужение класса схем (от полумодулярных к дистрибутивным, а затем к последовательным), а наобот - композиция последовательных в дистрибутивные и их обоих в полумодулярные. Для заданного n на первом этапе и с повышением n на втором.

borush Автор
26.12.2025 15:20Еще раз напомню, что в статье рассматривается не синтез или композиция схем из логических элементов, а пересчет все существующих схем содержащих ровно n таких элементов. Этот процесс детализирован для схем различных классов, которые приняты в этой области знаний, а не придуманы автором.

Thealik
26.12.2025 15:20Пересчёт подразумевает, что на вход анализатора поступают схемы от первой до последней (с астрономическим номером при n>3). Насколько я понял, поступают они последовательно. Здесь напрашивается конвейер. Возможно, JIT-компилятор Numba и сделает подобие конвейера, но это будет жалкое подобие. Нужно изначально писать под конвейер. Но это требует досконального знания архитектуры процессора. А в случае, если будет принято правильное решение, - то архитектуры GPU. Можно, конечно, написать на Verilog, но для этого нужно иметь отладочную плату с мощной FPGA. Насколько мне известно, бесплатного online доступа к таким платам нет, в отличии от GPU.
Что же касается композиции и декомпозиции, то в качестве легкого утреннего упражнения можно взять n=2 и синтезировать из последовательных схем дистрибутивные или наоборот разложить каждую дистрибутивную на последовательные. Благо, инструмент для этого у Вас (да и у всего прогрессивного человечества) уже есть, называется "Алгебра асинхронных схем". Она изложена в той Книге 1986, на которую Вы ссылаесь.

borush Автор
26.12.2025 15:20Вы демонстрируете недюжинные познания в программировании - я даже использованные вами термины не понимаю, но для n=3 поставленная задача на домашнем компьютере решается за несколько секунд, без сложных приемов, а при n=4 и предложенные вами ухищрения, думаю, бесполезны. Хотя никому не возбраняется попробовать. Что касается предлагаемой вами композиции, то в статьях "Последовательные схемы" из песочницы этот прием уже использован и проиллюстрирован. Ничего, кроме понимания устройства конкретных схем он не дает и для расчётов бесполезен. В обсуждаемых же статьях, автора интересовал только подсчет схем и поставленная задача, признайте, решена.
И маленькое замечание - Алгебра асинхронных схем тоже оперирует со схемами одной размерности, т. ч. ваш совет выдает ваше незнание предмета вашего суждения.

Thealik
26.12.2025 15:20На уровне философии Ваш подход страдает тем же недостатком, что и асимпотические оценки в дискретной математике, только наоборот. В том смысле, что математики любят устремить n к бесконечности и показать, что в таком то базисе (например 2И-НЕ плюс 2ИЛИ-НЕ) такая-то схема (например n-разрядный сумматор) имеет такую-то сложность, которая меньше предыдущей. Инженера интересует n в диапазоне от 4 до 1024. Вы фактически устремили n не к бесконечности, а к нулю и получили такой же бесполезный результат. Именно эта задача была поставлена и поэтому признаю - она решена. Композицию в статье "Последовательные схемы" я не видел, поэтому повторю вопрос - можно ли взять несколько последовательных схем одной размерности, выполнить их композицию и получить дистрибутивную схему той же размерности?

borush Автор
26.12.2025 15:20В статье Последовательные схемы ч.3 рассматривается схемы для n=2, как композиция двух схем n=1. В Алгебре асинхронных схем рассматриваются операции объединения и пересечения, которые условно можно считать композиционными, но они не гарантируют что результат будет обладать заданными свойствами (дистрибутивность, например). Да и для поставленной задачи подсчета схем это (в смысле, композиция) бесполезно.
Thealik
Ни в одной статье цикла ничего не сказано про начальные условия, это специально? Или для схем, заданных на всех 2^n состояниях, начальные условия могут быть произвольными?