Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursovoy_VT-1.docx
Скачиваний:
9
Добавлен:
13.09.2019
Размер:
559.67 Кб
Скачать

1.4 Совершенная дизъюнктивная нормальная форма (сднф)

Докажем, что всякую логическую функцию от N аргументов можно выразить через операции &, , ~ и константы 0 и 1. По ходу доказательства покажем, по какому именно алгоритму это делается.

Пусть нам дана эта функция f(x1, x2, x3,...,xN) в виде таблицы истинности:

x1

x2

x3

...

xN

f(x1, x2, x3,...,xN)

A1,1

A2,1

A3,1

...

AN,1

F1

A1,2

A2,2

A3,2

...

AN,2

F2

...

...

...

...

...

...

A1,j

A2,j

A3,j

...

AN,j

Fj

...

...

...

...

...

...

A1,M

A2,M

A3,M

...

AN,M

FM

Таблица 14

В таблице Ai,j - константы 0 или 1, определяющие значения аргументов; Fj - константы 0 или 1, определяющие значения функции для данной комбинации аргументов; M = 2N - количество всех возможных комбинаций.

Определим функции от 1 аргумента:

Si,j(xi) = xi, если Ai,j = 1; Si,j(xi) = ~xi, если Ai,j = 0;

Тогда исходная функция может быть представлена в виде:

(S1,1(x1) & S2,1(x2) & S3,1(x3) & ... & SN,1(xN) & F1) (S1,2(x1) & S2,2(x2) & S3,2(x3) & ... & SN,2(xN) & F2) (S1,3(x1) & S2,3(x2) & S3,3(x3) & ... & SN,3(xN) & F3) ...             (*) (S1,M(x1) & S2,M(x2) & S3,M(x3) & ... & SN,M(xN) & FM) = = f(x1, x2, x3,...,xN)

Как видите, она выражена только через функции , ~ и &. Каждая строка в нашем правиле (*) соответствует строке таблицы.

Осталось доказать, что левая часть (*) действительно равна исходной функции. Возьмем произвольную n-ю строку таблицы. Убедимся, что значение функции Fn действительно равно значению левой части (*) когда значения аргументов равны значениям, указанным в этой строке: xi = Ai,n для i = 1, 2, 3,..., N.

Si,n(xi) = xi = Ai,n = 1, если Ai,n = 1; Si,n(xi) = ~xi = ~Ai,n = ~0 = 1, если Ai,n = 0.

То есть, для выбранного n и для любого i верно:

Si,n(xi) = 1    (1).

Берем в (*) n-ю строку, подставляем в нее (1) и применяем закон поглощения x & 1 = x:

S1,n(x1) & S2,n(x2) & S3,n(x3) & ... & SN,n(xN) & Fn = Fn & 1 & 1 & 1 ... & 1 = Fn

Теперь берем в (*) любую другую строку, кроме n-й. Пусть она имеет номер m. Поскольку все строки таблицы содержат разные наборы Ai,j, то хотя бы в одном столбце будет различие. Пусть различие содержится в k-м столбце:

Ak,n ≠ Ak,m

Отсюда:

Sk,m(xk) = xk = Ak,m = 0, если Ak,n = 1; Sk,m(xk) = ~xk = ~Ak,m = ~1 = 0, если Ak,n = 0.

То есть, для выбранных k и m верно:

Sk,m(xk) = 0    (2).

Берем в (*) m-ю строку, подставляем в нее (2) и применяем законы поглощения x & 0 = 0 и 0 & x = 0:

S1,m(x1) & S2,m(x2) & ... & Sk,m(xk) & ... & SN,m(xN) & Fm = = S1,m(x1) & S2,m(x2) & ... & 0 & ... & SN,m(xN) & Fm = = ... & 0 & ... & Fm = 0

Таким образом, значение всех строк СДНФ, кроме n-й равно 0 за счет нуля, который дает хотя бы одно различие в наборах аргументов. И лишь n-я строка равна Fn.

В результате получаем:

(0) (0) ... (0) (Fn) (0) ... (0) = = f(x1, x2, x3,...,xN)

И по законам поглощения x 0 = x и 0 x = x получаем:

0 0 ... 0 (Fn) 0 ... 0 = Fn = f(x1, x2, x3,...,xN)

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

В формуле (*) строки, в которых Fj = 0 можно опустить, благодаря законам поглощения: x & 0 = 0, x 0 = x и 0 x = x. А в строках, в которых Fj = 1 можно опустить Fj, благодаря закону поглощения: x & 1 = x.

После этих сокращений получается запись, которая и называется совершенной дизъюнктивной нормальной формой (СДНФ).

Пример составления СДНФ.

Составим СДНФ для функции, которая приводилась ранее в качестве примера.

x

y

z

f(x, y, z)

0

0

0

0

0

0

1

0

0

1

0

0

0

1

1

1

1

0

0

1

1

0

1

0

1

1

0

1

1

1

1

0

Таблица 15

Составляем СДНФ таким образом: для каждой строки с единицей в крайнем правом столбце образуем скобки и объединяем их операцией . В каждую скобку вставляем последовательность из простых элементов, объединенных операцией &: для ячейки таблицы, где проставлена 1, пишем переменную-аргумент, а для каждой ячейки, где проставлен 0, пишем переменную-аргумент со знаком ~ перед ним:

f(x,y,z) = (~x & y & z) (x & ~y & ~z) (x & y & ~z)

СДНФ можно упрощать и далее, для чего существуют разные методы, в том числе метод под названием "карты Карно", построенный на наглядных зрительных образах. Все эти методы основаны -на правилах упрощения:

(a & b & c) (a & ~b & c) = a & c (a & b) (a & ~b) = a (b & c) (~b & c) = c

То есть, если в СДНФ обнаруживаются две скобки, которые отличаются только знаком ~ перед одним из элементов, их можно заменить на одну скобку, в котором этого элемента нет. Например, полученную выше формулу можно упростить по этому правилу, объединив две последние скобки в одну:

f(x,y,z) = (~x & y & z) (x & ~z)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]