“пересказал Бродского своими словами”

Feb 19, 2020 00:13

Кто живёт в разноязычных средах, тому наверняка знакома проблема, когда хочешь поделиться стихами, песней, да хотя бы шуткой на каком-то языке, которым собеседник не владеет, а в переводе уже не то. Да и не только в языке дело, культурный контекст нужен ( Read more... )

Leave a comment

chaource February 21 2020, 16:27:19 UTC
А вотъ мнѣ что-то кажется, что объясненiе (почему такъ трудно передать энтузiазмъ) простое. Упомянутые Вами ученые просто ушли куда-то въ такiе удаленные эмпиреи, что потеряли даже самую условную связь съ реальной практикой. Поэтому и невозможно объяснить, почему "когерентность" и "слабыя модельныя категорiи" такiя прекрасныя штуки.

Въ качествѣ иллюстрацiи, вотъ у меня такой простой вопросъ. Есть функторы, а есть сильные функторы (strong functors). И вотъ пока что ни разу я не видѣлъ, чтобы на практикѣ, т.е. въ программированiи - насколько я понимаю, другой практики у функторовъ пока нѣтъ, - функторы были бы не сильные. Они всегда и вездѣ сильные. Программисту даже не надо изучать отдѣльно это понятiе, оно никогда не потребуется - просто у всѣхъ функторовъ есть свойство A × F[B] => F[A × B], написать кодъ для этой функцiи - простое упражненiе.

Однако, математики это понятiе формулируютъ и изучаютъ отдѣльно, причемъ въ большой общности (для любыхъ моноидальныхъ категорiй). А въ программированiи встрѣчаются только и исключительно моноидальныя категорiи, и операцiя (×) у нихъ всегда одна и та-же, такъ что изучать эти категорiи отдѣльно не требуется.

И вотъ нѣкiй математикъ придумалъ теорему о тонкихъ различiяхъ между нѣкими сильными и слабыми функторами въ нѣкихъ моноидальныхъ или не очень категорiяхъ. Однако теорема эта никакъ не связана съ реальной практикой, и объяснить ея программисту трудно или даже невозможно. Математикъ воспылалъ энтузiазмомъ по поводу этой теоремы, потому что она показываетъ, что... эээ... (дальше еще длинный потокъ словъ, никакъ не связанныхъ съ практикой). Психологически, математикъ испытываетъ чувство "красоты", но это обманъ, "багъ" мозга. Мозгъ, на своемъ какомъ-то глубоко подсознательномъ уровнѣ, думаетъ, что нашелъ новую вкусную ѣду. На самомъ дѣлѣ, эти теоремы безполезны, онѣ - не ѣда. Онѣ, скорѣе всего, и сегодня никому не нужны, и никогда въ будущемъ не понадобятся. Вѣроятность, конечно, есть, что когерентность или слабыя модельныя категорiи черезъ 50 лѣтъ для чего-то понадобятся, - вотъ, понадобились же (полвѣка спустя) функторы, конструктивная логика, и даже теорiя чиселъ. Но эта вѣроятность очень мала - и сегодня, во всякомъ случаѣ, дорога къ практикѣ совершенно не видна.

Поэтому и нельзя ничего объяснить неспецiалисту. Обычные достаточно умные люди будутъ думать примѣрно такъ, какъ говорилъ Хармсъ, - "[этотъ математикъ] знаетъ очень много, да все ерунду".

Мнѣ только жалко, что математики заняты такими вотъ вещами, а не болѣе важными для практики вопросами. Напримѣръ, монады придумали, а monad transformers такъ и не разобрались, какъ въ общемъ случаѣ дѣлать. А на практикѣ они нужны. Если у "спецiалистовъ" спросить объ этомъ, начинается невнятное бормотанiе про Eilenberg-Moore and Kleisli adjunctions, а четкаго отвѣта - какъ написать кодъ для monad transformer, если извѣстенъ кодъ данной монады, и всегда-ли это возможно - кажется, такъ и нѣтъ.

