Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алексеев-Дискретная математика-4

.pdf
Скачиваний:
94
Добавлен:
27.03.2015
Размер:
1.12 Mб
Скачать

1 2, 2 1, 3, … , = = 1 2 ( 2 1) 1( 1 2) 2( 2 1) 3 = 1 2 1 2 3.

Отсюда

1 2 = 1 2, 2 1, 3, … , , где = 1 2 3.

Следовательно, конъюнкция 1 2 является суперпозицией функции , констант и отрицания ( = при = 0 и = при = 1).

Для иллюстрации рассмотрим функцию, представленную полиномом

1, 2, 3, 4 = = 1 1 4 1 4 2 4 3 4 1 2 3 1 2 4 2 3 4 1 2 3 4.

Группируем слагаемые:

1, 2, 3, 4 = = 1 2( 3 4 3 4) 1(1 4) 2 4 3 4 1 4 3 4.

Подставляем 3 = 1, 4 = 0:

1, 2, 1,0 = 1 2 1 1.

Подставляем 2 1 = 2 вместо 2:

1, 2, 1,0 = 1 2 1. Отсюда

1 2 = 1, 2, 1,0 1 = 1, 2, 1,0 .

7.3. Критерий полноты

Теорема 7.6 (теорема Поста, критерий полноты). Множество функций является полной системой тогда и только тогда, когда оно не включено ни в один из классов 0, 1, , , .

Доказательство. Пусть – множество функций. Допустим, что , где

– один из пяти классов. По свойствам замыкания [ ], а так как – замкнутый класс, то = и . Ни один из пяти классов не содержит всех логических функций, значит, 2. Следовательно, [ ] ≠ 2 и множество не является полной системой.

Докажем обратное утверждение. Допустим, множество не является подмножеством ни одного из пяти классов. Тогда в нем имеются такие

функции 1, 2, 3, 4, 5, что 1 0, 2 1, 3 , 4 , 5 (это не обязательно пять разных функций, среди них могут быть и одинаковые).

Рассмотрим

функцию

1. Она не

принадлежит

классу 0,

поэтому

1 0,0, … ,0 = 1.

Далее

рассматриваем два варианта в

зависимости

от

значения 1(1,1, … ,1).

 

 

 

 

 

 

 

а) 1 1,1, … ,1

=

0. Тогда 1 , , … ,

= ,

то есть отрицание получается

отождествлением

всех

переменных

у

функции

1.

По

лемме

о

несамодвойственной функции одна из констант является суперпозицией функций и 4. Пусть это константа . Подставляя ее в отрицание, получим вторую константу, . Имея две константы, отрицание и нелинейную функцию 5, по лемме о нелинейной функции можем получить конъюнкцию. Таким образом, отрицание и конъюнкция являются суперпозициями функций из множества . Но, как известно, множество { , 1 2} является полной системой. По теореме сведения множество – тоже полная система.

б) 1 1,1, … ,1 = 1. Тогда при отождествлении переменных у функции 1 получается константа 1: 1 , , … , = 1. Так как функция 2 не принадлежит классу 1, то 2 1,1, … ,1 = 0. Значит, подставляя 1 вместо каждой переменной в функцию 2, получим константу 0. Имея две константы и немонотонную функцию 3, по лемме о немонотонной функции можем получить отрицание. Далее, как и в случае а) применяем лемму о нелинейной функции, получаем конъюнкцию и на основании теоремы сведения опять приходим к выводу, что множество является полной системой.

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

Примеры.

1. Рассмотрим множество из двух функций { 1 2, 1 2}. Результаты исследования на принадлежность пяти классам выглядят так:

 

0

1

 

 

 

 

 

 

 

 

 

1 2

+

 

 

 

 

 

 

1 2

+

+

 

 

 

 

 

 

Отсюда видно, что это полная система.

2. Рассмотрим функцию

 

.

Нетрудно проверить, что при любом

1

2

 

 

≥ 2 эта функция не принадлежит

ни одному из классов 0, 1, , , .

Следовательно, при любом ≥ 2 множество, состоящее из одной функции1 2 является полной системой.

7.4. Предполные классы и базисы

Пять классов, фигурирующих в теореме Поста, очень не похожи друг на друга (если не считать «близнецов» 0 и 1). Тем не менее есть одно свойство, объединяющее их, из-за которого они и появились в этой теореме.

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

Теорема 7.7. Существует ровно 5 предполных классов: 0, 1, , , .

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

