Se você assumir que o calculus é um bom modelo de linguagens de programação funcional, então pode-se pensar: o λ- calculus tem uma noção aparentemente simples de complexidade de tempo: basta contar o número de etapas de redução β ( λ x . M ) N → M [ N / x ] .λλβ( λ x . M) N→ M[ N/ x]
Mas isso é uma boa medida de complexidade?
Para responder a essa pergunta, devemos esclarecer o que entendemos por medida de complexidade em primeiro lugar. Uma boa resposta é dada pela tese de Slot e van Emde Boas : qualquer boa medida de complexidade deve ter uma relação polinomial com a noção canônica de complexidade de tempo definida usando máquinas de Turing. Em outras palavras, deve haver um 'razoável' que codifica A partir de X termos -calculus para máquinas Turing, tal para alguns polinómio p , que é o caso que, para cada termo M de tamanho | M | : M reduz para um valor em p ( | M |t r ( . )λpM| M|M etapas de redução β exatamente quando t r ( M ) se reduz a um valor emetapas p ( | t r ( M ) | ) de uma máquina de Turing.p ( | M| ) βt r ( M)p ( | t r ( M) | )
Durante muito tempo, não ficou claro se isso pode ser alcançado no cálculo λ. Os principais problemas são os seguintes.
- Existem termos que produzem formas normais (em um número polinomial de etapas) que são de tamanho exponencial. Mesmo anotando os formulários normais leva tempo exponencial.
- A estratégia de redução escolhida desempenha um papel importante. Por exemplo, existe uma família de termos que reduz em um número polinomial de etapas β paralelas (no sentido de redução λ ideal ), mas cuja complexidade é não elementar (significando pior que exponencial).
O artigo " Beta Reduction is Invariant, Indeed ", de B. Accattoli e U. Dal Lago, esclarece a questão, mostrando uma codificação 'razoável' que preserva a classe P de complexidade das funções de tempo polinomial, assumindo reduções de chamada por nome mais à esquerda . O insight principal é que a explosão exponencial só pode acontecer por razões 'desinteressantes' que podem ser derrotadas pelo compartilhamento adequado. Em outras palavras, a classe P é a mesma, independentemente de você a definir contando as etapas da máquina de Turing ou as reduções (mais à esquerda na extrema) .β
Não tenho certeza de qual é a situação para outras estratégias de avaliação. Não sei que um programa semelhante foi realizado para complexidade do espaço.