Je m'intéresse au concept de "complétude r-Turing", tel que défini par Axelsen et Glück (2011) . Un système est r-Turing complet s'il peut calculer le même ensemble de fonctions qu'une machine de Turing réversible, sans produire de données "poubelles". C'est la même chose que de pouvoir calculer chaque fonction à la fois (a) calculable et (b) injective.
Je voudrais explorer par calcul l'espace des fonctions injectives calculables. Pour ce faire, je recherche le langage de programmation réversible "le plus minimal" --- quelque chose qui peut jouer le rôle équivalent pour la calculabilité r-Turing que le calcul lambda joue pour la calculabilité Turing.
Je sais qu'il existe de nombreux langages réversibles que les gens ont développés et qui se sont avérés être r-Turing complets. Cependant, ceux-ci sont développés avec des applications pratiques à l'esprit, et leurs auteurs se concentrent donc sur leur donner des fonctionnalités expressives plutôt que de les rendre minimales.
Est-ce que quelqu'un sait si un tel langage inversible minimal a été décrit ou s'il y a des recherches dans une telle direction? Je suis assez nouveau dans la littérature sur ce sujet, donc j'aurais facilement pu le manquer. Alternativement, quelqu'un a-t-il une idée de la façon dont un tel langage pourrait être créé?
Voici un résumé de ce que je recherche. Je ne sais pas s'il peut être créé en modifiant le lambda calcul lui-même, ou si un type de langage complètement différent devrait être utilisé.
- Langage complet r-Turing - calcule toutes les fonctions inversibles calculables et ne peut calculer que les fonctions inversibles
- Syntaxe et sémantique aussi minimes que possible. (Par exemple, le calcul lambda n'a que des définitions de fonction et des applications, et rien d'autre.) Il n'est pas nécessaire que la syntaxe ou la sémantique soient liées à celles du calcul lambda, bien qu'elles puissent l'être.
- Programme = données. Autrement dit, les programmes fonctionnent sur des expressions plutôt que sur tout autre type de données. Cela garantit que la sortie d'un programme peut toujours être interprétée comme un programme. Cela implique probablement qu'il doit s'agir d'un style de langage fonctionnel plutôt qu'impératif.
- Il existe un moyen systématique de convertir un programme en son inverse, ce qui n'implique pas beaucoup plus de calculs que celui impliqué dans l'exécution effective du calcul inverse. (Toutes les langues inversibles n'ont pas cette propriété, mais certaines en ont.)
Je dois souligner que l'approche d'Axelsen et de Glück en matière d'informatique réversible est assez différente de l'approche bien connue due à Bennett, où un programme (en général non inversible) est rendu inversible en renvoyant des informations sur l'historique du calcul avec la sortie. L'exhaustivité de r-Turing consiste à pouvoir calculer des fonctions injectives sans aucune sortie supplémentaire. Il existe plusieurs choses appelées variations du "calcul lambda réversible" qui sont réversibles au sens de Bennet - ce n'est pas ce que je recherche.
la source
Réponses:
Je ne connais pas très bien le domaine, mais il y a des travaux récents de la communauté des langages de programmation qui pourraient vous intéresser, basés sur l'idée de restreindre à un langage de type isomorphismes. En particulier, vous pouvez consulter
ainsi que diverses publications connexes que vous pouvez trouver sur le site Web d'Amr Sabry .
la source