J'ai essayé de lire « Perles de conception d'algorithmes fonctionnels », puis « L'algèbre de programmation », et il existe une correspondance évidente entre les types de données définis de manière récursive (et polynomiale) et les objets combinatoires, ayant la même définition récursive et menant par la suite à la même série de puissance formelle (ou fonctions génératrices), comme indiqué dans les introductions aux espèces combinatoires (j'ai lu " Espèces et foncteurs et types, Oh My! ").
Donc, pour la première question, existe-t-il un moyen de récupérer l'équation génératrice (récursive) de la série de puissances? C'est une réflexion après coup.
J'étais plus intéressé par la notion d'algèbres initiales et de co-algèbres finales comme une sorte de «procédures de définition de la structure des données». Il existe quelques règles pratiques en programmation fonctionnelle, concernant la composition, les produits de mappage entre algèbres et similaires, décrites par exemple dans ce tutoriel. Il me semble que cela pourrait être un moyen assez puissant d'approcher la complexité et par exemple, il semble assez simple de récupérer le théorème du Maître dans un tel contexte (je veux dire, vous devez faire le même argument, donc pas beaucoup de gain dans ce cas), et le catamorphisme unique de l'algèbre initiale et le fait (je me trompe?) que les algèbres entre A et FA pour le foncteur polynomial F sont isomorphes, me fait penser qu'une telle approche pourrait avoir beaucoup d'avantages dans l'analyse de la complexité de opérations sur les structures de données.
D'un point de vue pratique, les règles de fusion (essentiellement, les moyens de composer les morphismes d'algèbre les uns avec les autres, les morphismes de houille et les morphismes généraux) sont des techniques d'optimisation très puissantes pour la transformation de programme et la refactorisation. Ai-je raison de penser que la pleine utilisation de ces règles peut produire un programme optimal (pas de structures de données intermédiaires inutiles ou d'autres opérations supplémentaires).
Suis-je sur quelque chose (et quoi) ici? Est-il avantageux (du point de vue de l'apprentissage) d'essayer de voir la complexité informatique de cette manière? Les structures, pour lesquelles nous pouvons avoir de "belles" algèbres initiales sont en quelque sorte trop limitées pour certains problèmes?
J'essaie principalement de trouver un moyen de penser la complexité en termes de structure de l'espace de recherche et de la façon dont "l'espace de recherche" et "l'algorithme de recherche" interagissent à travers un objet "agréable" comme l'algèbre initiale du foncteur et pour comprendre s'il est utile d'essayer de voir les choses de cette façon, quand on regarde des structures plus compliquées.