Возьмем класс . Он не является полным, так как = ≠ 2. Возьмем какую-нибудь функцию и рассмотрим множество { }. Если оно не полное, то по теореме Поста оно должно быть подмножеством одного из классов 0, 1, , . Но тогда и будет подмножеством этого класса. А это не

так: 0, так как 1 − 0; 1, так как 0 − 1; , так как 0 − ; , так как 1 2 . Значит, множество { } не является полным для любой функции , следовательно, – предполный

класс.

Докажем, что других предполных классов нет. Допустим, – предполный класс, отличный от 0, 1, , , . По определению предполного класса множество не является полным, значит, по теореме Поста оно включено в один из пяти классов. Допустим для определенности, что (в остальных случаях доказательство точно такое же). Так как , то существует функция , принадлежащая , но не принадлежащая . Но тогда{ } и по теореме Поста множество не является полным, а это противоречит тому, что – предполный класс.

Базисом называется минимальная по включению полная система функций. Иначе говоря, это такая полная система, которая перестает быть полной после удаления из нее любой из функций.

Рассмотрим примеры базисов.

1. Любая полная система, состоящая из одной функции, конечно является базисом. Мы видели, что существует бесконечно много таких базисов: { 1 2 … } при любом ≥ 2.

2. Нам известен также пример базиса, состоящего из двух функций: { , 1 2}. Это действительно базис, так как ни отрицание, ни конъюнкция в одиночку не образуют полных систем (отрицание – линейная функция, конъюнкция – монотонная). Другой пример базиса из двух функций – множество { , 1 2}.

3. Пример базиса, состоящего из трех функций – {1, 1 2, 1 2}. Мы видели, что это полная система. Если удалить из нее 1, то обе оставшиеся функции принадлежат классу 0, значит, не образуют полной системы. Если удалить конъюнкцию, то останутся две линейные функции, а если удалить сумму по модулю 2, то останутся две монотонные функции.

Итак, существуют базисы из разного число функций. Возникает вопрос – как велика может быть мощность базиса?

Теорема 7.8. Каждый базис содержит не более четырех функций.

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

полной системе имеются функции 1 0, 2 1, 3 , 4 , 5 . Множество { 1, 2, 3, 4, 5} само является полной системой. Рассмотрим

функцию 1. Она не принадлежит классу 0, поэтому 1 0,0, … ,0 = 1. Если1 1,1, … ,1 = 1, то 1 – не самодвойственная функция (на противоположных наборах – одинаковые значения). Тогда множество { 1, 2, 3, 5} является

полной системой.

Если же 1 1,1, … ,1

= 0,

то 1

не монотонная, тогда

{ 1, 2, 4, 5} – полная система.

 

 

 

 

 

Примером

базиса

из

четырех

функций

может

служить

множество

(0,1, 1 2,

1 2 3}.

Сведения

о

принадлежности этих

функций

предполным классам показаны в таблице:

 

T0

T1

M

S

L

0

+

+

+

1

+

+

+

1 2

+

+

+

1 2 3

+

+

+

+

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

7.5. Дополнительные сведения

Пост доказал, что существует счетное множество замкнутых классов логических функций и дал их полное описание. Он также доказал, что любой замкнутый класс имеет конечный базис, т.е. минимальное множество функций, замыкание которого совпадает с этим классом (например, множество {0,1, , } является базисом класса монотонных функций, а множество {0, } – базисом класса линейных функций). Подробное изложение теории логических функций содержится в книге

Яблонский С.В., Гаврилов Г.П., Кудрявцев В.Б. Функции алгебры логики и классы Поста.– М.: Наука, 1966.

Обобщением двузначных функций являются -значные функции или функции -значной логики. Это такие функции, у которых каждая переменная и сама функция принимает значения из множества {0,1, … , − 1}. Некоторые свойства множества всех функций -значной логики при≥ 3 существенно отличаются от свойств множества 2. Так, при ≥ 3 в

существует континуальное множество замкнутых классов;

существуют замкнутые классы, имеющие только бесконечные базисы;

существуют замкнутые классы, не имеющие базиса.

Подробное изложение этих и других фактов из -значной логики, а также и теории двузначных функций можно найти в учебнике по дискретной математике

Яблонский С.В. Введение в дискретную математику. — М.: Наука, 1986.

Глава 8. Схемы

8.1. Схемы из функциональных элементов

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

