Перечитал давний доклад академика Арнольда В.И. о сложности последовательностей нулей и единиц, в которй он использует монады для определения сложности.
Доклад в двух вариантах, с красивыми картинками и академик тут очень красиво и подробно рассказывает, почему одна последовательность сложнее другой и как это видно и строгий вариант «Доклад в Московском математическом обществе»
Вот тут можно прочитать и посмотреть, советую
https://elementy.ru/nauchno-populyarnaya_biblioteka/430178/430281
Там много интересного, но запомнились монады, как инструмент, весьма наглядный, для демонстрации связей и путей от сложного к простому нулю. Если кратко, то монады это простое отображение множества на себя, т.е. каждый элемент множества отображается на элемент того же множества.
Это монады, что получились у академика. Чем дальше от корня, тем сложнее, так он в этом случае определил.

Вот и захотелось глянуть на монады точек эллиптической кривой над конечным полем.
Для исследований взял Python с его Jupyter и хорошую библиотеку SageMath, которая позволяет лихо оперировать эллитическими кривыми. Меня интересовали как раз кривые из которых в нынешнее время строится всё шифрование и прочие биткойны и весь мир сейчас вокруг этих кривых.
Поскольку там в реальности громадные числа, и считать там ооооочень долго, взял для примера простое число поменьше и кривую, всем известную.
Итак начнем.
Берем простое 103 или 0х67 для группы, уравнение кривой y² = x³ + 7 начальной точкой взял точку х = 1.
Получилась эллиптическая кривая с фактором 111 или 0х6F.
Так как у нас точек мало, сотня всего, можно перечислением все вычислить и построить словарь логарифмирования, т.е. ключ это координаты точки, а значение это множитель на точку G.
Точку (00, 01), которая бесконечность, назначим как -1 для полноты.
А теперь просто воспользуемся graphviz для построения графика отоборажения точек на точки, т.е. тех самых монад. Само отображение точек на точки видно в тексте python.
from sage.all import * import numpy as np n_primes = 103 E = EllipticCurve(GF(n_primes), [0, 7]) h = E.cardinality() G = E.lift_x(Integer(0x1)) o = factor(h-1) points = {} for k in range(1,h): path = [] P = k*G _sx = Integer(P[0]).hex() #.binary() _sy = Integer(P[1]).hex() #.binary() points['0'*(2-len(_sx))+_sx+'.'+'0'*(2-len(_sy))+_sy] = k points['00.01'] = -1 import graphviz dot = graphviz.Digraph(strict=True) for l in range(1,h): P = l*G for k in range(1,h): Pn =63*P _sx = Integer(P[0]).hex() _sy = Integer(P[1]).hex() _p_key = '0'*(2-len(_sx))+_sx+'.'+'0'*(2-len(_sy))+_sy _p_num = hex(points[_p_key]).replace('0x','') dot.node(f'{_p_key}', f'{_p_key} {_p_num}') # {Integer(k).hex()}') _sx = Integer(Pn[0]).hex() _sy = Integer(Pn[1]).hex() _pn_key = '0'*(2-len(_sx))+_sx+'.'+'0'*(2-len(_sy))+_sy _pn_num = hex(points[_pn_key]).replace('0x','') dot.node(f'{_pn_key}', f'{_pn_key} {_pn_num}') # {Integer(k).hex()}') dot.edge(f'{_p_key}', f'{_pn_key}') P = Pn dot #.render('111_63', format='png', cleanup=True)
Картинка оказалась очень интересной и точки оказались сгруппированы в простые кучки.
Это одна картинка, которую порезал на 6 частей для того, что бы вставить с статью






Каждая кучка точек представляет из себя цикл в каждой точке которого есть еще два листа. И таких кучек ровно 12.
Обратите внимание, что во всех точках каждого цикла значения y координаты Y одинаковые. Если взять это число за номер кучки, то и тут симметрия очевидна
[2, 12, 17, 39, 47, 48, 55, 56, 64, 86, 91, 101]
если не очевидна, то возьмите расстояния между кучками
[10, 5, 22, 8, 1, 7, 1, 8, 22, 5, 10]
тут симметрия видна явно и красиво.
Все листья в кучках тоже не случайны, они все с одинаковыми координатами y. Т.е. у кучки номер 38 все листья или 2d или 04, а у кучки номер 27 все листья или 1f или 4c.
Сумма номеров точек тоже совсем не случайна. Вот в кучке номер 27 сумма номеров листьев 1+26+1a+64+a+2f равна DE, а это 6F*2. 6F это кардинал группы. И сумма номеров цикла тоже 4b+3f+54=DE. В кучке 5b сумма номеров листьев 2+4c+34+59+14+5e равна 14D, а это 6F*3, а сумма номеров цикла 39+27+f равна 6F.
в кучке 65 тоже сумма номеров листьев 10+35+2e+53+31+56 равна 14D, а это 6F*3, а сумма номеров цикла 5a+c+9, те же самые 6F.
Это удивительные закономерности, точки эллиптической кривой оказались очень хорошо структурированы.
Есть и другие удивительные совпадения в этих картинках.
Практической пользы от этой статьи нет, это забава, игра ума,
просто «лето выдалось дождливое»
ссылка на оригинал статьи https://habr.com/ru/articles/931326/
Добавить комментарий