12 лет назад 5 октября 2006 в 12:29 298

Имя Чарльза Лутвайджа Доджсона (Charles Lutwidge Dodgson) известно немногим. Гораздо большей известностью пользуется его литературный псевдоним, который он выбрал себе в двадцатичетырехлетнем возрасте по просьбе редактора одного журнала, решившего опубликовать его первое произведение. Склонный к игре словами Доджсон взял свое имя (Charles Lutwidge), “перевел” его на латынь, получив Carolus Ludovicus, а затем поменял местами слова и придал им английское звучание. Так на свет божий появился Льюис Кэрролл. И вряд ли сегодня найдется хоть один образованный человек, который не знает самое известное произведение Кэрролла – “Алиса в стране чудес”.

“Алису в стране чудес” без всяких натяжек можно считать культурным явлением мирового масштаба. Ведь количество подражателей и почитателей этой книжки, наверное, превосходит количество поклонников любого написанного человеком текста. Но, к сожалению, “Алисе в стране чудес”, например, в нашей стране не очень повезло. Вернее, не то чтобы не повезло книге. “Алису” в России читают и любят не меньше, чем в остальном мире; у нее есть даже ненавистники, что, согласитесь, не про каждую всемирно известную книгу можно сказать. Проблема заключается в том, что переводили ее на русский с английского филологи и поэты, а книга написана математиком и логиком.

В связи с этим прискорбным обстоятельством ряд логических построений Кэрролла был принесен в жертву художественной красоте, из-за чего в русском переводе “Алиса” превратилась в очень красивую, обворожительную сказку (а вот если читать “Алису” в серии “литпамятников” с комментариями переводчика по полстраницы, то есть шанс ничего не упустить – прим. ред.). В принципе, таковой по форме она является и в английском варианте. Однако некоторые людей, которые читали и русские литературные переводы, и английский “исходник”, утверждают, что оригинальный английский вариант значительно хуже. Более того, возникла даже целая теория, что Кэрролл был попросту наркоманом, написавшим “все эти бредни” под влиянием вызывающих галлюцинации грибов…

Тут следует сделать небольшое пояснение, потому что, видимо, назревает один вопрос: “А какое, собственно, отношение имеют к истории вычислительной техники фантазии Кэрролла?” Как ни странно, ответов на этот простой вопрос можно дать три:

1) Кэрролл не имеет к истории вычислительной техники никакого отношения;

2) он имеет к истории ВТ самое непосредственное отношение; 3) он одновременно и имеет и не имеет отношение к истории ВТ. Только не подумайте, что я, прежде чем сесть за написание данной статьи, подкрепился сушеными мухоморами (обычной заправкой перед боем древних викингов). Ответьте лучше на один простой вопрос: а что такое компьютер? Уверен, что далеко не каждый так вот с ходу запросто может дать определение, отражающее главные свойства компьютера, тем более что собственно и само название сбивает с толку. В самом деле, и русское вышедшее из употребления название “электронно-вычислительная машина”, и английское “компьютер”, которое, собственно, переводится на русский точно так же – “вычислитель”, – говорят о первоначальном главном предназначении этих устройств – решать математические задачи. 

И далеко не каждый знает, как именно компьютер выполняет расчеты. А все расчеты, которые выполняет компьютер, в конечном итоге базируются всего на одной операции – сложении. Компьютерное вычитание – это сложение уменьшаемого с дополнительным кодом вычитаемого. Компьютерное умножение – это более сложная операция в виде циклического сложения первого множителя с самим собой, “сдвигаемым влево” на каждом шаге цикла, согласно битовой маске второго множителя. Наконец, деление – это циклическая комбинация умножений и вычитаний, то есть, в конечном итоге, все тех же сложений. А степени, корни и прочее – это более сложные операции, базирующиеся на умножении, делении и т. д. Короче, все дороги ведут в Рим, а все компьютерные математические операции апеллируют к сложению. 

Как же компьютер выполняет сложение? А как сложение выполняем мы? Да очень просто! У нас в запасе есть несколько с первого класса навек вбитых в наше запоминающее устройство аксиом: 3 + 2 = 5, 1 + 3 = 4, 7 + 2 = 9 и т. д. Разбудите любого человека среди ночи и спросите у него: “Сколько будет 4 + 5?” Спустя пару секунд, которые потребуются вашему подопытному, чтобы выдать в эфир не относящиеся к делу наводящие вопросы типа: “А? Что? Чего? Уже семь?”, вы, скорее всего, получите правильный ответ (если не получите по “тыкве”).

При этом испытуемый не будет мысленно представлять четыре предмета, к которым он добавит еще пять предметов и пересчитает по пальцам полученное множество; ответ всплывет в его голове сам собой. И даже если он вам его из принципа не скажет, посоветовав обратиться к психиатру, будьте уверены – в его-то мозгу правильный ответ возникнет.
Так вот, компьютер, а вернее арифметико-логическое устройство (АЛУ) его центрального процессора, также “знает” несколько аксиом, на которых и держится вся эта хитрая штука с трехмерными играми, стереозвуком, видеопроигрывателями и прочим. Вот эти аксиомы: 0 + 0 = = 0; 0 + 1 = 1; 1 + 0 = 1; 1 + 1 = 0.

