Anamorfismos

Del griego ana- (hacia arriba, de nuevo, o inversión) + morphē (forma) + el sufijo -ismo (actividad o doctrina).

Un anamorfismo consiste en la expansión de cualquier tipo a un tipo co-inductivo.
Podemos representarlo en forma de cuadrado para mostrar el funtor generador de ambos tipos y el anamorfismo \(f\) entre ellos.

1
2
3
4
5
6
     out
A ────────→ F.A
↑            ↑
│ f          │ F.f
│     ρ      │ 
B ────────→ F.B

\(\rho\) determina de forma única como será el anamorfismo \(f\), así, se denota \(f = [(\rho)]\).
Este cuadrado debe cumplir la propiedad de que ir por cualquiera de sus dos direcciones desde \(B\) hasta \(F.A\) es equivalente. Así, la ana-caracterización es definir exactamente esto:
\(out\circ f = F.f \circ \rho\)

El anamorfismo puede visualizarse como una fábrica extrusora. Se parte de un núcleo indivisible (la semilla) y se le aplica un generador (la co-álgebra \(\rho\)) capa por capa de arriba hacia abajo.
Por ejemplo:

               [Semilla: 3]
            ┌───────┴───────┐
            │ Generador ana │ ◄─ ¿Es 0? No.
            └───────┬───────┘    Escupe (x :) y resta 1.
            (x :)   │
               [Semilla: 2]
            ┌───────┴───────┐
            │ Generador ana │ ◄─ ¿Es 0? No.
            └───────┬───────┘    Escupe (x :) y resta 1.
            (x :)   │
               [Semilla: 1]
            ┌───────┴───────┐
            │ Generador ana │ ◄─ ¿Es 0? No.
            └───────┬───────┘    Escupe (x :) y resta 1.
            (x :)   │
               [Semilla: 0]
            ┌───────┴───────┐
            │ Generador ana │ ◄─ ¿Es 0? Sí.
            └───────┬───────┘    Escupe [ ] y frena la cadena.
                   [ ]