Другой вопросъ - почему функторъ (пишу на Хаскелѣ)

data P a = Empty | Pair a a

не является монадой, какъ ни старайся написать кодъ для return и join - законы монады не удовлетворяются. Этотъ функторъ - полиномiальный, очень простой, соотвѣтствуетъ полиному P(x) = 1 + x*x. То-же самое относится къ полиному P(x) = 1 + x*x*x. Доказательство тупое и длинное, переборомъ всѣхъ возможныхъ способовъ написать кодъ для return и join. Почему это происходитъ? Какъ понять, является ли данный полиномiальный эндофункторъ монадой? Нѣтъ отвѣта.

Или, скажемъ, parametricity theorem. Придумали сложную, запутанную теорiю, какiя-то relations, semantic frames, а для практическаго использованiя нужны четкiе шаги, какъ находить свойства naturality для данныхъ функцiй. А этого, какъ разъ, нигдѣ не написано.

Такое впечатленiе, что это имъ неинтересно или ниже достоинства витающихъ въ эмпиреяхъ математиковъ - давать четкiе отвѣты на практически важные, но непростые вопросы. Это не даетъ имъ понты въ ихъ частномъ клубѣ элитарныхъ спецiалистовъ-теоретиковъ.

Занялись бы дѣломъ, былъ бы хлѣбъ, и дѣтямъ было бы не стыдно разсказывать. ;)

Reply

66george February 21 2020, 18:56:27 UTC
Чего то я начинал с функционального программирования году в 84-м (писал диплом на языке GARF), затем все 90-е балдел от теорий Мартин-Лёфа и топосов, затем десять лет писал учебник, а теперь мне это всё перегорело, хочу научиться хорошо взламывать и за это деньги получать (bug bounty). Надо к практике быть ближе.

Reply

chaource February 21 2020, 19:26:32 UTC
Надо! Я вотъ научился, правда, не взламывать, но практической функцiональщинѣ, и таки, какъ ни смѣшно, получаю за нее деньги. Языкъ Scala.

А учебникъ Вашъ (въ любомъ видѣ) можно посмотрѣть? Если не хотите свѣтить ссылку, можно въ личку.

Reply

66george February 21 2020, 19:30:48 UTC
Это тот учебник, который я выкладывал везде (во все функциональные сообщества). Если не видели (удивительно), зайдите ко мне в ЖЖ и посмотрите тэг "Учебник"

Reply

chaource February 21 2020, 23:03:54 UTC
А, ну да, видѣлъ этотъ учебникъ уже. Спасибо!

Reply

akuklev February 21 2020, 20:56:37 UTC
К сожалению, математика работает не так.

Reply

chaource February 21 2020, 23:28:54 UTC
А какъ она работаетъ? Вотъ конкретно, я назвалъ три вопроса, гдѣ высокоученые математики не даютъ отвѣтовъ.

Если искать статьи про parametricity, то съ каждымъ годомъ онѣ становятся все заумнѣе и заумнѣе, въ то время какъ доказательство главной теоремы для самыхъ простыхъ случаевъ (polymorphic lambda calculus and System F) нигдѣ полностью въ деталяхъ не выписано. Ссылаются на старыя статьи Reynolds'a ("Types, abstraction and parametric polymorphism") и Wadler'a ("Theorems for free"), но тамъ нѣтъ всѣхъ деталей доказательствъ, а также нѣтъ четкаго рецепта, какъ по данной функцiи написать для нея "безплатную теорему".

А какъ насчетъ существованiя и единственности monad transformers? Монады придумали, а трансформеры изучать - уже не надо, что ли? Программисту надо знать, для любой ли монады существуетъ трансформеръ, и если существуетъ, то какъ написать необходимый для него кодъ. Отвѣта нѣтъ.

