В первой части этой серии мы описали проблему математических бланков, и перспективные результаты её решения. Вторая часть показала, что эта проблема упирается в вопрос экземпляров. Он, в свою очередь, может быть решён в рамках модели идеального мира, который должен обладать памятью.
Чтобы подступиться к теме памяти идеального мира, нам нужно с максимальной подробностью разобраться, что такое вообще память, какая она бывает, какие функции выполняет, какими характеристиками обладает, привести подтверждающие примеры.
Исследование низшей математики - это 90% ожидания, 9% отчаяния, и только 1% озарения. Здесь, опустив 99%, можно сразу узнать результат. И в результате, памятью окажется то, что гораздо старше и математики, и самой человеческой истории. И оно всё это время перед глазами. Вот уж точно, хочешь спрятать, прячь на самом виду. Хотите узнать, что это? Не переключайтесь.
Часть 1: введение в проблему
Часть 2: философия
К читателям
Низкий поклон вам, люди, обсуждающие эту серию заметок. Своими комментариями вы даёте бесценную обратную связь, на основании которой можно улучшить тот или иной аспект изложения. Спасибо тем, кто следил за первыми двумя статьями, которые лишь умножали вопросы. В третьей статье пора дать на них ответы.
Вы хороший рассказчик, и мне по прежнему интересно, чем все закончится
Вот вот. Мне кажется, что сейчас идёт замах. Интересно, какой и куда будет удар
Первоначальный план был в постепенном развёртывании рассказа. Но оказывается, аудитория нашла в материале драматизм. Чтобы соответствовать этому новому явлению, пересмотрел план изложения. Статью сделал длиннее, но "тоньше". Мы пройдём с минимальной нагрузкой, кратчайшим путём по всем пунктам нашей стратегии: не только найдём память и время идеального мира, но и создадим там первые объекты и покажем, что они эквивалентны "традиционным" математическим объектам. Потом всё будет по аналогии.
Жду продолжения... Чтобы покритиковать) Пока не ухватить крепко ни за что)))
Излагаемый материал не был придуман. Это результат наблюдений.
И вот так ... вы постулировали ... единицу, единственность, порядок и счёт.
В действительности, нет. Первый человек мог, по желанию, нарисовать на стене пещеры одного оленя, а может двух, то есть уже стадо. При этом он ничего не постулировал. Это означает, что вам не требуются знания о счёте, чтобы нарисовать несколько символов.
Вы же ещё употребляете слово "построение", но даже в общих чертах не описали, что это такое (не говоря уже о строгом определении)
Способность человека писать текст, создавая предложения из слов, сама по себе избавляет от необходимости давать построению формальное определение немедленно: она входит в базовую логику
Ещё раз: определены будут ВСЕ понятия, которые необходимы и задействованы для рассуждений в области математики. Но не одним куском: в противном случае получится один большой референс-мануал.
Под нуль системой вы подразумеваете максимально вырожденный объект? Настолько не имеющий никаких свойств что по факту не существует?
"Максимально вырожденный" - да. "Не существует" - нет. Существование - это вполне понятная вещь. Чтобы объект существовал, надо, чтобы он был исчерпывающе определён, и не содержал противоречий. Нуль-система отвечает обоим требованиям, поэтому она существует. Хотя само понятие противоречия нам ещё предстоит разобрать и определить, нуль-система, как пустой объект, не содержит ничего, что могло бы образовать противоречие.
Ваша идея в том что бы разобрать математические понятия до атомарных блоков (пока опустим что они из себя представляют) и пересобрать из них эти понятия заново с целью того что бы понять как это вообще происходит, выявить закономерность, так?
Задача разборки ЛЮБОГО объекта заведомо нерешаемая. Разбор объекта - это ВСЕГДА погружение в неизвестность. Неизвестность нельзя взять и отменить. Никак не устранить сомнение, а вдруг ты её не до конца разобрал? Она же что? именно: неизвестность. И совсем другое дело, выполнимая задача - построить конечное и небольшое количество объектов и показать, что из них можно сделать дальше.
Ну и где продолжение?!
Приношу извинения в связи с задержкой третьей части по независящим от автора обстоятельствам.
Микро предисловие
В этой статье мы опишем несколько важных объектов. Подход - дать каждому из них исчерпывающее описание в одной статье сразу - не работает, как показал опыт. Поэтому будем постепенно дополнять сказанное, начав с самого важного и определяющего, и добавляя подробностей и деталей в дальнейших статьях. Критиков прошу учесть этот факт.
Другая особенность материала - это ссылки вперёд. Некоторые вещи относятся к категории интуитивно понятных, что позволяет нам до какого-то момента отложить их формальное определение. Мы будем активно пользоваться этой возможностью. Например, когда мы даём определение сложности, мы используем понятие числа, хотя его строгое определение будет дано в более поздних статьях.
Впрочем, это всё равно больше, чем предлагает традиционная математика. Так, Математическая энциклопедия вовсе не даёт определение таких вещей, как например, равенство или истина, определение которых будет предъявлено в рамках нейроматематики.
Энциклопедия памяти
Разберём термины и понятия, так или иначе связанные с памятью.
ОСНОВНЫЕ ПОНЯТИЯ
Есть термины, которые применимы к любой памяти. Термин ХРАНЕНИЕ является синонимом понятия памяти как таковой. Признаком хранения является возможность так или иначе получить (ЧТЕНИЕ) то, что хранится в памяти (ОБЪЕКТ). Хранению предшествует помещение объекта в память (ЗАПИСЬ). Эти термины характерно определяют абсолютно любую память.
Исследуя аналогичные вопросы, Алан Тьюринг не счёл нужным формализовать указанные понятия, и тем не менее, его машина (МТ) признана математиками. Также и мы получаем, по прецеденту, возможность продолжать рассуждения, оставив формализацию этих понятий на потом.
МУЛЬТИПАМЯТЬ
Некоторые виды памяти, например, триггер, способны хранить один-единственный объект. Другие (RAM, нейросеть) предназначены для хранения множественных экземпляров. В реальной жизни мы сталкиваемся с обоими типами памяти, и так же будет в этой работе. У мультипамяти всегда имеется некоторое многообразие МЕСТ, куда может быть помещён запоминаемый объект: нейроны, ячейки, и т.п..
АДРЕС
Как правило, у мультипамяти место может быть сопоставлено с некоторым показателем, называемым АДРЕСОМ. Иными словами, адрес - ответ на вопрос "ГДЕ?". В рамках данной работы, этот ответ будем называть ИНФОРМАЦИЕЙ. То есть информация, это всегда какое-то значение какого-то адреса в какой-то памяти.
ЛОКАЛЬНОСТЬ
Под локальностью мы понимаем возможность сопоставить конкретный сложный объект с одним конкретным адресом в памяти. Лента/RAM - да, нейросеть - нет.
БОГАТСТВО
Коль скоро объект располагается в некотором месте памяти, это место в некоторых случаях может быть изменено, т.е. объект может быть перемещён. Количество принципиальных способов переместить объект в памяти будем называть её БОГАТСТВОМ. Лента/RAM - один, т.е. объекты могут быть сдвинуты вправо/влево, нейросеть - ноль, т.к. перемещение объекта в нейросети не определено.
БЕСКОНЕЧНОСТЬ
Физически существующие устройства памяти, естественно, являются конечными, но в математике это не так: лента бесконечна. По понятным причинам, память идеального мира также должна быть бесконечна.
НЕПРЕРЫВНОСТЬ
Многие распространённые виды памяти имеют дискретную природу - лента,
ИТОГ
Изложенное можно свести в таблицу:
# |
Лента |
Нейросеть |
Объекты |
Числа |
? |
Мультипамять |
Да |
Да |
Адрес |
Да |
Да |
Локальность |
Да |
Нет |
Богатство |
1 |
0 |
Бесконечность |
Да |
Нет |
Непрерывность |
Нет |
Нет |
Итак, мы подобрали все понятия, важные для рассуждений о памяти. Из таблицы видно, что ни лента, ни, в ещё большей степени, нейросеть не пригодны в качестве памяти идеального мира. До того, как мы сможем её найти, остался буквально один шаг.
Коллектор
Два экземпляра, которые мы записали в предыдущей статье, ещё не образуют новый объект.
Это видно и по коду, который создаёт экземпляры:
empty x_1 = new();
empty x_2 = new();
Чтобы, наконец, создать наш первый объект из этих экземпляров, определим новое имя КОЛЛЕКТОР, и его структуру выразим в коде вот так:
collector
{
empty x_1 = new();
empty x_2 = new();
}
Теперь мы можем создать экземпляр коллектора:
collector x_0 = new();
На картинке эта структура будет выражена вот так:
Так должен выглядеть первый сложный объект, сконструированный из экземпляров . Других исходных материалов у нас пока нет, поэтому коллектор состоит из трёх пустых элементов (примитивов). Порядок конструирования коллектора следующий: сначала создаётся , затем одновременно и . Первый примитив коллектора (и любого сложного объекта) называется его БАЗИСОМ, примитивы и его ПОЛЮСАМИ.
Итого код и рисунок. По какой-то причине, именно рисунок изначально воспринимался как нечто крайне важное. Он годами присутствовал на доске, пока шли многочисленные попытки конструировать что-то ещё более сложное. Кое-что удавалось, но вопрос "что такое память" всё ещё не был решён. Однако, упорство и труд в конце концов вознаграждаются. И однажды, глядя на рисунок на доске, вы вдруг понимаете:
Эврика! Доска - это и есть память
Разумеется, речь идёт об абстрактной доске. Доска на стене - это материальная проекция идеальной доски, бесконечной и непрерывной. Быстрый взгляд на доску позволяет внести её в таблицу памяти, и убедиться, насколько она хороша в этой роли.
# |
Лента |
Нейросеть |
Доска |
Объекты |
Числа |
? |
Графические символы |
Мультипамять |
Да |
Да |
Да |
Адрес |
Да |
Да |
Да |
Локальность |
Да |
Нет |
Да |
Богатство |
1 |
0 |
2 |
Бесконечность |
Да |
Нет |
Да |
Непрерывность |
Нет |
Нет |
Да |
Прежде чем мы продолжим, два важных замечания.
Первое: используя доску как память, мы не делаем ничего принципиально нового по сравнению с лентой машины Тьюринга. Мы добавили дополнительное измерение и убрали ограничение дискретности, но в целом, прецедент использования некого протяжённого объекта в качестве памяти уже создан Тьюрингом.
Второе: рассматривая доску, мы ограничиваемся только теми её аспектами, которые были понятны ещё доисторическим людям - место, направления и ориентации, передвинуть и повернуть, точка, линия. Мы можем сделать такой вывод, глядя на наскальные рисунки.
Переходим теперь к символам. В математике есть понятие символов, но они рассматриваются в отрыве от своего начертания. О двух символах в математике можно сказать только то, различны они или нет [1, с.12]. Именно в таком смысле символы фигурируют в машине Тьюринга. Символы же на доске являются графическими фигурами, и несут в себе значительно больше смысла.
Доска обладает богатством 2, т.к. имеет два способа переместить изображение - сдвиг и поворот. Замечательный факт: поворот добавляется за счёт второго измерения, но добавление ещё одного измерения (плоскость -> пространство) не добавляет богатства, т.к. в пространстве те же два вида перемещения, что и на плоскости.
А теперь то, что мы получаем бонусом. Рассмотрение доски как памяти позволяет сделать вывод о том, что временем идеального мира должен выступать очевидный второй компонент письма в дополнение к доске - маркер (обобщённое средство написания). Доску и маркер совместно будем называть МАТЕМАТИЧЕСКАЯ РЕАЛЬНОСТЬ.
Структура доски
СИНТАКСИС
Для описания доски в программной нотации нам потребуется оригинальный синтаксис. В рамках этого синтаксиса, информацию (значение адреса) будем обозначать символом @
. При описании структуры объекта, фигурные скобки обозначают неупорядоченные элементы, квадратные скобки - упорядоченные элементы.
Несмотря на то, что этот синтаксис хорош при описании структуры доски, маркера (и вообще алгоритмов), а также нескольких простых объектов, его возможности ограничены и уступают в выразительности графическим диаграммам ФОРАОН. В следующей статье мы столкнёмся как раз с таким случаем. Это объясняется тем, что программный синтаксис - линейный, он не задействует измерения, присутствующие на доске.
ОПРЕДЕЛЕНИЕ ДОСКИ
Итак, наше программное определение доски будет содержать следующие понятия:
board
{
@location;
direction { @positive; @negative; }
orientation { @primary; @secondary; }
shift;
rotatation;
}
В соответствии с ним, в структуру доски входят:
-
место или точка (
@location
) -
направления (
direction
) - положительное (@positive
) и отрицательное (@negative
) -
ориентации (
orientation
) - первичная (@primary
) и вторичная (@secondary
) -
сдвиг (
shift
) -
поворот (
rotation
)
Схематично указанные элементы доски изображены на рисунке. Символы и означают первичную и вторичную ориентации (горизонтальную и вертикальную, соответственно), а плюс и минус это синонимы положительного (вправо/вверх/против часовой) и отрицательного (наоборот) направлений (выбор ориентаций и направлений произвольный).
Прямые стрелочки выражают сдвиг, изогнутые - вращение. Преобразования на доске будем обозначать (буквы греческие): вращение (), сдвиг (). Для них также введём собирательный термин ДВИЖЕНИЕ (). Если известно направление движения, будем приписывать его верхним индексом к обозначению: , . Для сдвига также можно приписать нижний индекс ориентации: , , если она известна.
Примем, что если ориентация поворота не рассматривается, по умолчанию его величина равна , если задана - то величина равна .
Коллектор (продолжение)
Теперь, когда память найдена, можно "узаконить" нашу графическую нотацию. Это означает, что графическое изображение становится полностью легальным способом определения структурного и информационного наполнения объекта.
В этой нотации можно закончить определение коллектора, как на следующем рисунке:
Полюсы коллектора и располагаются в положительном и отрицательном направлении от его базиса . Сами эти направления изображены двумя линиями между примитивами. Эти же линии также являются эквивалентом скобок в коде коллектора, обозначая целостность объекта. В формулах будем обозначать коллектор как .
С учётом графической нотации, программный код коллектора дополним адресами:
collector
{
empty x_1 = new() @positive;
empty x_2 = new() @negative;
}
Если коллектор создаётся, как указано выше collector x_0 = new();
, то в графической нотации его можно изображать по горизонтали или по вертикали, эти изображения будут эквивалентны. Можно также рассмотреть и более подробное описание:
collector x_3 = new() @primary;
collector x_4 = new() @secondary;
В этом случае, когда ориентация коллекторов рассматривается, графическая нотация выразит их с двойной линией, показывающей ориентацию:
Маркер
Прежде чем разбирать маркер, необходимо сказать несколько слов о ВРЕМЕНИ как таковом. Время относится к непосредственным понятиям, которые для понимания должны быть показаны. По счастью, сам
Как сказано выше, идею маркера как времени мы получили бонусом к идее доски. Вместе с тем, маркер как средство совершения ДЕЙСТВИЙ не является чем-то принципиально новым по сравнению с головкой машины Тьюринга. Фактически, маркер это аналог головки: активное устройство, выполняющее действия.
При отыскании структуры маркера необходимо учитывать тот факт, что он находится в идеальном мире, где нет рук, которые бы им двигали. Следовательно, маркер должен обладать всем необходимым для самостоятельного совершения действий.
Говоря об элементарных действиях, перечислим их:
-
чтение
-
изменение
-
запись или удаление
Представим гипотетический сценарий, когда мы хотим записать идеальным маркером на доске какой-то символ. Поскольку маркер выполняет всё сам, ему надо передать информацию о символе. Прочтя её из источника, маркер может произвести запись на доске (приёмнике) самостоятельно. Т.к. мы хотим, чтобы маркер умел преобразовывать данные, место для такого преобразования - между чтением и записью.
Указанная последовательность описана в этом коде:
marker
{
x; // данные
f; // преобразование
read;
write;
invoke(previous, next) // действие маркера
[
x = read(previous);
x = f(x);
write(next, x);
]
}
Этот код отражает описанный сценарий и достаточно понятен. Действие маркера, обозначенное как invoke
, имеет аргументы previous
и next
, которые называются КОММУТАТОРАМИ маркера. В качестве коммутаторов могут выступать любые объекты, включая другие маркеры (об этом позже). То же самое относится и к преобразованию f
.
Самое простое из возможных преобразований - естественно, сама нуль-система . Если f
пустая, то такое преобразование не вносит никаких изменений: .
Нейроматематика (начало)
Нейроматематика начинается с нескольких вещей, что интуитивно понятны каждому, но тем не менее, никак формально не определены в традиционной математике (буквально, отсутствуют в математической энциклопедии [2]). Более того, эти вещи не только интуитивно понятны, но и повсеместно используются в рассуждениях, являясь мощнейшим инструментом
ВАЖНО: определения даются в рамках нейроматематики, которая пишется с чистого листа.
ИЗМЕРЕНИЕ ОБЪЕКТОВ
Вещи могут быть более или менее сложны. Но что это значит? Космическая ракета много сложнее, чем велосипед, но даже миллиард велосипедов не сложнее ракеты, хотя много тяжелее её. "Больше/меньше" в отношении сложности означает, что сложность - это число. Но как её померить? В рамках традиционной математики, это сделать невозможно, потому что нет исчерпывающей структуры любых объектов. Что сложнее - или ?
Спойлер
Они равны по сложности - как будет показано в следующих статьях
Для нейроматематики, где структура всего задаётся явно, это становится возможным. Итак, СЛОЖНОСТЬЮ будем называть рекурсивно посчитанное количество уникальных имён во внутренней структуре . Сложность нуль-системы , очевидно , т.к. в определении empty { }
нет никаких внутренних имён. Сложность же коллектора , поскольку в его структуру входит единственное имя empty
. Когда мы в следующей статье создадим более сложные объекты, мы сможем проиллюстрировать данное определение более подробно. В целом, сложность показывает, сколько надо разных понятий, чтобы сконструировать тот или иной объект.
Если определена сложность, то автоматом получаем определение простоты. Число будем называть ПРОСТОТОЙ . Что, в общем-то, логично: чем больше сложность, тем меньше простота, и сходятся они в точке .
Вернёмся к миллиарду велосипедов. Чтобы отразить их огромность, введём понятие ОБЪЁМА. Объём аналогичен сложности, только вместо количества уникальных имён берём их общее число. Отсюда , . Понятие объёма соответствует т.н. колмогоровской сложности в традиционной математике.
По аналогии с простотой, введём противоположную к объёму характеристику: АСКЕТИЧНОСТЬ .
РАЗЛИЧИЕ
А и Б похожи, а вот А и К, наоборот, отличаются. Подобная фразеология может встретиться в рассуждениях на абсолютно любую тему. Сходство и различие - одни из самых интуитивно понятных вещей, но в нейроматематике им надо дать формальное определение. Начнём с различия.
Если и - произвольные объекты, то РАЗЛИЧИЕ между ними - это функция двух аргументов, на выходе которой простейший алгоритм такой, что . То есть различие возвращает простейший объект, преобразующий в . Чем более непохожи и , тем более сложным будет преобразование.
Приведём несколько примеров. Пусть будет различие между и . Чтобы сделать из примитива (нуль-системы) коллектор, к нему надо приписать и . Итого . Другой пример (знак числа верхним индексом): , поскольку простейший способ сделать из единицы двойку - прибавить к ней единицу.
ИСТИНА И РАВЕНСТВО (ОПРЕДЕЛЕНИЕ)
Истина и равенство - широко используются в математике, при этом строгого определения этих понятий нет, нет даже статьи в математической энциклопедии. Что не мешает всем математикам их использовать: предполагается, что любой человек понимает их одинаково. Однако нейроматематика значительно более доскональна. А также она располагает всеми средствами, чтобы в своих рамках эти определения дать.
Пусть рассматривается (записан в память) некоторый объект . Пусть есть некоторый алгоритм (a.k.a. высказывание) , на выход которого подана память. После исполнения его результат записывается в память как . Если различие , т.е. простейшее преобразование между ними, пусто, то высказывание будет называться ИСТИНОЙ, а сами объекты и будем называть РАВНЫМИ. В противном случае называется ЛОЖЬЮ.
Приведём пример. Пусть это некоторый коллектор, записанный, как было выше:
Пусть есть высказывание справа, которое, исходя из сказанного выше, порождает такой же коллектор, но с противоположными полюсами, обозначенный как . К сожалению, преобразование между и не пусто, т.к. надо повернуть, чтобы получить . По этой причине, не истинно, т.е. ложно. Соответственно, . А вот слева порождает такой, что , поэтому истинно и .
ПРОТИВОПОЛОЖНОСТЬ (ОПРЕДЕЛЕНИЕ)
Мы полагаем естественным, что истина и ложь противоположны друг другу. Но какой у этого смысл? ПРОТИВОПОЛОЖНОСТЬ означает, что:
-
есть всего два объекта с нужными свойствами: и (противоположная пара)
-
есть всего одно преобразование , изменяющее и
-
свойства таковы:
Проверим, что истина и ложь действительно противоположны.
-
есть всего два истинностных объекта: истина и ложь
-
есть всего одно преобразование истинности: отрицание
-
свойства отрицания:
Проверим, что направления на доске действительно противоположны.
-
есть всего два направления: положительное и отрицательное
-
есть всего одно преобразование направлений: поворот
-
свойства поворота:
Проверим, что ориентации на доске действительно противоположны.
-
есть всего два ориентации: первичная и вторичная
-
есть всего одно преобразование ориентаций: поворот
-
свойства поворота:
Отметим важное свойство противоположности. Объекты противоположной пары обладают связкой друг с другом, так что определив , автоматом получаем через приставку "не": истина - это которая не ложь, а плюс - это тот, который не минус. Кроме этого, сама противоположность не может быть определена только через или , но имеет смысл только в связи с противоположной парой.
ИСТИННОСТЬ И ПРОТИВОПОЛОЖНОСТЬ (СТРУКТУРА)
ИСТИННОСТЬ будем использовать как собирательный термин для истины и лжи.
Рассмотрев значения истинности, можно увидеть, что они атомарны: ни , ни не содержат внутри себя другие элементы. Иными словами, с точностью до структуры, они эквивалентны . Поскольку структура идентична, различия между , с одной стороны, и /, с другой, должны быть информационными.
У нас уже задан объект, в структуру которого укладывается . Этот объект - коллектор, который аналогично имеет противоположную пару (полюса). Различием между и или является направление или , соответственно. Таким образом, по структуре и информации истинность эквивалентны полюсам коллектора: , .
В отличие от значений истинности, которых два, противоположность только одна, и она задана для некоторой противоположной пары. По данным свойствам, противоположность эквивалентна базису коллектора: .
Наконец, отрицание. Как было показано выше, отрицание обладает для истинности ровно теми же свойствами, что поворот - для полюсов контракта. По этой причине, мы можем записать: . Однако надо отметить, что структура самого поворота ещё не введена, т.к. пока не определены все нужные объекты - это будет сделано в дальнейших статьях.
Итоги
Во второй статье была описана стратегия:
-
Предложить модель идеального мира.
-
В рамках этой модели, построить с нуля нужные объекты.
-
Показать эквивалентность этих объектов объектам "обычной" математики.
-
Показать преимущества и новые возможности этого подхода.
Как было запланировано выше, мы выполнили эти шаги:
-
Предложили модель памяти и времени идеального мира (доска и маркер).
-
Сконструировали с нуля, внутри этой модели, объекты (примитив и коллектор).
-
Показали эквивалентность частей коллектора истинностным значениям и противоположности, показав структуру последних.
-
Показали преимущества подхода, предъявив определения объектов, строго не заданных в традиционной математике - истина и равенство.
В дальнейшей работе будет повторяться этот паттерн:
-
Конструирование новых объектов с использованием введённых ранее.
-
Эквивалентность этих конструкций объектам математики.
-
Формализация важных терминов, ранее не определённых строго.
С каждой итерацией, количество строго определённых объектов будет расти, постепенно формируя основу, чтобы формализовать всё, что нам понадобится.
Итого, в рамках нейроматематики появляется возможность дать строгие определения многим понятиям, которые в обычной математике трактуются интуитивно понятными и не имеют определения. Предъявление этих определений ничего не ломает, т.к. они не противоречат уже используемому интуитивному пониманию. Однако, как будет показано позднее, эти и другие определения дают большие возможности как для развития математики, так и для для создания ИИ нового поколения.
ФОРАОН: продолжение
Описав доску и маркер, мы легализовали графическую нотацию ФОРАОН, и задали первые два объекта - примитив и коллектор. В четвёртой статье мы опишем остальные объекты, задающиеся графической нотацией - которых совсем немного, а именно четыре. Вместе с уже заданными, этих объектов, в общем, достаточно, чтобы сделать всё остальное. Не переключайтесь!
Литература
[1] Герасимов А.С. Курс математической логики и теории вычислимости. С-Пб. 2011.
[2] Математическая энциклопедия в 5 томах. Москва. 1982.
Автор: ramayasket