Схема, как и формула, описывает порядок выполнения операций для вычисления значений некоторой функции. Только формула – это строка символов, а схема – графический объект. Схемы составляются из функциональных элементов, вычисляющих некоторые «простейшие» функции и соединяемых по определенным правилам. Мы будем рассматривать схемы, состоящие из функциональных элементов трех типов: конъюнкторов, дизъюнкторов и инверторов. Они вычисляют соответственно конъюнкцию, дизъюнкцию и отрицание. Эти элементы будем изображать на схеме в виде треугольников с вписанными в них обозначениями функций, а также входящими и выходящими стрелками:

&

 

 

Входящие стрелки изображают входы элемента, на входы подаются значения аргументов – нули и единицы. Выходящая стрелка – выход элемента, на выходе появляется значение вычисляемой элементом функции. Например, если на один вход дизъюнктора подать значение 0, а на другой – значение 1, то на выходе будет значение 1, а если на оба входа подать значения 0, то и на выходе будет 0. В схеме у элемента может быть несколько выходящих стрелок, так как результат вычисления может использоваться несколько раз в дальнейших вычислениях.

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

1

&

 

 

 

2

 

 

&

3

 

 

Эта схема вычисляет функцию от переменных 1, 2, 3: сначала вычисляются 1 2 и 3, затем 2 3 и, наконец, 1 2 2 3. Это и есть функция, вычисляемая данной схемой.

Если мы хотим доказывать какие-то утверждения о схемах, то нужно определить понятие схемы как математического объекта. В основу такого определения естественно положить понятие ориентированного графа: вершины графа – это входы схемы и функциональные элементы, а связи между ними – ребра графа. Но если мы хотим, чтобы каждая схема представляла некоторую функцию, некоторые виды графов следует запретить. Рассмотрим, например, такую схему:

x

&

Какую функцию вычисляет эта схема? Если = 1, то какое значение будет на выходе схемы? Если 1, то пройдя через инвертор, она превратится в 0, этот 0 будет подан на второй вход конъюнктора и тогда на выходе должен быть 0. Если же на выходе 0, то после инвертора он превратится в 1 и на выходе должна быть1. Таким образом, если на входе этой схемы 1, то значение на выходе не определено. Невозможно указать функцию, которую вычисляет эта схема. Причина, очевидно, в том, что информация с выхода конъюнктора некоторым образом (через инвертор) поступает на его вход. Это явление называется обратной связью и оно очень распространено и полезно во многих технических и других системах. Но в схемах рассматриваемого типа его необходимо запретить. На языке теории графов мы должны запретить ориентированные циклы.

Ориентированный цикл в ориентированном графе – это такая последовательность вершин 1, 2, … , , что каждая пара ( , +1), = 1,2, … , − 1, и пара ( , 1) является ориентированным ребром. Граф, не имеющий ориентированных циклов, называется ациклическим. Теперь можно дать формальное определение схемы из функциональных элементов.

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

Входные вершины. У входной вершины нет входящих ребер. Каждой входной вершине приписан символ переменной, причем разным входным вершинам – разные символы.

Функциональные вершины. Каждой функциональной вершине приписан один из символов &, ˅, ¬. У вершины, которой приписан символ &, или ˅, имеется точно два входящих ребра, у вершины, которой приписан символ ¬ – точно одно.

Некоторые вершины схемы помечаются как выходные (их может быть несколько, т.е. схема может вычислять одновременно несколько функций).

Для каждой схемы из функциональных элементов можно определить функции, вычисляемые этой схемой. Так как граф схемы ациклический, то его вершины можно пронумеровать так, чтобы для каждого ориентированного ребра номер начальной вершины этого ребра был меньше номера его конечной вершины. Теперь для каждой вершины схемы можно определить функцию, вычисляемую в этой вершине. Если это входная вершина, которой приписана переменная , то в ней вычисляется тождественная функция . Для функциональной вершины вычисляемая в ней функция определяется после того, как определены функции для всех вершин с меньшими номерами. Если этой вершине приписан символ &, а в двух вершинах, из которых ведут ребра в данную вершину, вычисляются функциии , то в этой вершине вычисляется функция & . Аналогично для дизъюнкции и отрицания. Функции, вычисляемые схемой – это функции, вычисляемые в ее выходных вершинах.

