Математическая красота с точки зрения Midjourney
Математическая красота с точки зрения Midjourney

Довольно часто на просторах интернета можно встретить выражение "Красота - в глазах смотрящего". Действительно ли красота субъективна, или все же в ней есть нечто объективное и общее для всех? Возможно ли, что абсолютно не похожие на нас инопланетные существа с другого конца Вселенной, с которыми нам даже ни разу не суждено встретиться за всё время существования наших цивилизаций, видят красоту в том же, в чем видим её и мы?

В начале 90-х годов XX века немецкий информатик Юрген Шмидхубер представил невероятно красивую и математически строгую теорию математической красоты. Согласно этой теории людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью. Эта величина, также известна как колмогоровская сложность, названа так в честь впервые описавшего её советского математика Андрея Колмогорова.

Алгоритмическая сложность строки данных - это наименьшее возможное описание, необходимое для воспроизведения этой строки. К примеру у следующей строки высокая алгоритмическая сложность, так как самое короткое её описание - это она сама:

4c1j5b2p0cv4w1x8rx2y39umgw5q85s7uraqbjfdppa0q7nieieqe9noc4cvafzf

А вот у следующей строки низкая алгоритмическая сложность, так как её можно коротко описать как "повтор ab 32 раза":

abababababababababababababababababababababababababababababababab

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

'4c1j5b2p0cv4w1x8rx2y39umgw5q85s7uraqbjfdppa0q7nieieqe9noc4cvafzf'
'ab'.repeat(32)

В таком случае на JavaScript алгоритмическая сложность первой строки равна 66 (64 символам и 2 кавычкам), а сложность второй равна 15. Шмидхубер считает, что второе выражение кажется нам более красивым, потому что, порождая равную по количеству бит строку данных, оно задается выражением с гораздо более низкой алгоритмической сложностью.

Основную мысль теории математической красоты можно кратко выразить как:

Красота - это сложность, порожденная простотой

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

Всё из нуля

Во времена рассвета греческой цивилизации в южной Италии в небольшом городке под названием Кротона, философ и математик Пифагор основал свою знаменитую школу. В пифагорейской школе обучение геометрии было неразрывно связано с мистической трактовкой её фигур, аксиом и теорем. Наибольшим почетом среди пифагорейцев пользовалась монада - символ окружности, обведенной вокруг ярко выделенной центральной точки.

Монада Пифагора
Монада Пифагора

Монада считалась божественным знаком - символом единства в самом своем сердце всего сущего и происхождения мира из пустоты. Вольно трактуя воззрения пифагорейцев, можно сказать, что в самом начале мира не было ничего - был полный ноль. Но раз ничего нет, то нет и никаких ограничений, мешающих возникнуть и восторжествовать бытию - единице. Таким образом, небытие, лежащее в самом начале Вселенной, "взрывается" во все стороны - в бесконечное количество логически возможные вариантов. При появлении сущего для каждой вещи возникает её противоположность - единице всегда соответствует минус единица. Идеальной иллюстрацией данного космогонического мифа служит фигура круга - ведь на его окружности находится бесконечное количество равноудалённых от центра точек, и для каждой из этих точек существует точка ей противоположная.

Живший спустя несколько столетий после Пифагора древнегреческий инженер Архимед провел большую часть жизни на Сицилии - не очень далеко от места, где некогда располагалась пифагорейская школа. Там Архимед разработал способ расчета отношения длины окружности к её радиусу при помощи вписывания окружности во все более и более сложные многоугольники. Эту величину, чье точное значение пытался найти Архимед, сейчас мы называем числом π ("пи"). Это название, однако, было популяризовано относительно недавно - в трудах выдающегося немецкого и российского математика Леонарда Эйлера, относившегося к окружности со свойственной ему как и Пифагору набожностью и посвятившего исследованию окружности огромную часть своих трудов.

Исследуя свойства синусов и косинусов на комплексной плоскости Эйлер наткнулся на изящную формулу, которая при подстановке в неё числа π приводит к невероятно красивому результату:

e^{i\pi}+1=0

Это равенство, названное в честь математика тождеством Эйлера, по праву считается самой красивой формулой математики - в нем отображена поистине невероятная связь между пятью основными константами математики - нулем, единицей, основанием натурального логарифма e, числом π и мнимой единицей i.

В этой формуле будто бы сошлись вся математика и философия - небытие, бытие, гармоничность, бесконечность и непознаваемость. Кстати о последнем. Мнимая единица i долгое время считалась воображаемой, как бы ненастоящей сущностью, изящным математическим трюком, не более того, пока в начале XX века блестящий австрийский физик Эрвин Шредингер не опубликовал свое знаменитое уравнение, описывающее волновую функцию, в котором мнимая единица играет ключевую роль.

Мнимые и действительные единицы на комплексной плоскости
Мнимые и действительные единицы на комплексной плоскости

По определению, мнимая единица - это корень из минус одного. Мы не можем представить себе это число в том же виде, в котором мы обычно представляем себе обычные числа. Мнимый десяток яблок - невообразимая картина. Однако, мнимые числа - очень важная часть математики. Вместе с обычными действительными числами мнимые числа образуют комплексные числа, записывающиеся в виде a+bi, где a и b - действительные. Именно при исследовании комплексных чисел Эйлер пришел к открытию названной в честь него формулы. Но он был не единственным, кто нашел великую красоту в комплексных числах.

