Estou interessado no conceito de "completude r-Turing", conforme definido por Axelsen e Glück (2011) . Um sistema é r-Turing completo se puder calcular o mesmo conjunto de funções que uma máquina de Turing reversível, sem produzir dados de "lixo". É o mesmo que ser capaz de calcular todas as funções que são (a) computáveis e (b) injetivas.
Eu gostaria de explorar computacionalmente o espaço das funções injetáveis computáveis. Para fazer isso, estou procurando a linguagem de programação reversível "mínima" - algo que possa desempenhar o papel equivalente à computabilidade r-Turing que o cálculo lambda desempenha na computabilidade Turing.
Eu sei que existem muitas linguagens reversíveis que as pessoas desenvolveram e provaram serem r-Turing completas. No entanto, eles estão sendo desenvolvidos com aplicações práticas em mente e, portanto, seus autores se concentram em fornecer a eles recursos expressivos em vez de torná-los mínimos.
Alguém sabe se uma linguagem mínima invertível foi descrita ou se existe alguma pesquisa nessa direção? Eu sou bastante novo na literatura sobre esse tópico, então eu poderia facilmente ter perdido. Como alternativa, alguém tem alguma ideia de como essa linguagem pode ser criada?
Abaixo está um resumo do que estou procurando. Não sei se ele pode ser criado modificando o próprio cálculo lambda ou se um tipo de linguagem completamente diferente precisaria ser usado.
- Linguagem completa r-Turing - calcula todas as funções invertíveis computáveis e só pode computar funções invertíveis
- Sintaxe e semântica o mínimo possível. (Por exemplo, o cálculo Lambda tem apenas definições e aplicações de funções, e nada mais.) Não é necessário que a sintaxe ou a semântica estejam relacionadas às do cálculo lambda, embora possam ser.
- Programa = dados. Ou seja, os programas operam em expressões e não em qualquer outro tipo de dados. Isso garante que a saída de um programa sempre possa ser interpretada como um programa. Provavelmente, isso implica que deve ser um estilo de linguagem funcional, e não imperativo.
- Existe uma maneira sistemática de converter um programa em seu inverso, o que não envolve substancialmente mais computação do que a envolvida na execução real da computação inversa. (Nem todos os idiomas invertíveis possuem essa propriedade, mas alguns possuem.)
Devo enfatizar que a abordagem de Axelsen e Glück à computação reversível é bem diferente da abordagem conhecida devido a Bennett, onde um programa (geralmente não invertível) é tornado invertível retornando algumas informações sobre o histórico da computação junto com a saída. A integridade do r-Turing consiste em poder calcular funções injetáveis sem nenhuma saída adicional. Existem várias coisas chamadas variações de "cálculo lambda reversível" que são reversíveis no sentido de Bennet - não é isso que estou procurando.