He estado tratando de leer " Diseño de Algoritmo Funcional de Perlas " y, posteriormente, " El Álgebra de la Programación ", y existe una correspondencia obvia entre los tipos de datos definidos recursivamente (y polinomialmente) y los objetos combinatorios, que tienen la misma definición recursiva y posteriormente conducen a la misma serie de poder formal (o funciones generadoras), como se muestra en las introducciones a las especies combinatorias (leí " Especies y Functores y Tipos, ¡Dios mío! ").
Entonces, para la primera pregunta, ¿hay alguna manera de recuperar la ecuación generadora (recursiva) de la serie de potencia? Sin embargo, es una idea de último momento.
Estaba más interesado en la noción de álgebras iniciales y co-álgebras finales como una especie de "procedimientos definitorios sobre la estructura de datos". Existen algunas reglas prácticas en la programación funcional, relativas a la composición, productos de mapeo entre álgebras y similares, descritas por ejemplo en este tutorial.. Me parece que esta podría ser una forma bastante poderosa de abordar la complejidad y, por ejemplo, parece bastante sencillo recuperar el teorema de la Maestra en ese contexto (quiero decir, tienes que hacer el mismo argumento, por lo que no hay mucha ganancia en este caso), y el catamorfismo único del álgebra inicial y el hecho (¿me equivoco?) de que las álgebras entre A y FA para el functor polinomial F son isomórficas, me parece que tal enfoque podría tener muchos beneficios en el análisis de la complejidad de operaciones sobre estructuras de datos.
Desde el punto de vista práctico, parece que las reglas de fusión (básicamente, formas de componer morfismos de álgebra entre sí, morfismos de coalgebra y morfismos generales) son una técnica de optimización muy poderosa para la transformación y refactorización de programas. Estoy en lo cierto al pensar que la plena utilización de estas reglas puede producir un programa óptimo (sin estructuras de datos intermedias innecesarias u otras operaciones adicionales).
¿Estoy en algo (y qué) aquí? ¿Es beneficiario (desde el punto de vista del aprendizaje) tratar de ver la complejidad computacional de esta manera? ¿Son las estructuras, para las cuales podemos tener álgebras iniciales "agradables", de alguna manera demasiado limitadas para algunos problemas?
Principalmente estoy tratando de encontrar una manera de pensar sobre la complejidad en términos de la estructura del espacio de búsqueda y la forma en que el "espacio de búsqueda" y el "algoritmo de búsqueda" interactúan a través de algún objeto "agradable" como el álgebra inicial del functor y para entender si es útil tratar de ver las cosas de esta manera, al mirar estructuras más complicadas.