Научная статья на тему 'Булевы кубики'

Булевы кубики Текст научной статьи по специальности «Математика»

CC BY
70
59
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Очков Валерий Федорович

Статья посвящена логическим операциям. Хорошо известные переменные True False автор дополняет переменной "неопределенно" и знакомит читателя с положениями теории "нечетких множеств" и теории "нечеткой логики". Название статьи связано с трехмерными иллюстрациями (в кубике), которыми сопровождается изложение материала.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Булевы кубики»

> ТЕХНОЛОГИЧЕСКОЕ

ОБРАЗОВАНИЕ

Очков Валерий Федорович

БУЛЕВЫ КУБИКИ

Есть переменные, которые могут принимать только два значения: 1 - 0, Да - Нет, True - False. Эти переменные выступают в качестве аргументов функции, возвращающей также только два значения [1]. Поговорим об этих переменных и функциях, но не в традиционном стиле классической математики, а отталкиваясь от проблем, возникающих при работе в средах тех или иных языков программирования, да и вообще, при использовании цифровой вычислительной техники, в основе которой лежит двоичный «атом» - элементарный элемент памяти, находящийся в одном из двух состояний (заряжено -разряжено, намагничено - размагничено и т.д.). Из «атомов» (биты) составляются «молекулы» (байты), которые, в свою очередь, формируют новые «соединения» - переменные, массивы переменных - все то, чем оперируют программисты.

ФУНКЦИИ ОДНОГО АРГУМЕНТА

Таких функций четыре (/ - /4 - см. таблицу 1), но на практике работают только с одной - с /1, которую называют отрицанием (инверсией).

ФУНКЦИИ ДВУХ АРГУМЕНТОВ

Таких функций уже шестнадцать -см. таблицу 2.

Таблица 2 делится на две половинки - на «именную» (/ -/) и безымянную

a fi f2 f3 f4

0 1 0 1 0

1 0 1 1 0

Обозна- 0a a 1 0

чение Not(a) !a a

Таблица 1. Двоичные функции одного двоичного аргумента

a b fi f2 f3 f4 f5 f6 f7 f8 f9 f10 fll f12 fl3 f14 f15 f16

0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0

0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0

1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0 1 0

1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 1 1 0

A V « © ® ® i I > < 0a 0b a b 1 0

* + = 3 3 0And 0Or

е и X Или <>

н е ч Or = >< Imp Imp

а н И I | Eqv Xor > <

з о б О And & && min max !=

Таблица 2. Двоичные функции двух двоичны1х аргументов

(f9 -/16). Вот имена первых восьми функций:

• /1 - конъюнкция (логическое умножение)

• /2 - дизъюнкция (логическое сложение)

• /3 - равнозначность (эквивалентность, тождественность)

• /4 - неравнозначность (неэквивалентность, разделительная дизъюнкция, сумма по модулю 2)

• /5 и /6 - импликация (/ - импликация от а к b; /6 - импликация от b к а, логическое следование)

• /7 - функция (стрелка) Пирса (функция Вебба, функция Даггера, антидизъюнкция)

• /8 - функция (штрих) Шеффера (антиконъюнкция)

Остальные восемь функций таблицы 2 (/ -/16, как, впрочем, и три последние функции таблицы 1) не имеют ни имен, ни практического применения. Это либо константы (/15 и /16), либо функции только одного аргумента (/11 -/14). Имя, да и то условно, можно дать только функциям /9 и /10 - инверсия импликации.

СЕМЬ КОММЕНТАРИЕВ

К ТАБЛИЦАМ 1 И 2

1. В таблице 1 и таблице 2 собраны имена функций и символы операторов по всем двадцати позициям (4+16). Для этого пришлось несколько схитрить - «притянуть» в круг двоичных функций операторы, прямо для этого не предназначенные: «>» (больше) и «<» (меньше), например. Эти операторы, хоть и возвращают двоичный результат, но предназначены для работы с вещественными, а не с двоичными операндами. Этой особенности (ее можно назвать «заглавной» особенностью статьи) мы еще коснемся в пункте 7.