По существу, схема дает описание функции как суперпозиции трех функций: конъюнкции, дизъюнкции и отрицания. Так как эти функции образуют полную систему, то для любой булевой функции можно построить вычисляющую ее схему. С таким же успехом можно было за основу схем взять любой другой набор элементов, вычисляющих функции какой-нибудь полной системы. В частности, для любой функции можно построить вычисляющую ее схему, составленную только из элементов, вычисляющих штрих Шеффера.

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

1 2 = 1 2

1 2

= 1 2

1 2 . В схеме будет уже только 4

элемента:

 

 

 

1

&

&

2

Можно доказать, что меньшего числа элементов для этой функции недостаточно. Таким образом, 1 2 = 4.

Наибольшая схемная сложность функции от переменных обозначается через ( ). Определим, например, (1). Имеется четыре функции одной переменной: 0, 1, , . Схема для функции не содержит ни одного функционального элемента:

Схема для отрицания содержит единственный функциональный элемент, а схемы для констант можно построить на основании формул 0 = , 1 =, каждая из них будет содержать два элемента. Таким образом, 1 = 2.

8.2. Построение схем

Мы уже видели, что можно строить схемы, используя в качестве исходного материала формулы. Следует, однако, отметить одно существенное различие между схемами и формулами. В формуле одно и то же выражение может встречаться несколько раз как часть этой формулы («подформула»). В схеме же, вычислив некоторое выражение, можно потом использовать сколько угодно раз, не вычисляя повторно. Рассмотрим, например, формулу 1 21 2 3. В ней 7 операций. Но строя схему, можно вычислить выражение1 2 только один раз и использовать дважды:

1

&

&

 

 

 

2

 

 

 

3

 

 

 

 

 

В схеме только 5 операций. Для функций от многих переменных выигрыш схем перед формулами в числе операций может быть значительным.

Рассмотрим два простейших метода построения схем. 1. Использование нормальных форм.

Если функция задана таблицей, можно построить по ней СДНФ, а по ней – схему. Оценим число элементов в такой схеме для функции от переменных.

Допустим, что СДНФ состоит из слагаемых (т.е. функция принимает значение 1 на наборах).

Отрицание каждой переменной достаточно вычислить один раз. Это потребует инверторов. Для вычисления одной простой конъюнкции необходимо − 1 конъюнкторов. Всего, следовательно, потребуется ( − 1) конъюнкторов. Для того, чтобы сложить все конъюнкции, нужно − 1 дизъюнкторов. Всего получается ( + 1) − 1 элементов. Обозначим через1( ) наибольшее число элементов в схеме, построенной этим способом. Для функции от переменных ≤ 2 . Равенство = 2 достигается только, когда функция – константа 1. Но для константы 1, как мы видели, можно построить схему из двух элементов. Поэтому ее можно исключить из рассмотрения. Для всех остальных функций выполняется неравенство≤ 2 − 1 и мы имеем

1 ≤ 2 − 1.

Аналогично можно строить схему по СКНФ. Число элементов в ней тем больше, чем больше нулей среди значений функции. Поэтому имеет смысл скомбинировать эти два способа – если в таблице функции единиц меньше, чем нулей, то использовать СДНФ, в противном случае – СКНФ. Это позволяет уменьшить сложность схемы в наихудшем случае вдвое по сравнению с приведенной оценкой.

2. Применение теоремы о разложении.

Теорема 8.1 (теорема о разложении функции по переменной). Для любой логической функции ( 1, … , ) справедливо тождество

, …

,

= ( , … ,

, 1) ( , … ,

, 0).

1

−1

 

1

−1

1

−1

 

Утверждение теоремы легко проверяется подстановкой вместо переменнойзначений 0 и 1.

Формула в правой части равенства называется разложением функции по переменной (конечно, функцию можно разложить по любой переменной). Это разложение выражает функцию от переменных через две функции от− 1 переменной и элементарные функции. Его можно использовать для построения схем следующим образом.

Допустим, нужно построить схему для функции ( 1, … , ). Разложим ее по переменной . Каждую из двух получившихся функций от − 1 переменной разложим по переменной −1. Получим четыре функции от− 2 переменных, каждую из которых разложим по −2 и т.д., пока не дойдем до функций одной переменной. Для всех функций одной переменной мы умеем строить схемы. Реализуем эти функции схемами, из них соберем схемы для функций от двух переменных в соответствии с теоремой о разложении, затем для функций от трех переменных и т.д., пока не дойдем до исходной функции. На последнем шаге происходит следующее. Мы уже построили схемы для функций ( 1, … , −1, 1) и ( 1, … , −1, 0).