Бьюсь об заклад, что последняя “алушная” аксиома вас несколько озадачила. По вашим прикидкам она должна бы выглядеть вот так: 1 + 1 = 2. Но это аксиома из вашего мира – мира десятичных чисел, а современные компьютеры оперируют всего двумя числами – 0 и 1. И это довольно неудобно, что и демонстрирует пример с четвертой аксиомой компьютерного сложения. Когда АЛУ процессора выполняет побитовое сложение разрядов двух чисел, то в случае если в обоих разрядах стоят единицы, схемы АЛУ устанавливают соответствующий разряд итогового числа в ноль (четвертая аксиома) и вырабатывают сигнал переноса разряда, который будет учитываться при сложении следующих двух битов. Получается, что при побитовом сложении схемы АЛУ всякий раз (кроме сложения самых младших разрядов) складывают не два, а три бита (третий – это возможная единица переноса, образовавшаяся при сложении предыдущего разряда). А ведь сложение – это, как было уже сказано выше, самая массовая математическая операция.

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

Современные компьютеры – это логические машины. Большая часть операций, которые выполняются в них, – не математические, а логические. Да, собственно, и четыре аксиомы АЛУ – это не математика, а логика (эти операции, кстати, называются “исключающее ИЛИ” – XOR). В самом деле, эти аксиомы логически расписываются следующим образом: “если первый бит равен 0, а второй равен 1, то в ответе – 1” и т. п. Это булева логика, введенная в 1847 году английским математиком Джорджем Булем (см. статью “Паро-вычислительная машина Бэббиджа”, Upgrade # 1 (91)). Булева логика – двоичная, она очень и очень подходит двоичным машинам, но для троичных машин и логика должна быть троичной. А где ее взять? И вот тут мы снова возвращаемся к автору “Алисы в стране чудес”. 

В 25 лет Чарльз Лутвайдж Доджсон (Льюис Кэрролл) получил степень магистра математики, все его наиболее значимые работы (известные в основном специалистам) были посвящены математической логике и разработке силлогистики – науки, основателем которой считается Аристотель. В своей работе “Символическая логика” Кэрролл рассмотрел вопросы классификации объектов и их признаков, а также ввел бинарные и троичные диаграммы, позволяющие формализовать любые суждения. Строго говоря, Льюис Кэрролл в середине XIX века (как раз тогда, когда Дж. Буль опубликовал свою работу “Математический анализ логики”) разработал теорию построения логических автоматов, хотя ни о каких автоматах он и не задумывался. В своей работе Кэрролл предложил специальные диаграммы для представления в простой форме (квадраты, разбитые на клетки, и фишки черного и белого цвета) различных логических суждений. 

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

Но литературный талант сыграл с ним злую шутку. “Алиса в стране чудес” покорила весь цивилизованный мир… но лишь как забавная, искрометная, полная странных каламбуров сказка. Не зная его научных работ, “Алису” можно воспринимать только как совершенно алогичную книгу – увы, открытия Кэрролла в области логики остались в основном незамеченными. Сегодня ни в одном учебнике по логике (классической или математической) не упоминается ни имя Льюиса Кэрролла, ни его работа “Символическая логика”. 

Итак, как же ответить на вопрос о том, имеет ли отношение к истории вычислительной техники автор “Алисы в стране чудес”? Если бы все дело закончилось простым забвением его математических работ, то, видимо, ответ должен быть отрицательным. Но все дело в том, что его “Символическая логика” повлияла на русского инженера и изобретателя Н. П. Брусенцова, который в конце 50-х годов прошлого века сконструировал в МГУ и запустил в серию единственную в мире ЭВМ с троичной архитектурой. У Брусенцова даже есть работа, которая называется “Диаграммы Льюиса Кэрролла и аристотелева силлогистика”. О Николае Петровиче Брусенцове и его уникальной машине мы и поговорим в следующий раз.

Построение конвейера троичных команд

 
Процессоры старого типа не начинали выполнение новой команды, пока не выполнена предыдущая. Но уже начиная с процессора Intel 80386, для повышения эффективности вычислений в его архитектуру был добавлен новый блок – так называемый конвейер команд.

Суть его работы в том, что, пока одна команда выбирается из памяти, вторая дешифруется, третья загружается в АЛУ, четвертая выполняется и т. д. Проблема в командах условного перехода, поскольку заранее сложно предположить, какой следующей будет команда – та, которая расположена в памяти сразу после команды условного перехода, или та, на которую предполагается переход в случае истинности условия.

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

 

Импликация

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

(Кстати, часть импликаций, которые вполне употребимы в английском языке, в русском просто не приживаются. Вот и пример касаемо сложности перевода не только с английского языка на русский, но и наоборот – прим. ред.)

Все современное программирование строится на импликативных структурах, фундамент которых составляют логические конструкции, построенные на основе алгебры логики Буля.

Булева логика и ее использование в импликациях вполне подходит, когда речь идет о каких-то простых условиях, например, в выражении “если X = 2, то Y = 3”. В данном случае существует всего два возможных состояния – либо X равен 3, либо не равен. 

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

1) либо левая чашка опустится ниже правой; 2) либо правая опустится ниже левой; 3) либо чашки весов уравновесятся. Реализация алгоритма, учитывающая эту ситуацию путем импликаций с булевыми выражениями, сложнее, чем алгоритм, реализованный средствами троичной логики.

Дмитрий Румянцев

Никто не прокомментировал материал. Есть мысли?