![Математическая красота с точки зрения Midjourney Математическая красота с точки зрения Midjourney](https://habrastorage.org/getpro/habr/upload_files/122/279/a24/122279a24417f17d92d2b68fe54dc4bf.png)
Довольно часто на просторах интернета можно встретить выражение "Красота - в глазах смотрящего". Действительно ли красота субъективна, или все же в ней есть нечто объективное и общее для всех? Возможно ли, что абсолютно не похожие на нас инопланетные существа с другого конца Вселенной, с которыми нам даже ни разу не суждено встретиться за всё время существования наших цивилизаций, видят красоту в том же, в чем видим её и мы?
В начале 90-х годов XX века немецкий информатик Юрген Шмидхубер представил невероятно красивую и математически строгую теорию математической красоты. Согласно этой теории людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью. Эта величина, также известна как колмогоровская сложность, названа так в честь впервые описавшего её советского математика Андрея Колмогорова.
Алгоритмическая сложность строки данных - это наименьшее возможное описание, необходимое для воспроизведения этой строки. К примеру у следующей строки высокая алгоритмическая сложность, так как самое короткое её описание - это она сама:
4c1j5b2p0cv4w1x8rx2y39umgw5q85s7uraqbjfdppa0q7nieieqe9noc4cvafzf
А вот у следующей строки низкая алгоритмическая сложность, так как её можно коротко описать как "повтор ab 32 раза":
abababababababababababababababababababababababababababababababab
Очевидно, что для точного численного определения алгоритмической сложности нужно определиться с формальным языком, на котором записываются строки. Для этой цели отлично подходит любой язык программирования. Например, на JavaScript вышеупомянутые строки могут быть записаны в следующем виде:
'4c1j5b2p0cv4w1x8rx2y39umgw5q85s7uraqbjfdppa0q7nieieqe9noc4cvafzf'
'ab'.repeat(32)
В таком случае на JavaScript алгоритмическая сложность первой строки равна 66 (64 символам и 2 кавычкам), а сложность второй равна 15. Шмидхубер считает, что второе выражение кажется нам более красивым, потому что, порождая равную по количеству бит строку данных, оно задается выражением с гораздо более низкой алгоритмической сложностью.
Основную мысль теории математической красоты можно кратко выразить как:
Красота - это сложность, порожденная простотой
Из этого постулата очевидным образом следует, что самые красивые вещи во Вселенной должны обладать бесконечной сложностью и порожденными невероятной простотой.
Всё из нуля
Во времена рассвета греческой цивилизации в южной Италии в небольшом городке под названием Кротона, философ и математик Пифагор основал свою знаменитую школу. В пифагорейской школе обучение геометрии было неразрывно связано с мистической трактовкой её фигур, аксиом и теорем. Наибольшим почетом среди пифагорейцев пользовалась монада - символ окружности, обведенной вокруг ярко выделенной центральной точки.
![Монада Пифагора Монада Пифагора](https://habrastorage.org/getpro/habr/upload_files/8fc/63b/fff/8fc63bfffbb520d19b442a73c8ec0425.png)
Монада считалась божественным знаком - символом единства в самом своем сердце всего сущего и происхождения мира из пустоты. Вольно трактуя воззрения пифагорейцев, можно сказать, что в самом начале мира не было ничего - был полный ноль. Но раз ничего нет, то нет и никаких ограничений, мешающих возникнуть и восторжествовать бытию - единице. Таким образом, небытие, лежащее в самом начале Вселенной, "взрывается" во все стороны - в бесконечное количество логически возможные вариантов. При появлении сущего для каждой вещи возникает её противоположность - единице всегда соответствует минус единица. Идеальной иллюстрацией данного космогонического мифа служит фигура круга - ведь на его окружности находится бесконечное количество равноудалённых от центра точек, и для каждой из этих точек существует точка ей противоположная.
Живший спустя несколько столетий после Пифагора древнегреческий инженер Архимед провел большую часть жизни на Сицилии - не очень далеко от места, где некогда располагалась пифагорейская школа. Там Архимед разработал способ расчета отношения длины окружности к её радиусу при помощи вписывания окружности во все более и более сложные многоугольники. Эту величину, чье точное значение пытался найти Архимед, сейчас мы называем числом π ("пи"). Это название, однако, было популяризовано относительно недавно - в трудах выдающегося немецкого и российского математика Леонарда Эйлера, относившегося к окружности со свойственной ему как и Пифагору набожностью и посвятившего исследованию окружности огромную часть своих трудов.
Исследуя свойства синусов и косинусов на комплексной плоскости Эйлер наткнулся на изящную формулу, которая при подстановке в неё числа π приводит к невероятно красивому результату:
Это равенство, названное в честь математика тождеством Эйлера, по праву считается самой красивой формулой математики - в нем отображена поистине невероятная связь между пятью основными константами математики - нулем, единицей, основанием натурального логарифма e, числом π и мнимой единицей i.
В этой формуле будто бы сошлись вся математика и философия - небытие, бытие, гармоничность, бесконечность и непознаваемость. Кстати о последнем. Мнимая единица i долгое время считалась воображаемой, как бы ненастоящей сущностью, изящным математическим трюком, не более того, пока в начале XX века блестящий австрийский физик Эрвин Шредингер не опубликовал свое знаменитое уравнение, описывающее волновую функцию, в котором мнимая единица играет ключевую роль.
![Мнимые и действительные единицы на комплексной плоскости Мнимые и действительные единицы на комплексной плоскости](https://habrastorage.org/getpro/habr/upload_files/cb7/b28/1ae/cb7b281ae848e15a6bec3c6c6cbf9cd4.png)
По определению, мнимая единица - это корень из минус одного. Мы не можем представить себе это число в том же виде, в котором мы обычно представляем себе обычные числа. Мнимый десяток яблок - невообразимая картина. Однако, мнимые числа - очень важная часть математики. Вместе с обычными действительными числами мнимые числа образуют комплексные числа, записывающиеся в виде , где a и b - действительные. Именно при исследовании комплексных чисел Эйлер пришел к открытию названной в честь него формулы. Но он был не единственным, кто нашел великую красоту в комплексных числах.
Бельгийский математик Бенуа Мандельброт, исследовавший рекурсивные формулы с комплексными числами, открыл самую поразительно красивую вещь - бесконечно самоподобную структуру, так и названную в честь первооткрывателя - множеством Мандельброта.
Множество Мандельброта точек c на комплексной плосткости задается невероятно простой формулой:
Визуализировав данную формулу на компьютере и придав каждой точке цвет в зависимости от количества итераций, за которые получается определить принадлежит она множеству или нет, Бенуа Мандельброт получил невероятно красивые изображения. Будто бы тысячи галактик воссияли внутри полученных картин.
![](https://habrastorage.org/getpro/habr/upload_files/d1d/ea5/135/d1dea5135447f90bdaa5065418738c50.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/02e/3fe/5fa/02e3fe5fababc32079f832705f5de1b0.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/231/db0/60c/231db060c27d57298e4c5a00095b045c.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/1cf/ba9/59b/1cfba959bae261fb3359a8ed785e15e8.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/bd6/c16/e20/bd6c16e20d92d868095904d0fb201ab2.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/a6d/1d7/ddd/a6d1d7ddd47c1980447e42223034a556.jpeg)
Невероятная красота множества Мандельброта поражает воображение - завораживающая взгляд фрактальная структура, в которой каждый уровень подобен другим, содержит в себе бесконечное количество разнообразных образов. Вся эта невероятная красота изливается в мир из из абсолютного нуля. Множество Мандельброта подобно нашей собственной Вселенной в миниатюре - величайшая сложность, порожденная не менее великой простотой.
Всё из функции
В начале XX века светлейшие умы нашей планеты разгадали законы, по которым работает наш мир на самом элементарном своем уровне. Открытия физиков поразили не только обывателей, но и их самих. Оказалось, что элементарные частицы не являются точечными объектами и часто ведут себя совсем не как частицы, а скорее как волны.
Упрощенно рассматривая принцип корпускулярно-волнового дуализма, можно сказать, что частицы - лишь события, которые мы регистрируем в мире бинарных фактов. Эти события порождаются взаимодействием волн - неких идеальных сущностей, живущих по строгим математическим законам, но недоступных нашему прямому восприятию. Мы не можем познать волны нашим разумом, так как в волновом уравнении Шрёдингера присутствует та самая невообразимая мнимая единица.
Проводя аналогию с компьютерными программами, можно сказать, что частицы - это данные, а волны - это функции, обрабатывающие эти данные. Мы легко можем увидеть бит данных, ведь бит (binary digit) также как и частицы существует в доступном нашему восприятию мире бинарных фактов. Лампочка горит - истина, не горит - ложь. Функции же представляют собой некие идеальные платонические сущности: мы можем видеть их входные данные и результаты их работы в виде данных, но сами они являются лишь незримым математической законом.
Данную аналогию можно проиллюстрировать подобным образом:
Входные данные -> Функция -> Выходные данные
Состояние частицы -> Волновое уравнение -> Состояние частицы
Примерно в те же времена, когда физики в поте лица трудились над созданием квантовой механики, американский математик Алонзо Чёрч исследовал проблемы теории компьютерных вычислений. В ходе одной из своих работ Чёрч создал величайшее своё творение - лямбда-исчисление - краткую, но невероятно мощную формальную систему для описания алгоритмов.
Эта система состоит из всего двух операций - аппликации и абстракции. Абстракция - это объявление функции, а аппликация - это её применение. В этом посте ради простоты я не буду использовать нотацию, принятую самим Чёрчем, а использую более широко распространенную нотацию лямбда-функций, принятую в JavaScript и многих других языках программирования.
Абстракцию я буду обозначать следующим образом:
(a, b) => a + b
Аппликацию я буду обозначать так:
f(a, b)
Проводя эксперименты с лямбда-исчислением Чёрч обнаружил, что всё, что требуется для воспроизведения всей математики - это только само понятие функции и больше ничего. Полученная система в честь первооткрывателя называется кодированием Чёрча.
В начале Чёрч задал фундаментальные абстракции своей логической системы в виде двух функций:
true = (x, y) => x
false = (x, y) => y
Далее Чёрч определил в виде функций базовые логические операции:
and = (p, q) => p(q, p)
or = (p, q) => p(p, q)
not = (p) => (x, y) => p(y, x)
if = (p, x, y) => p(x, y)
Посмотрим как работает получившаяся система:
result1 = and(true, false)
// подставляем значения true и false в виде функций
result1 = and((x, y) => x, (x, y) => y)
// подставляем параметры в значение and в виде функции
result1 = ((x, y) => x)((x, y) => y, (x, y) => x)
// применяемая функция возвращает первый параметр, то есть
result1 = (x, y) => y
// сравнив эту функцию с нашими двумя логическими значениями, мы понимаем, что
result1 = false
result2 = or(true, false)
// подставляем значения true и false в виде функций
result2 = or((x, y) => x, (x, y) => y)
// подставляем параметры в значение or в виде функции
result2 = ((x, y) => x)((x, y) => x, (x, y) => y)
// применяемая функция возвращает первый параметр, то есть
result2 = (x, y) => x
// сравнив эту функцию с нашими двумя логическими значениями, мы понимаем, что
result2 = true
result3 = not(true)
// подставляем значение true в виде функции
result3 = not((x, y) => x)
// подставляем параметры в значение not в виде функции
result3 = (x, y) => ((x, y) => x)(y, x)
// применяемая функция возвращает первый параметр, то есть
result3 = (x, y) => y
// сравнив эту функцию с нашими двумя логическими значениями, мы понимаем, что
result3 = false
result4 = if(false, 1, 2)
// подставляем значение false в виде функции
result4 = if((x, y) => y, 1, 2)
// подставляем параметры в значение if в виде функции
result4 = ((x, y) => y)(1, 2)
// применяемая функция возвращает второй параметр, то есть
result4 = 2
Кроме булевской логики Чёрч реализовал в своей системе и арифметику - он взял арифметику Пеано и перевел её на язык лямбда-исчисления.
В начале Чёрч задал фундаментальные абстракции своей арифметической системы в виде двух функций:
0 = (f, x) => x
next = (n) => (f, x) => f(n(f, x))
Таким образом, числа в системе Чёрча выглядят следующим образом:
0 = (f, x) => x
1 = (f, x) => f(x)
2 = (f, x) => f(f(x))
3 = (f, x) => f(f(f(x)))
...
Далее Чёрч определил в виде функций базовые арифметические операции:
plus = (m, n) => (f, x) => m(f, n(f, x))
multiply = (m, n) => (f, x) => m(n(f), x)
Посмотрим как работает получившаяся система:
result5 = plus(1, 2)
// подставляем значения 1 и 2 в виде функций
result5 = plus((f, x) => f(x), (f, x) => f(f(x)))
// подставляем параметры в значение plus в виде функции
result5 = (f, x) => ((f, x) => f(x))(f, ((f, x) => f(f(x)))(f, x))
// упрощаем выражение
result5 = ((f, x) => f(x))(f, f(f(x)))
// упрощаем выражение еще раз
result5 = f(f(f(x)))
// сравнив эту функцию с нашими числами, мы понимаем, что
result5 = 3
В свою систему Чёрч добавил ещё много всего: вычитание, деление, действительные числа, строки. Он даже добавил туда рекурсивные вызовы функций с помощью знаменитого Y-комбинатора.
На основе лямбда-исчисления был создан один из самых первых языков программирования - LISP, который здравствует и поныне. Существует огромное количество диалектов лиспа, а многие его элементы были унаследованы другими языками программирования. Даже я сам когда-то создал свой диалект лиспа, работающий в экосистеме JavaScript. За краткость, невероятную мощь и внутреннюю гармонию программисты часто называют LISP языком Бога.
В кодировании Чёрча мощнейший математический аппарат строится на двух простых операциях лямбда-исчисления и гениальной мысли Алонзо Чёрча о том, что всё - есть функция. Подобно тому как наш физический мир представляет из себя море, состоящее из бесчисленных квантовых волн, математика - это океан бесчисленных функций. Какая невероятная красота заключена в том, что вся великая сложность математики может быть сведена к простейшему, но неосязаемому элементу - функции!
Заключение
На одной из самых известных картин нидерландского художника Маурица Эшера изображена картинная галерея, плавно перетекающая в город, который в свою очередь плавно перетекает обратно в картинную галерею.
![Картинная галерея, Мауриц Эшер, 1956 Картинная галерея, Мауриц Эшер, 1956](https://habrastorage.org/getpro/habr/upload_files/57a/bb8/4c9/57abb84c99622c9aa51525828c62fb77.jpeg)
Эта бесконечная художественная рекурсивная петля была бы невозможна без одного элемента - пустого белого пятна в центре картины. Эта пустота и есть тот самый ноль, то самое небытие, из которого берет начало наша Вселенная...
Комментарии (22)
smart_alex
19.07.2023 00:25+8В начале XX века светлейшие умы нашей планеты разгадали законы, по которым работает наш мир на самом элементарном своем уровне.
Несколько поспешное заявление. «Светлейшим умам нашей планеты» ещё копать и копать чтобы приблизиться к «разгадкам законов, по которым работает наш мир на самом элементарном своем уровне». Причём копать, судя по всему, светлейшим умам нужно не совсем в ту сторону, в которую они копают сейчас.
Mitrich555
19.07.2023 00:25+1Очено интересная и красивая статья с философским содержанием. Я не математик, но очень впечатляюще. Спасибо)
nickolaym
19.07.2023 00:25Стоит заметить, что в лямбда-исчислении функции унарные.
true = (x) => ((y) => x)
false = (x) => ((y) => y)
и т.д.nickolaym
19.07.2023 00:25+5Ну и где лямбда-исчисление, там же и комбинаторная логика.
Которая тоже обладает своей особенной красотой.А самый ураган в том, что можно найти минимальный базис - набор элементарных функций, из которых строится всё.
Например, в обычной двоичной логике есть два хорошо известных базиса:
аристотелев "отрицание, импликация"
булев "отрицание, конъюнкция, дизъюнкция" но внезапно, существуют базисы из одной двуместной функции - Пирса и Шеффера, и-не и или-не.
В комбинаторной логике тоже традиционный базис - это IKS
I (identity): I x = x
K (konstant): K x y = x
S (substitute): S x y z = (x z) (y z)
из которого видно, что чёрчевские
K a b = a, да это же true
(S K) a b = K b (a b) = b, да это же false (причём заметьте, мы тут получили промежуточный бессмысленный мусор ab, что бы это ни значило).Оказывается, I в этом базисе лишний, I = SKK:
S K K x = (K x) (K x) = x
Или чуть длиннее: I = SSKK:
S S K K x = S K (S K) x = K x (S K x) = xНо можно пойти дальше и найти базис из единственного комбинатора "йота":
i x = x S K
(распишите его через лямбду сами, если хотите)I = i i = i S K = S S K K = I, как мы это уже показали выше
K = i (i (i i)) = i (i I) = i I S K = I S K S K = S K S K = K K (S K) = K
S = i (i (i (i i))) = i K = K S K = S
ну а раз мы из йоты получили базис IKS, то йота сама является базисом.И на её основе построен эзотерический язык, кто бы мог подумать, "йота"
https://en.wikipedia.org/wiki/Iota_and_Jot
bbs12
19.07.2023 00:25Основную мысль теории математической красоты можно кратко выразить как:
Красота - это сложность, порожденная простотой
А как насчет максимально уродливых вещей? Там есть какие-то закономерности?
SergioShpadi Автор
19.07.2023 00:25+2Если великая красота - это сложный результат простого процесса, то максимальное уродство - это отсутствие у невероятно сложного процесса всякого результата.
SergioShpadi Автор
19.07.2023 00:25Тут вот как раз прекрасная иллюстрация такого уродства на Хабре вышла:
WVitek
19.07.2023 00:25+3Опираясь на утверждение
"... людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью ...
",
легко представить, что
"красивый код = простой код, делающий сложные вещи
".
rg_software
19.07.2023 00:25Согласно этой теории людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью
Что такое алгоритмическая сложность, понятно, а что в этом контексте просто "сложность"? Чем строка вида "abababababab" сложнее строки "aaaaaaaaa", если речь не идёт именно об алгоритмической сложности? Наверно, можно подумать в сторону энтропии, но я не уверен, что в данном контексте это достаточный критерий.
Helltraitor
Некорректное определение, кто бы его не ввел и не использовал. Если уж и приводить мнимое значение к реальному, то лучше говорить
+/-sqrt(-1)
.Мое мнение как специалиста в области математики (коим я недавно стал): некорректно говорить о значении
i
в контексте реальных чисел.Определение может выглядеть так:
i
это некоторое число вне класса действительных чисел, обладающее следующим свойством...Про лямбда-исчисление очень понравилось. Жаль, не показали пример с делением и действительными числами
Спасибо за статью
Spaceoddity
что-то вспомнился вопрос с подвохом из старшей школы на математическую терминологию:
"корень квадратный из 4?"
code_panik
Есть два числа с таким свойством, это i и -i.
Grinfer_De_Marrak
С одной стороны вы правы, но кажется что это просто вопрос направления оси, а с точки зрения самого значения i разницы нет.
Deosis
В определении нигде не утверждается, что такое число единственное.
NAGIBATOR-1999
С удивлением обнаружил, что гугл не дает определения мнимой единицы.
Мнимая единица - это комплексное число (0; 1).
Комплексные числа - это упорядоченные пары чисел (a; b), для которых определены операции сложения
и умножения
NAGIBATOR-1999
Первая формула должна быть (a; b) + (c; d) = (a+c; b+d), конечно же.