Публикуется с разрешения автора.
От переводчика
Текст, перевод которого я намерен представить вашему вниманию, — краткая автобиография (называющаяся в оригинале «Mathematical Software and Me: A Very Personal Recollection», то есть «Математическое ПО и я: очень личные размышления»), написанная в 2009-м году Уильямом Стайном (имя которого по-русски иногда пишут как «Вильям Стейн»), бывшим профессором математики Вашингтонского Универститета, получившим степень Ph. D. в Беркли (Калифорния). Математическая составляющая профессиональных интересов доктора Стайна — теория чисел. Этот текст о его, возможно, главном деле — системе компьютерной математики, ранее называвшейся Sage, в настоящее время переименованной в SageMath, существующей также в облачной версии, которая раньше называлась SageMathCloud, а теперь — CoCalc. (На Хабре эти системы неоднократно упоминались: например, freetonik написал о Sage, а sindzicat поведал о SageMathCloud.) Когда я прочитал «Mathematical Sofrware and Me» первый раз, этот текст меня очень впечатлил. И прежде, чем перейти к самому переводу, я попробую кратко объяснить, чем же именно.
Автор оригинального текста (слева)
Этот текст показался мне интересным прежде всего потому, что в нём довольно нетривиальным образом сходятся две весьма небезразличные мне сферы: IT и математика. Во-первых, впечатляет сам подход. Уильям Стайн пишет, как в одиночку, если можно так выразиться, «поднял и протащил» в первые годы то, что впоследствии стало мощной системой компьютероной математики. Красота этого, во-первых, в том, что доктор Стайн (тогда ещё аспирант) берёт и компонует множество математических пакетов, делая вместе с коллегами эдакую «метасистему», и добавляя сверху ещё некоторую функциональность, которая отсутствовала в базовых инструментах, но которая нужна практикующим математикам (исходя из своих потребностей при работе над диссертацией, а также собирая требования из первых рук от своих коллег). А во-вторых, восхищения заслуживает то, сколько выдающихся учёных и сильных программистов так или иначе были связаны с этим проектом уже в первые годы его развития. Теперь над системой работает большое сообщество, и в этом есть существенная заслуга У. Стайна, выступающего в том числе в качестве мастера профессиональных коммуникаций.
Следует сказать несколько слов о диссертации Стайна, («научных корнях» его работы над системой SageMath). Согласно данным проекта Математическая Генеалогия, У. Стайн защитил свою диссертацию (тема которой — «Явные подходы к модулярным абелевым многообразиям» — эти понятия ещё встретятся, вместе с поясняющими ссылками, в тексте хабрастатьи) под руководством голландского математика Хендрика Ленстры, чьё академическое генеалогическое древо восходит к знаменитым Гильберту и Клейну, а консультантом являлся Бьёрн Миаил Пунен, чьим научным руководителем в свою очередь был Кен Рибет, высказавший идеи по доказательству Большой теоремы Ферма, приведшие Эндрю Уайлса к успеху (эти имена также ещё встретятся в тексте). Всё просвещённое общество знает, что главное дело жизни Уайлса, Большая теорема Ферма (о которой обстоятельно, но доступно для широких масс, рассказал научный журналист Саймон Сингх в своей книге «Великая теорема Ферма») — это не какая-то игрушечная абстрактная задача. Её доказательство имело большие последствия для науки: она дала мощный толчок к развитию разных областей математики. Методы, проработанные Уайлсом, привели канадского математика Роберта Ленглендса к созданию грандиозного «roadmap»-а, известного как программа Ленглендса по глобальному объединению математики. Тут нельзя не отметить ещё один момент, в контексте которого программа Ленглендса уже упоминалась на Хабре: физики взяли на вооружение идеи Ленглендса, и это тоже про объединение. А именно, про "Великое объединение" — комплекс работ по созданию единой теории фундаментальных взаимодействий, об одном из возможных направлений много и интересно пишет советско-американский физик Эдуард Френкель на своём сайте, а также в книге, о которой упоминалось на Хабре от имени ph_piter.
В близкой к Ленглендсу теоретико-числовой проблематике (полтно соприкасаясь, например, в части применения аппарата L-функций) лежит центральный научный интерес доктора Стайна — гипотеза Бёрча — Свиннертон-Дайера (в процессе чтения текста видно, что многое крутится именно вокруг неё). Тут стоит отметить, что Стайн не оригинален в кругу своих коллег — доказательство гипотезы разрабатывается теми же научными школами математиков-теоретикочисолвиков, что имеют отношение к Уайлсу или Ленглендсу. Да что там, сам Эндрю Уайлс имел такую тему диссертации: «Законы взаимности и гипотеза Берча и Свиннертон-Дайера». Важно, что эта математическая проблема встречается в ещё одном ключевом «roadmap»-е для современной математики: в списке Millenium Problems, о котором мы уже читали на Хабре в публикации уважаемого lutter, кроме того на Хабре и сама гипотеза Бёрча Свиннертон-Дайера уже объект не новый: о ней есть интересная публикация за авторством grechnik.
Лично у меня дух захватывает от того, как много научных «нитей» сходится к работе Уильяма Стайна над системой SageMath.
Предлагаемый вашему вниманию текст хоть и в оригинале написан несколько сумбурно (действительно: «личные размышления»), но имеет некоторую сюжетную динамику, кульминацией чего является момент, когда Стайн понимает, что не может больше делать науку, когда ядро системы, которой он посвятил годы, закрыто (речь о системе компьютерной алгебры Magma, в разработке которой автор участвовал некоторое время), алгоритмы откуда нельзя использовать свободно (тем более публиковать и обсуждать).
Этот текст напоминает о том, что наука — дело коллективное, она является общечеловеческим достоянием, и очень удачной моделью для её прогрессивного развития является модель, близкая к разработке Open source-софта. Автобиографическая статья Стайна — про объединение в широком ссмысле этого слова.
Благодарность
Хочу выразить благодарность доктору Уильяму Стайну, быстро и с энтузиазмом откликнувшемуся на предложение опубликовать русский перевод этой его статьи.
Каждое первое упоминание какого-либо человека выделяется подчёркиванием.
Для каждого вхождения всего вышеупомянутого, а также для встречающихся в тексте первый раз математических концепций я привожу ссылку, по которой можно получить дополнительную информацию. При наличии страницы в русской Википедии — это ссылка на неё. Если страница в русской Вики отстутствует — то ссылка даётся сразу на английскую. В случае отсутствия информации в русской или английской Википедии ссылка даётся на релевантрую страницу о человеке или объекте. Когда речь идёт о наших современниках, то часто это их персональные страницы.
Надеюсь, обилие ссылок не будет мешать читать текст, а наоборот поможет. Я помню свои первые ощущения: куча концепций, идей, имён на единицу площади — про многое уже знаешь, но про ещё бОльшую часть хочется найти ещё подробностей. Так что я попытался помочь уважаемым хаброчитателям (а также Гуглу, чуть-чуть разгрузив его).
План первой части
- 0. Детство, логарифмические линейки, калькуляторы. Начало 1990-х. Студенчество, инженерные специальности, Mathematica, MATHCAD, Maple
- 1. Абстрактная алгебра. 1994. Cayley. 1997. Опыт с MATLAB, Linux, C/C++
- 2. Кризис в написании диссертации. Алгебры Гекке, квадратичные поля. PARI. Гипотеза Манина — Мамфорда. Погружение в тему модулярных форм
- 3. 1998-й. Дальнейшее погружение в модулярные формы. HECKE, LiDIA, NTL
- 4. 1999-й. Знакомство с Magma. Числа Тамагавы модулярных абелевых многообразий и гипотеза Бёрча — Свиннертон-Дайера
- 5. Вовлечение в Magma. Приём в группу разработчиков Magma. Линейная алгебра. Первые мысли о собственной системе
План второй части
- 6. 2002. Знакомство с Python. ПО с открытым кодом. Книга по элементарной теории чисел. Python/C API. Возвращение к Linux. Многотомник о математике в Magma Кэннона и Книга по теории чисел автора
- 7. PARI C API, pexpect. Первая версия Sage — Manin. Первые попытки интеграции с GAP, Macaulay 2, Singular, Axiom, Maxima. Поиски модели разработки. “Наконец мы что-то сделали”
- 8. Роковое письмо Кэннона. “Хватит это терпеть”. Решительный шаг к самостоятельности. Широкая известность в узких кругах. Sage Days 1. Привлечение замечательных людей. Sagetex, начало Sage Notebook
- 9. Sage Days 2 и последующие. Акцент на веб-версии. Всё только начинается
0. Детство, логарифмические линейки, калькуляторы. Начало 1990-х. Студенчество, инженерные специальности, Mathematica, MATHCAD, Maple
Мне сложно писать об истории Sage, не поведав при этом историю своего личного вовлечения в сферу математического ПО. Сколько себя помню, я обожал пользоваться калькуляторами. Мой отец как-то раздобыл для меня электромеханическую суммирующую машину, когда я был ещё совсем маленький, в далёкие 1970-е годы, и я потратил много времени заполняя с помощью неё бумажные ленты. Потом он достал мне на барахолке старый научный калькулятор фирмы TI, со светодиодным дисплеем. В 11 лет, переехав из Орегона в Техас, я купил логарифмическую линейку, которая на какое-то время меня очень захватила. После, в младших классах, я наконец получил настоящий научный калькулятор, маленький Casio, инструкцию к которому я с жадностью «проглотил». Это стало моим первым введением в тригонометрию, статистику и многие другие фрагменты вычислительной математики. Я неплохо прокачался, хотя и проходил начальную школу по необычному, усваиваемому в собственном темпе учебному плану, и вскоре начал прорабатывать математику уровня 10 класса.
Первой компьютерной программой из всех, что я когда-либо использовал, стала Mathematica, в далёком 1992-м на ПК под Windows 3.1, в бытность мою 17-летним студентом в Университете Северной Аризоны, что в городе Флагстафф.
Естественно, моя копия Mathematica была пиратской, поскольку, как и многие студенты, я был чрезвычайно беден в те времена. Единственное, для чего я нашёл её полезной тогда, — это построение трёхмерных графиков (исключительно ради развлечения), также разочаровывало отсутствие возможности интерактивно поменять точку обзора. Ещё я как-то достал копию MATHCAD-а, который показался мне более годным, чем Mathematica. Наверное это не удивительно, поскольку я был студентом в области компьютерной инженерии и посему проходил курсы физики, электротехники, программирования и т. д. Математика не была моим профилирующим предметом: помню как однажды, заканчивая занятия по анализу многих переменных, думал: «Это моя последняя математическая дисциплина»! Также я использовал Maple около часа или двух в компьютерной лаборатории в рамках проходимого мной математического курса. В то время я воспринимал Maple, Mathematica и MATHCAD как программное обеспечение, не превосходящее научные калькуляторы какими-либо особенно заманчивыми свойствами.
1. Абстрактная алгебра. 1994. Cayley. 1997. Опыт с MATLAB, Linux, C/C++
В следующий раз я столкнулся с математическим ПО в начале 1994, когда я выбрал математику своим профилем, после того как случайно обнаружил в букинистическом магазине книгу по абстрактной алгебре, замаскированной под computer science, и был совершенно загипнотизирован такими идеями как группы, кольца и поля. На очередной компьютерной лабе я застрял на распечатках документации, которые имелись у (профессора Университета Северной Аризоны) Майка Фолка (Mike Falk) для системы Cayley, предшественницы системы Magma. Я был изумлён и взволнован, поскольку идеи, заложенные в Cayley шли так далеко вперёд по отношению к чему либо, что я вообще считал возможным в математическом ПО ранее. Я совершенно уверен, что я никогда по-настоящему не использовал Cayley, хотя, так же как и сейчас, программное обеспечение было дорогим и труднодоступным. Вместо этого я лишь провёл много времени читая справочное руководство, полное замечательных примеров вычислений с группами, кольцами и полями, — предметами, которые в первую очередь привлекали меня в математике.
Фактически, после той краткой встречи с Cayley, я больше не притрагивался к математическому ПО, и даже вообще не программировал что-либо нетривиальное в течение 3-х лет. Так было потому, что в 1994-м я сильно заинтересовался теоретической математикой и проводил большую часть времени в эти 3 года в систематическом выполнении упражнений из математических книг, начиная с книг по основам линейной алгебры и комбинаторики (чего хватало с лихвой в Аризоне), заканчивая "Алгебраической геометрией" Хартсхорна [Имеется в виду классическая книга «Алгебраическая геометрия» Р. Хартсхорна, издававшаяся в том числе и на русском языке в издательстве «Мир» — прим. пер.].
В 1997 я был аспирантом в Беркли и не желая много преподавать нашёл работу (финансируемую в рамках программы VIGRE Национального Научного Фонда [National Science Foundation, Национальный научный фонд — независимое агентство при правительстве США, отвечающее за развитие науки и технологий, далее — NSF — прим. пер.]) в департаменте, в течение одного года занимаясь составлением учебных программ по материалам вузовского курса алгебры вместе с однокурсником по аспирантуре Томом Инселом (Tom Insel). Несмотря на то, что я несколько лет использовал Linux, я никогда не думал о свободном ПО и о том, что реально некоторые люди могут контрибьютить в него. Я думал о Linux как о «Unix-е, который я могу установить на свой компьютер», и тогда некоторые платили за Linux, покупая CD, так как скорость загрузки через модем была очень низкой. Мы с Томом проводили много времени, работая вместе над нашим проектом, и он рассказал мне как написал некоторый софт, включённый в Slackware (дистрибутив Linux), так что получал бесплатные копии CD, когда выходили новые версии. Эй, всякий может контрибьютрить в Linux!
Припоминаю также, как Том часто жаловался на то, что мы вынуждены программировать на MATLAB-е для нашего проекта, и упоминал при этом множество альтернатив, которые лучше подходили бы для нашего дела, включая Java. Мы занимались программированием GUI с мелкими вкраплениями фактической математики, и MATLAB-овская основанная на хэндлах система написания графического интерфейса была настоящей болью. У меня был большой опыт по C/C++/Windows 3.1 GUI-разработке со времён моего студенчества в области computer science и я соглашался с тем, что MATLAB был совершенно неуклюжим для того, чем мы занимались в то время. Оглядываясь назад можно сказать, что то, что мы делали, вероятно бессмысленно и предположительно никогда не использовалось. Однако, опыт был очень ценным для нас обоих, и я рад, что NSF поддерживал это.
2. Кризис в написании диссертации. Алгебры Гекке, квадратичные поля. PARI. Гипотеза Манина — Мамфорда. Погружение в тему модулярных форм
По прошествии времени, моя диссертация на степень Ph. D. никуда не продвигалась, несмотря на 3 года аспирантуры. Однажды я услышал о задаче, которую Кен Рибет (Ken Ribet) задавал всем аспирантам: «Существует ли простое число p, такое что алгебра Гекке [названа в честь немецкого математика Эриха Гекке (Erich Hecke), имя которого ещё будет упоминаться в этой публикации — прим. пер.] уровня p разветвлена на p?» Это, насколько я помню, первая исследовательская задача из тех, о которых я слышал, что их почти наверняка невозможно решить без использования компьютера. Вместе с однокашниками Яношом Чириком (Janos Csirik, сейчас в D. E. Shaw), Мэттом Бэйкером (Matt Baker, сейчас в Georgia Tech) мы поискали и нашли одну публикацию Хиджикаты (Hijikata), я думаю, из середины 1970-х, которая позволяла дать ответ на вышеозначенный вопрос для определённых p. Но для реализации алгоритма необходимо было бы вычислить числа классов большого количества квадратичных полей, но никакая математическая программа, о которых я слышал к тому моменту, не могла бы сделать этого. Янош и Мэтт порекомендовали PARI, и я установил её на свой компьютер. И действительно, с её помощью удалось быстро и просто вычислять группы классов! PARI была также первой из свободных математических программ, с которыми я столкнулся.
Кеннет Алан (“Кен”) Рибет — американский математик. Специалист по алгебраической теории чисел и алгебраической геометрии. Проложил “мост” между гипотезой Таниямы-Шимуры-Вейля (Taniyama-Shimura-Weil) и Большой теоремой Ферма, на чём основывался Эндрю Уайлс (Andrew Wiles) при доказательстве последней. Академический “отец” упомянутых в этой статье Яноша Чирика, Димитра Жечева (последний будет фигурировать во второй части) а также Бьёрна Михаила Пунена (Bjorn Mikhail Poonen) (академическим “сыном” которого является Уильям Стайн).
Итак, я начал кодить алгоритм (формула следа Эйхлера-Сельберга (Eichler-Selberg) [1, 2]) на PARI. У меня был большой опыт с C++, который является полноценным языком программирования с определяемыми пользователем типами данных, обработкой исключений, шаблонами и т. д. Я помню как в 1992-м я обстоятельно прочитал ряд книг по C++ от корки до корки и то, как я давным-давно писал много кода (видеоигры!) на C++. В то же время, PARI произвела совершенный шок. Это был язык без локальных переменных, без настоящих областей видимости, только лишь с несколькими встроенными типами и, как я некоторое время (неправильно) думал, все определения функций должны быть на одной строке, как это имело место в примере кода, который я нашёл. Однако, алгоритмы из области алгебраической теории чисел, реализованные во внутренней библиотеке были прекрасны, глубоки и очень быстры. В итоге я имплементировал формулу следа и запустил то, что реализовал, в попытке быстро предоставить ответ Рибету. Программа не работала — базовая проверка целостности завершилась неудачей. Обнаружилось, что имеется существенный баг в алгоритме вычисления групп классов. В частности, в функции qfbclassno, молча возвращавшей неправильные ответы.
Вы можете подумать, что qbfclassno тут же была исправлена. Куда там! Прошло чёртовых 12 лет!!! Я только что проверил — в документации на PARI по-прежнему утверждается: «Важное замечание. Для D < 0 эта функция может давать некорректные результаты, т. к. реализация метода Шенкса (Shanks) во всей общности чрезвычайно снижает её скорость.» Это зарыто в документации. Единственное изменение, как мне думается, в том что в 1997-м документация утверждала, что авторы «слишком ленивы», чтобы реализовать алгоритм полностью.
В итоге я нашёл обходное решение задачи и смог выполнить алгоритм для любых простых чисел в пределах 300, но не нашёл ни одного такого простого, которое соответствовало бы вопросу Рибета. Несколькими неделями позже, на Аризонской Зимней Школе в марте 1998-го в городе Тусон штата Аризона (http://math.arizona.edu/~swc/aws/98/98GenlInfo.html) я изложил это Джо Уэзереллу (Joe Wetherell, который был ещё одним аспирантом из Беркли) во время похода на обед, и он рассказал мне, как он написал программу — тоже на PARI — для вычислений с модулярными символами (следуя книге Джона Кремоны (John Cremona)), что помогло бы и мне немного продвинуть вычисления вперёд. Позже он дал мне копию, я начал обыгрывать это и вычислил дискриминанты всех алгебр Гекке простых уровней в пределах 500.
? M37 = modsym(37,+1);
1. Generating M-symbols (0 ms)
2. Hashing M-symbols (2 ms)
3. Quotienting out by relations (3 ms)
4. Computing the kernel of delta (0 ms)
Total time....................... (5 ms)
? factor(charpoly(T(2,M37)))
%27 =
И снова я не нашёл ни одного примера, о чём я рассказал в письме Кену Рибету. После чего я запрыгнул в самолёт и полетел в Англию, в Кембридж, чтобы навестить Кевина Баззарда (Kevin Buzzard).
Как только я приземлился в Кембридже, я почему-то перепроверил свои вычисления… и нашёл пример для простого p=389! Каким-то образом я потерял пример при моей предыдущей проверке. Я был очень взволнован, написав Кену Рибету, моим первым настоящим вкладом в математические исследования, которые появились в большой статье по гипотезе Манина — Мамфорда [названа в честь высказавших её советско-американского математика Юрия Ивановича Манина, которого автор ещё упомянет в данной публикации, и американского математика Дэвида Брайанта Мамфорда (David Bryant Mumford) — прим. пер.], опубликованной Кеном — я показал, что его новая теорема совершенно определённо не доказывает эту гипотезу для всех модулярных кривых. Я также подсел на вычисления модулярных форм и начал составлять таблицы. В то же время в Англии достиг своего апогея страх перед коровьем бешенством, и я стал вегетарианцем.
Я пытался применить программу PARI, которую дал мне Джо Уэзерелл, к созданию больших таблиц, но она быстро «выдохлась». Основные алгоритмы, с которыми был связан алгоритм для модулярных символов — это всевозможная линейная алгебра над рациональными числами, включая вычисления характеристических многочленов и ядер разреженных и плотных матриц, а также факторизация многочленов над целыми числами. Вопреки своим первоклассным возможностям в области алгебрарической теории чисел, PARI была (и является до сих пор) ужасной в линейной алгебре с действительно большими матрицами над рациональными числами. Так что я обнаружил, что язык PARI адски наивен.
3. 1998-й. Дальнейшее погружение в модулярные формы. HECKE, LiDIA, NTL
Далее, я провёл лето 1998-го за написанием гораздо более общей программы на C++ для вычислений с модулярными формами под названием HECKE [в честь Эриха Гекке, см. выше — прим. пер.]. Вот она: http://wstein.org/Tables/hecke-cpp.html. Если вы скачаете файл hecke-july99.gz с этой веб-страницы и распакуете его на практически любой линуксовой машине, он должен сразу оказаться работоспособным.
tarte% ./hecke-july99
HECKE Version 0.4, Copyright (C) 1999 William A. Stein
HECKE comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under certain conditions; read the included COPYING file for details.
HECKE: Modular Forms Calculator Version 0.4 (July 9, 1999)
William Stein
Send bug reports and suggestions to was@math.berkeley.edu.
Type ? for help.
Так или иначе я провёл всё своё время в течение многих месяцев за написанием HECKE. Эта программа построена на ряде других C++-овых математических библиотек, включая LiDIA и NTL. В ней не используется PARI, потому что PARI, написанная на C… ну очень причудлива, и в то же время LiDIA/NTL имеет эквивалентную функциональность. Основное время, которое я провёл с HECKE, было посвящено (1) разработке алгоритмов, обобщающих работу с книгой Кремоны и т. д. и (2) реализации и оптимизации алгоритмов линейной алгебры над рациональными числами. Для (2) Кевин Баззард ознакомил меня с подобным же кодом, который использовал Кремона, и который был получен последним от кембриджского студента из Южной Америки по имени Луис. Я тогда провёл большое количество времени оптимизируя тот код для своих вычислений. Алгоритмы, фактически использовавшиеся в том коде, были очень наивными по сравнению с алгоритмами в Sage сейчас, но они были лучше, чем какие-либо, доступные в другом ПО, о котором я знал, или те, которые имелись в исследовательских публикациях того времени.
Эрих Гекке — немецкий математик, специалист по аналитической теории чисел. Тематика диссертации — модулярные функции, программу для вычисления которых (созданную до системы Magma) Уильям Стайн назвал в честь него.
Я мог вычислить множество довольно изощрённых таблиц используя HECKE, и скоро эта программа стала канонической для вычислений с модулярными формами, поскольку это было единственное ПО вообще доступное для таких вычислений. Это, пожалуй, похоже на то, сколь КАПРИЗНЫМ было долгое время каноническое ПО для вычисления групп автоморфизмов графов. Естественно, я сделал HECKE свободно доступным на своей веб-странице. Я помню, как однажды получил письмо от Кена Оно (Ken Ono), который вероятно написал более 100 статей о модулярных формах, будучи весьма вдохновлённым конкретными примерами. Он натолкнулся на HECKE на моей веб-странице, установил эту систему и был совершенно сражён её возможностями и тем, насколько полезной она могла бы стать для его исследований. Целый новый мир открылся для него, и, по его рассказам, он тут же заказал новый быстрый компьютер специально для запуска HECKE на нём. Я был счастлив помочь. К тому же стали улучшаться дела с моей диссертацией, поскольку вычисления, которыми я занимался, предлагали новую интересную (и осуществимую) математику, это работало «в обе стороны».
4. 1999-й. Знакомство с Magma. Числа Тамагавы модулярных абелевых многообразий и гипотеза Бёрча — Свиннертон-Дайера
Потом, в 1999-м, Дэвид Коэл (David Kohel), который был аспирантом в Беркли вместе со мной до декабря 1996-го, приехал в Беркли из Сиднея и рассказал мне о реализации относящихся к его диссертации алгоритмов на Magma. Я думаю, это был первый случай, когда я услышал про Magma, несмотря на то, что системе было уже несколько лет. Magma была дорогостоящей и её было практически невозможно достать, если вы не знаете правильного человека, поскольку она продавалась через неформальные каналы. Я думаю, она была установлена на компьютеры в Беркли, но эти компьютеры были старинными винтажными рабочими станциями Sun из 1990-х, так что никто серьёзно и не пытался их использовать. Тем не менее, Дэвид написал код для вычисления с рациональными кватернионными алгебрами, и это была единственная реализация этого алгоритма в мире. По совпадению, я развил старую идею Рибета чтобы придумать новый алгоритм вычисления чисел Тамагавы модулярных абелевых многообразий (см. http://wstein.org/papers/ants/ и http://wstein.org/papers/compgrp/). Я очень, очень хотел реализовать мой алгоритм, потому что это позволило бы мне вычислить все инварианты в гипотезе Бёрча — Свиннертон-Дайера (за исключением Sha [здесь, надо полагать, отсылка к группе Тейта-Шафаревича — прим. пер.]) для большинства модулярных абелевых многообразий ранга 0, что было бы огромным шагом вперёд. Но мой алгоритм имел непосредственное отношение как раз именно к тем вычислениям в рациональных кватернионных алгебрах, которые Дэвид Коэл реализовал в Magma. И это не было мелочью — это сложный алгоритм, он отнимает у того, кто знаком с релевантной теорией, месяцы основанной на множестве различных базовых умений работы по реализации и оптимизаци. Моя диссертация подошла к завершению. Дэвид, бывший тогда официальным разработчиком Magma, имел возможность предоставить мне копию Magma, содержавшую его код, для моего компьютера. Скомбинировав это всё с HECKE и скопипастив, я был первым, кто систематически вычислил числа Тамагавы общих модулярных абелевых многообразий (по простым числам мультипликативной редукции). [Здесь сложный для перевода оборот, для которого непросто найти релевантный пример употребления. Если среди читателей найдутся профессиональные математики, знакомые с этой областью — просьба подсказать, как это по-русски и в каких публикациях об этом говорится. В оригинале: «at primes of multiplicative reduction». — прим. пер.]
Так в 1999-м Дэвид Коэл поставил меня в такую ситуацию, что я оказался совершенно зависим от несвободной программы с закрытыми исходниками при продолжении своих исследований. По иронии судьбы, в течение того же вечера он рассказал мне про Общественную Лицензию GNU (GPL) и предложил, чтобы я выпустил HECKE под GPL. До того момента я никогда не слышал про GPL. Я сделал так, как он предлагал, не представляя что это на самом деле означало. Пожалуй, это было удачей, поскольку HECKE имел в качестве зависимостей NTL и LIDIA, лицензией NTL была GPL, но лицензия системы LIDIA была GPL-несовместимой, так что технически предположительно HECKE не подлежала распространению. Между прочим, LIDIA до сих пор имеет GPL-несовместимую лицензию, несмотря на множество полученных мной писем с настойчивыми предложениями сменить лицензию на GPL — лицензии меняются непросто, поскольку надо получить согласия со стороны всех владельцев авторских прав.
Конечно, я использовал Magma на некотором уровне для выполнения всех этих вычислений. Но несмотря на то, что я имел большой опыт в программировании, я с самого начала счёл систему Magma и её язык чрезвычайно тяжёлыми для изучения и применения. Поначалу использовать её было труднее, чем PARI. С одной стороны, Magma является массивной системой, с тысячами команд и тысячами страниц руководства, но с другой стороны имеет очень малые возможности для рефлексии, например, имея объект A трудно получить контекстную справку об A. Тем не менее, одно было ясно: Magma была значительно лучше в плотной линейной алгебре [3, 4] над рациональными числами, чем HECKE. Это был целый отдельный мир. Речь идёт об ошеломляющей скорости. Фактически, Magma в поздние 1990-е на старом компьютере была куда быстрее в большой линейной алгебре [В оригинале: «large linear algebra» — прим. пер.] над рациональными числами, чем Maple или Mathematica сегодня на новейшем аппаратном обеспечении. Вскоре я нашёл причину.
5. Вовлечение в Magma. Приём в группу разработчиков Magma. Линейная алгебра. Первые мысли о собственной системе
Австралиец Аллан Стил (Allan Steel) — энтузиаст, бывший в начале 1990-х студентом Университета Сиднея и влюблённым в проект Magma. Предполагаю, что Дэвид Коэл рассказал Джону Кэннону (John Cannon) обо мне в 1999-м и Аллану выпал случай приехать в Беркли на конференцию. Так мы встретились с Алланом. Наша беседа продолжалась гораздо больше трёх дней. Аллан отвечал мне на любой вопрос о языке и системе как правило вместе с рассказом о том, как он реализовал то-то таким-то образом и по какой причине. Так за несколько дней я узнал Magma достаточно хорошо, чтобы вполне продуктивно её использовать. Также Аллан дал мне несколько намёков относительно того, почему линейная алгебра была столь быстрой: вместе с полиномиальной и целочисленной арифметикой асимптотически быстрая линейная алгебра была одним из его главных интересов. Он растолковал впечатляющий ряд алгоритмов, многие из которых он разработал, или — что ещё важнее, — сделал практически применимыми. В них была масса трюков, о которых я никогда не слышал, таких как рациональная реконструкция (rational reconstruction), многомодулярные алгоритмы, p-адические алгоритмы, и т. д., которые шли существенно дальше того, что я делал применяя HECKE, или видел в каком либо другом ПО. Это значило, что имеется возможность продвинуть мои вычисления модулярных форм существенно дальше. Всё, что я должен был сделать, это переписать HECKE на языке Magma.
Шёл мой последний год аспирантуры в Беркли, и я должен был написать диссертацию, но вместо этого Джон Кэннон перетащил меня в Австралию, в Сидней, чтобы трудиться вместе с группой разработчиков Magma в течение месяца, целью чего было сделать полностью новую реализацию всех алгоритмов HECKE поверх Magma. Я разделял офис с немцем Клаусом Фикером (Claus Fieker), который помимо прочего реализовал большую часть теории алгебраической теории чисел в Magma. Как только я начал это дело, я обрёл ряд серьёзных забот, включая следующие: пользователям Magma не разрешалось определять собственные типы (или классы), там не было механизма перехвата исключений, не было инструкции «eval», не было способа писать компилируемый код, Magma имела закрытые исходники и не была свободным ПО. Я обозначил все эти проблемы Кэннону и другим и был тогда уверен, что все они действительно будут рассмотрены быстро, исключая часть, относящуюся к «свободе». Касательно «свободы», они сказали, что я могу делиться копиями Magma с кем угодно, коль скоро я предварительно буду ставить в известность Джона Кэннона. Не знаю, почему именно, но я запомнил как однажды в течение того месяца в 1999-м во время прогулки по парку возле кампуса Университета Сиднея мимо озера с утками, присев на скамейку, осознал, что я принесу большую жертву в виде своей свободы в качестве исследователя, если пойду дальше по этому пути. Magma не была системой с открытым исходным кодом — Джон Кэннон имел полный контроль над ней. Magma не была свободной. И как язык Magma существенно уступала C++. В ней даже не имелось интуитивно понятной реализации областей видимости, и новые типы данных добавлялись путём внесения записей в большие таблицы, затем пересобиралось ядро. Я спросил Кэннона, почему всё было таким отсталым, и он объяснил, что те гранты, которые он сумел выхлопотать, просто не предполагали оплату дизайна языка. Те люди, которые поддерживали Magma финансированием (преимущественно субсидирующие агентства) поддержали бы только реализацию и оптимизацию математических алгоритмов, и лицензионные выплаты выдавались бы только для «поддержки», последнее обычно обозначало человека, кто собирал бы плату за лицензии и распространял бы Magma через FTP. Десятью годами позже язык Magma был едва ли хоть как-то улучшен. Они наконец сделали перехват исключений, но по-прежнему не было определяемых пользователем типов и т. д. и т. п. Тем не менее библиотека функциональности, реализованной в Magma, была огромной; особенности языка не останавливали людей от реализации множества восхитительных алгоритмов, поддержавших великое множество исследований в теории чисел и других областях.
Сидя на скамейке в том парке я ясно представил, насколько опасный путь избрал, столь существенно отказавшись от свободы на таком раннем этапе своей карьеры. В тот момент я принял решение не делать этого. Тогда я стал планировать то, чем в итоге станет Sage. Я стал думать о языке, который я имплементирую (я прошёл курс написания интерпретаторов, когда был студентом), о реализации всех алгоритмов линейной алгебры, подсказанных Алланом (не сообщившим, однако, подробности), и т. д. Тогда я представил, что если я сделаю так, я буду вынужден заниматься этим самостоятельно, так как практически все, кого я знал, использовали Magma, так что посчитали бы мой план очень сложным и бесполезным. Мне придётся отложить занятия теорией чисел на годы. Мой дух был сломлен. И Кэннон сообщил мне, что многие из моих претензий к Magma будут рассмотрены в течение года.
Я провёл следующие 5 лет за написанием и использованием Magma. Я совершил множество выступлений всюду, убеждая всякого, кто был намерен производить вычисления с модулярными формами, что Magma лучше всего подходит для этого. Я раздавал бесплатные копии Magma (с официального благословения Джона Кэннона), вёл для студентов курсы с использованием Magma и был, в общем-то, весьма продуктивен. Кроме того в 2003 у меня была хорошо оплачиваемая работа, так что у меня начала формироваться философия в отношении ПО, заключающаяся в том, что я буду судить о том, какое ПО использовать, основываясь исключительно на предоставляемых им возможностях и его функциональности, а не на цене или открытости.
Я начал постоянно использовать Microsoft Windows, поскольку эта система лучше поддерживала мой КПК и имела больший диапазон совместимых программ. Я купил пакет ПО от Adobe за сумму в районе 500 долларов (с образовательной скидкой) для редактирования видео, фото, векторной графики и т. п. И конечно я использовал Magma. Я был хорошо оплачиваемым преподавателем в хорошо финансируемом университете (Гарвард) и желал лучшего, что можно застать за деньги.
Продолжение, если Хабрасообществу этот перевод покажется интересным, следует.
Автор: Ostrie_Brevna