Бельгийский математик Бенуа Мандельброт, исследовавший рекурсивные формулы с комплексными числами, открыл самую поразительно красивую вещь - бесконечно самоподобную структуру, так и названную в честь первооткрывателя - множеством Мандельброта.

Множество Мандельброта точек c на комплексной плосткости задается невероятно простой формулой:

z_{n+1}=z_n^2+c,  z_0=0

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

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

Всё из функции

В начале 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

Эта бесконечная художественная рекурсивная петля была бы невозможна без одного элемента - пустого белого пятна в центре картины. Эта пустота и есть тот самый ноль, то самое небытие, из которого берет начало наша Вселенная...

Комментарии (22)


  1. Helltraitor
    19.07.2023 00:25
    +4

    По определению, мнимая единица - это корень из минус одного.

    Некорректное определение, кто бы его не ввел и не использовал. Если уж и приводить мнимое значение к реальному, то лучше говорить +/-sqrt(-1).

    Мое мнение как специалиста в области математики (коим я недавно стал): некорректно говорить о значении i в контексте реальных чисел.

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

    i * i = -1

    Про лямбда-исчисление очень понравилось. Жаль, не показали пример с делением и действительными числами

    Спасибо за статью


    1. Spaceoddity
      19.07.2023 00:25

      что-то вспомнился вопрос с подвохом из старшей школы на математическую терминологию:

      "корень квадратный из 4?"


    1. code_panik
      19.07.2023 00:25
      +7

      i это некоторое число вне класса действительных чисел, обладающее следующим свойством i * i = -1

      Есть два числа с таким свойством, это i и -i.


      1. Grinfer_De_Marrak
        19.07.2023 00:25
        +1

        С одной стороны вы правы, но кажется что это просто вопрос направления оси, а с точки зрения самого значения i разницы нет.


      1. Deosis
        19.07.2023 00:25

        В определении нигде не утверждается, что такое число единственное.


    1. NAGIBATOR-1999
      19.07.2023 00:25
      +1

      С удивлением обнаружил, что гугл не дает определения мнимой единицы.

      Мнимая единица - это комплексное число (0; 1).

      Комплексные числа - это упорядоченные пары чисел (a; b), для которых определены операции сложения

      (a; b) + (c; d) = (a+b; c+d)

      и умножения

      (a; b) * (c; d) = (ac-bd; ad+bc).


      1. NAGIBATOR-1999
        19.07.2023 00:25
        +1

        Первая формула должна быть (a; b) + (c; d) = (a+c; b+d), конечно же.


  1. FirstEgo
    19.07.2023 00:25
    +1

    Спасибо за красивую статью.


  1. smart_alex
    19.07.2023 00:25
    +8

    В начале XX века светлейшие умы нашей планеты разгадали законы, по которым работает наш мир на самом элементарном своем уровне.

    Несколько поспешное заявление. «Светлейшим умам нашей планеты» ещё копать и копать чтобы приблизиться к «разгадкам законов, по которым работает наш мир на самом элементарном своем уровне». Причём копать, судя по всему, светлейшим умам нужно не совсем в ту сторону, в которую они копают сейчас.


  1. Jury_78
    19.07.2023 00:25
    +3

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


    1. Didimus
      19.07.2023 00:25

      Сплошное превосходительство


  1. Mitrich555
    19.07.2023 00:25
    +1

    Очено интересная и красивая статья с философским содержанием. Я не математик, но очень впечатляюще. Спасибо)


  1. vvbob
    19.07.2023 00:25
    +4

    основанием натурального алгоритма e

    натурального логарифма, наверное :)


    1. SergioShpadi Автор
      19.07.2023 00:25
      +1

      Конечно. Исправил


  1. nickolaym
    19.07.2023 00:25

    Стоит заметить, что в лямбда-исчислении функции унарные.
    true = (x) => ((y) => x)
    false = (x) => ((y) => y)
    и т.д.


    1. 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


  1. bbs12
    19.07.2023 00:25

    Основную мысль теории математической красоты можно кратко выразить как:

    Красота - это сложность, порожденная простотой

    А как насчет максимально уродливых вещей? Там есть какие-то закономерности?


    1. SergioShpadi Автор
      19.07.2023 00:25
      +2

      Если великая красота - это сложный результат простого процесса, то максимальное уродство - это отсутствие у невероятно сложного процесса всякого результата.


    1. SergioShpadi Автор
      19.07.2023 00:25

      Тут вот как раз прекрасная иллюстрация такого уродства на Хабре вышла:

      https://habr.com/ru/companies/ruvds/articles/749056/


  1. WVitek
    19.07.2023 00:25
    +3

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


  1. itundp
    19.07.2023 00:25

    А развер Эйлер был не швецарский и русский математик?


  1. rg_software
    19.07.2023 00:25

     Согласно этой теории людям кажутся красивыми сложные объекты, обладающие наименьшей алгоритмической сложностью

    Что такое алгоритмическая сложность, понятно, а что в этом контексте просто "сложность"? Чем строка вида "abababababab" сложнее строки "aaaaaaaaa", если речь не идёт именно об алгоритмической сложности? Наверно, можно подумать в сторону энтропии, но я не уверен, что в данном контексте это достаточный критерий.