¿Se pueden expresar propiedades como el uso de memoria de una función en un lenguaje de tipo dependiente?

11

Supongamos que uno quiere razonar sobre las propiedades del código más allá de cosas como la totalidad y la pureza funcional; también se preocupa por el consumo de memoria o la complejidad algorítmica de una función. ¿Se puede hacer esto a través de sistemas de mecanografía y efectos dependientes?

Dr. John A Zoidberg
fuente
2
En este video, Brian McKenna proporciona un ejemplo de codificación de la complejidad del tiempo en tipos.
Anton Trunov el

Respuestas:

8

Sí puede. Si bien conceptualmente no es tan difícil, no se ha estudiado tanto. Un aspecto del campo es la semántica de costos, como la investigación realizada por Guy Blelloch .

En la línea del video que Anton mencionó es el trabajo de Daniellson en Lightweight Semiformal Time Complexity Analysis for Purely Functional Data Structures . De hecho, esto usa una mónada para llevar un costo por operación. Una mónada similar, a nivel semántico, se utiliza en la semántica de costos de denominación para lenguajes funcionales con tipos inductivos . Aquí hay un artículo de 2016 que hace algo similar en Coq, una biblioteca de Coq para la verificación interna de tiempos de ejecución .

La gente de NuPRL también ha estado interesada en hacer cosas como esta. En Expresando la complejidad computacional en la teoría del tipo constructivo , que básicamente equivale a calcular sobre una semántica operacional estructurada. Donde se vuelve un poco más interesante es que puedes reflejar la semántica del lenguaje en el idioma. El ejemplo en la sección final, sección 12, de la teoría ingenua del tipo computacional ilustra y discute este tipo de cosas.

Derek Elkins dejó SE
fuente