Я пытался прочитать « Жемчужины разработки функциональных алгоритмов », а затем « Алгебру программирования », и есть очевидное соответствие между рекурсивно (и полиномиально) определенными типами данных и комбинаторными объектами, имеющими то же самое рекурсивное определение и впоследствии ведущим к тому же формальному степенному ряду (или порождающим функциям), как показано во введении к комбинаторным видам (я читаю « Виды, функторы и типы, Боже мой! »).
Итак, для первого вопроса, есть ли способ восстановить порождающее (рекурсивное) уравнение из степенного ряда? Это запоздалая мысль все же.
Меня больше интересовало понятие начальных алгебр и конечных коалгебр как своего рода «определения процедур относительно структуры данных». В функциональном программировании есть несколько практических правил, касающихся композиции, продуктов отображения между алгебрами и аналогичных, описанных, например, в этом руководстве, Мне кажется, что это мог бы быть довольно мощный способ приблизиться к сложности, и, например, выглядит довольно просто восстановить теорему Мастера в таком контексте (я имею в виду, что вы должны использовать один и тот же аргумент, так что в этом случае не так уж и много), и уникальный катаморфизм исходной алгебры и тот факт (я ошибаюсь?), что алгебры между A и FA для F-полиномиального функтора изоморфны, заставляют меня думать, что такой подход может иметь много преимуществ в анализе сложности операции над структурами данных.
С практической точки зрения, правила слияния (в основном, способы составления морфизмов алгебры друг с другом, морфизмы коалгебры и общие морфизмы) являются очень мощным методом оптимизации для преобразования и рефакторинга программы. Прав ли я, полагая, что полное использование этих правил может привести к созданию оптимальной программы (без ненужных промежуточных структур данных или других дополнительных операций).
Я на что-то (и что) здесь? Является ли выгодным (с точки зрения обучения) попытаться взглянуть на вычислительную сложность таким образом? Являются ли структуры, для которых мы можем иметь «хорошие» начальные алгебры, слишком ограниченными для некоторых задач?
В основном я пытаюсь найти способ думать о сложности с точки зрения структуры пространства поиска и того, как «пространство поиска» и «алгоритм поиска» взаимодействуют через некоторый «красивый» объект, такой как начальная алгебра функтора и чтобы понять, полезно ли пытаться смотреть на вещи таким образом, рассматривая более сложные структуры.