А какъ насчетъ критерiя о томъ, какой полиномiальный эндофункторъ можетъ быть монадой, а какой нѣтъ? Это чисто математическiй вопросъ, четко и просто поставленный, и при этомъ важный для практики. Почему этимъ никто не занимался никогда? Вѣдь это простѣйшiй, первѣйшiй вопросъ, который долженъ у всякаго спецiалиста возникать - мы только что дали опредѣленiе монады, вотъ теперь предположимъ, нѣкiй эндофункторъ заданъ явной формулой, - какъ я могу выяснить, является ли этотъ эндофункторъ монадой? Нѣтъ отвѣта.

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

Reply

akuklev February 21 2020, 23:40:43 UTC
По взаимодействующим монадам и параметричности идёт очень активная работа, я как созрею - напишу обзорные посты в ЖЖ.

А в целом математика работает так, что серьёзный прогресс происходит только либо благодаря внутреннематематическим мотивациям, либо когда возникает потребность математически осмыслить новый раздел внешней естественной науки (обычно это двигателем была физика, но пару раз и информатика), а не от того что кто-то садится и начинает думать, чем бы ему таким попрактичнее заняться.

Reply

akuklev February 21 2020, 23:55:03 UTC
А можно посмотреть доказательство, что P(x) = 1 + x*x не задаёт монаду? Это как-то противоречит классическому результату, что на любом полиномиальном эндофункторе строится свободная монада[https://arxiv.org/pdf/0906.4931.pdf].

Reply

chaource February 22 2020, 00:21:07 UTC
Свободная монада, конечно, можетъ быть построена на любом эндофункторѣ. Но рѣчь не объ этомъ, а о томъ, что хаскельный типъ данныхъ, который я выше написалъ,

data P a = Empty | Pair a a

не можетъ быть сдѣланъ монадой. Это полиномiальный эндофункторъ, соотвѣтствующiй полиному P(x) = 1 + x*x, но для него нельзя опредѣлить функцiи return: a -> P a и join: P(P a) -> P a, удовлетворяющiя законамъ монады.

Доказательства этого были выписаны тутъ, https://stackoverflow.com/questions/49742377/

Reply

chaource February 22 2020, 22:34:12 UTC
Навѣрно, надо уточнить. Свободная монада, конечно, строится на любомъ функторѣ. Вопросъ насчетъ P(x) = 1 + x*x въ томъ, является ли этотъ функторъ самъ монадой, безъ того, чтобы строить по нему свободную монаду. Т.е. вопросъ въ томъ, можно ли для типа данныхъ (Хаскель)

data P a = Empty | Pair a a

опредѣлить функцiи

return: a -> P a
join: P (P a) -> P a

удовлетворяющiя необходимымъ законамъ для монады. Этого сдѣлать нельзя. Доказательство пишется путемъ перечисленiя всѣхъ 50 возможныхъ способовъ написать кодъ для функцiй return и join. Это обсуждалось здѣсь, https://stackoverflow.com/questions/49742377/is-data-poe-a-empty-pair-a-a-a-monad и тамъ нѣсколько человѣкъ выписали и провѣрили доказательство.

Reply

akuklev February 22 2020, 22:55:54 UTC
Да, хм, понял. Гм-гм-гм, на первый взгляд если полиномиальный тип от Х не содержит X в первой степени, то систематически не должно получаться.. надо подумать.

Reply

chaource February 24 2020, 04:47:04 UTC
А откуда видно, что нуженъ Х въ первой степени?

Reply

ext_3948950 February 26 2020, 16:12:11 UTC
X -> X^2 - монада, получается из сопряжённости константной диаграммы и предела, для случая графа с двумя вершинами и без рёбер.

Reply

chaource February 26 2020, 22:06:08 UTC
А какъ X^2 связано съ описаннымъ выше случаемъ 1+X^2? Да, X^2 монада.

Reply


Leave a comment

Up