2. В таблице 1 и таблице 2 автор попытался собрать все имена функций и символы операторов, использующихся для реализации двоичной арифметики. Список получился, конечно, неполный. Читатель может расширить его примерами из других языков программирования (Pascal, Fortran и др.) и математических программ (Maple, MatLab, Mathematica и др.).

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

• язык BASIC: Not, And, Or, Xor и Imp

• язык C: !, &, &&, !=, || и = =

• среда Mathcad: -, л, v и ©

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

Но деление двоичных функций и операторов на основные (базисные) и вспомогательные появилось задолго до компьютеров и «узаконилось» в виде двоичных алгебр (в скобках отмечен их базис):

• алгебра логики (-, &, v, ® и «)

• булева алгебра (-, & и v)

• алгебра Жегалкина (&, v и ©)

• алгебра Пирса

• алгебра Шеффера (|)

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

На рисунке 1 показан Mathcad-до-кумент, где с опорой на функцию Пирса (еще говорят - стрелка Пирса: построены другие двоичные функции: одна

двоичная функция

Рисунок 1. Построение двоичныи функций с опорой на функцию Пирса

(отрицание, инверсия - Not) и пять двоичных функций двух аргументов: And, Or, Imp, штрих Шеффера и Eqv. Последние три функции (Imp, штрих Шеффера и Eqv) определены с использованием ранее определенных функций. Это сделано для большей компактности рисунка, но от механизма вложения пользовательских функций (Imp(a, b) := Or(Not(a), b, например) можно отказаться и оперировать «для чистоты эксперимента» только функцией (штрихом) Пирса. Двоичные функции часто иллюстрируют электрической цепью: последовательное соединение выключателей - это конъюнкция, а параллельное -дизъюнкция. На рисунке 1 показан менее тривиальный пример - электрический аналог эквиваленции: схема соединения двух выключателей, так чтобы свет независимо зажигался и тушился из двух мест.

ялаойригеасш светил,..

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

4. Можно отметить недостаточность набора математических инструментов, отображенных в таблице 1 и таблице 2 (Если объединить пункты 3 и 4 наших комментариев, то их можно поместить под одним заглавием «Избыточная недостаточность» [2]). Возьмем, например, самую «популярную» функцию двоичной алгебры конъюнкцию. Ее столбец в таблице истинности (а так называют таблицу 1 и таблицу 2). по идее должен быть такой:

a b a And b (/1)

0 - 0

0 - 0

1 0 0

11 1

Таблица 3. Уточненная конъюнкция

Прочерк на месте нуля означает то, что если первый (а) аргумент равен нулю,

то незачем проверять, чему равен второй аргумент (b), и наоборот. Так и поступают, строя некоторые языки программирования - C, например. При программировании в среде языка BASIC условный переход по конъюнкции можно записать так: If a And b Then... (1-й способ) но лучше так: If a Then If b Then... или If b Then If a Then... (2-й способ) Второй способ записи позволяет не только ускорять расчеты, но и избегать некоторых ошибок - логическое выражение b может иметь смысл, если на альтернативный вопрос a дан положительный ответ. Вот типичный пример такой «программистской» ситуации:

If i > 0 Then If V(i) > V(i-1) Then... Можно сказать, что в языке BASIC есть две конъюнкции: And и Then If.

Если учитывать то, что в статье рассматривается не какая-то конкретная алгебра двоичных чисел (булева, Пирса, Шеффера и т.д.), а перечисляются возможные двоичные функции двоичных аргументов, то следует признать, что даже одноместных функций должно быть не четыре (см. таблицу 1), а... бесконечное множество. Запрограммированная двоичная функция может, например, возвращать единицу с вероятностью 70%, если ее аргумент равен нулю, и с вероятностью 30%, если аргумент равен 1. В остальных случаях она возвращает нуль.

5. В таблице 1 и таблице 2 мы собрали двоичные функции одного (таблица 1) и двух (таблица 2) аргументов. Но, возвращаясь к конъюнкции, можно сказать, что эта функция имеет не два, а... полтора аргумента - см. таблицу 3.

Такую же нецелочисленность (вещественность!!) или непостоянство числа

аргументов можно отметить и по другим двоичным функциям.

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

7. Если говорить не о классической двоичной алгебре, а о реальной практике программирования, то следует признать, что переменные, фигурирующие в таблице 1 и таблице 2, могут принимать не два (0 или 1), а три значения: 0, 1 и неопределенно. Эту особенность мы уже зафиксировали в таблице 3 и в таблице 4, где, вместо конкретных значений аргументов (0-1), стоит прочерк. В языках программирования есть инструменты обработки

a b a Or b (f2)

0 0 0

0 1 1

1 - 1

1 - 1

a b a (fn) 0a (f13) a b b (fn) 0b (fu)

0 - 0 1 - 0 1 0

0 - 0 1 - 1 1 1

1 - 1 0 - 0 0 0

1 - 1 0 - 1 0 1

a b 1 (/15) 0 (/16)

-- 1 0

- - 1 0

-- 1 0

- - 1 0

Таблица 4. Двоичные функции полутора, одного и нуля аргументов

таких «прочерков» в таблицах истинности. Если аргумент двоичной функции не определен, то расчет может либо прерываться сообщением об ошибке, либо идти по третьему пути.

Аргументы двоичных функций могут принимать не два и не три, а... бесконечное множество вещественных значений. Это множество делится на две существенно неравные части: на нуль и на ненуль (—.0, если говорить языком таблицы 1 - это числа, отличные от нуля, которые двоичными функциями воспринимаются как единицы). Бывает и так, что двоичная функция возвращает не только нули и единицы. Вот, например, как работает функция Or в одной из реализаций языка BASIC:

a b a Or b

0 0 0

0 0 0 1

0 0 0 1

0 0 0 0 2

Таблица 5. «Дизъюнктивная конъюнкция»

Можно допустить и такую работу расширенного оператора Ог:

a b a Or b

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

0 0 0

0 0 0 1

0 0 0 2

0 0 0 0 3

Таблица 6. Расширенная конъюнкция (дизъюнкция)

Э&а... «ка&егоригНос&А»... ß

Одно дело, когда первый аргумент (операнд) не равен нулю, а другое - когда второй, и третье - когда оба одновременно.

Подытоживая разбор таблицы 1 и таблицы 2, можно сказать, что описываемые двоичные функции в реальных компьютерных реализациях могут иметь недвоичные аргументы и возвращать опять же недвоичны1е результаты. Но особого недвоичного смысла в этом нет. Просто по технологическим причинам вещественные переменные в описываемых реализациях языков программирования (BASIC, Mathcad и др.) «по совместительству» выполняют роль двоичных (булевых, логических). При этом двоичные (булевы, логические) функции воспринимают свои вещественны1е аргументы1 «двоично»: нуль есть нуль («Нет», «False»), а все остальное единица («Да», «True»).

Эта, можно сказать, «категоричность» описываемых встроенных функций вступает в противоречие с положениями теории нечетких множеств (fuzzy sets) и теории нечеткой логики (fuzzy logic -[3, 4]). Необходимо, например, статистически обрабатывать на компьютере не только «черно-белые» (двоичные) ответы анкетируемых типа «Да (1)» - «Нет (0)», но и «цветные» (вещественные) ответы: «Да (1)», «Скорее да, чем нет (0.75, например)», «Ни да, ни нет (0.5)», «Скорее нет, чем да (0.25, например)» и «Нет (0)». Если говорить не о статистике, а об электротехнике и вернуться к электрическим цепям, которыми иллюстрируют работу двоичных функций (см. нижнюю часть рисунка 1), то можно упомянуть тот факт, что сейчас в быту получают распространение выключатели, плавно меняющие накал памп от 100% до нуля. Еще раньше, такие устройства стали применять в театрах и кинозалах. Медики уверяют, что плавный переход от света к темноте через полумрак не портит зрение.

Можно привести еще множество примеров, толкающих к тому, что аргументами функций, перечисленных в таблице 1 и таблице 2, могут и должны быть

не только двоичные, но и вещественные числа, плавно меняющиеся от нуля до единицы. И возвращать функции, перечисленные в таблице 1 и таблице 2, должны вещественные значения, опять же плавно меняющиеся от нуля до единицы. Вот как, например, можно задать «плавную» функцию отрицания:

Not(a) := 1-а

«Плавная» конъюнкция и «плавная» дизъюнкция получаются сами собой, если вспомнить о том, что одно из обозначений конъюнкции - это min (см. столбец f1 в таблице 2), а одно из обозначений дизъюнкции - это max (см. столбец f2 в таблице 2).

AND(a b) := min(a, b) OR(a, b) := min(a, b)

Несложно задать и другие «плавные» двоичные функции: EQV(a,b):=1-la-bl XOR(a, b):=1-EQV(a,b) Для иллюстрации функций двух переменных требуются уже не линии, а поверхности. На рисунке 2 показаны, если так можно выразиться, заглавные «буле-

вы кубики» - поверхности «плавных» двоичных функций (AND, OR, EQV, XOR), которые при двоичных аргументах полностью повторяют работу своих традиционных «четких» аналогов (And, Or, Eqv, Xor), но при вещественных аргументах возвращают также вещественные значения, плавно меняющиеся от 0 до 1.

Если вращать кубики, показанные на рисунке 2, то можно увидеть все 16 функций из таблицы 2:

• Вращаем кубик AND вокруг вертикальной оси - получаем функции /7, /9 и /10 (три единицы внизу, а одна наверху)

• Вращаем кубик OR вокруг вертикальной оси - получаем функции /5, /6 и /8 (три единицы наверху, а одна внизу)

• Вращаем кубик функции /14 вокруг вертикальной оси - получаем функции /11, /12 и /13 (две единицы внизу, а две наверху)

• Переворачиваем вверх дном кубик функции /16 (четыре единицы внизу) -получаем функцию /15 (четыре единицы наверху).

ФУНКЦИИ МНОГИХ АРГУМЕНТОВ

На рисунке 3 показано формирование в среде Mathcad «плавной» функции трех аргументов, возвращающей решение жюри присяжных, которые могут выдавать уже не «черно-белые» ответы (виновен - невиновен), а... «цветные»: виновен на 30%, невиновен на 70%, например. В электрическом аналоге машинки для голосования выключатели заменены на реостаты.

Рисунок 2. Булевы кубики

Функция Решение, показанная на рисунке 3, при двоичных аргументах возвращает двоичный ответ, а при вещественных - вещественный, естественно. На рисунке 3 показан соответствующий «булев кубик» при а=0.3 - мы видим гибрид конъюнкции с дизъюнкцией: мнение одного члена жюри переводит вердикт из области ОЯ в область АКБ.

Рисунок 3. Машинка для нечеткого (мягкого, рейтингового) голосования

Литература.

1. Есипов A.C. Логические основы построения и работы компьютеров. Компьютерные инструменты в образовании. № 1, 2000.

2. Очков В.Ф. Принцип неопределенности программирования. КомпьютерПресс, № 7, 1996 (http://twt.mpei.ac.ru/ochkov/IZBYT.htm).

3. Очков В.Ф. Mathcad и нечеткие множества. КомпьютерПресс, № 1, 1998 (http://twt.mpei.ac.ru/ochkov/F sets.htm)

4. Очков В.Ф. Mathcad и нечеткая логика. КомпьютерПресс, № 8, 1998 (http://twt.mpei.ac.ru/ochkov/F log.htm)

Очков Валерий Федорович, кандидат техн. наук, доцент Московского энергетического института (Технического университета).

НАШИ АВТОРЫ

i Надоели баннеры? Вы всегда можете отключить рекламу.