Existe-t-il des langages de programmation (ou logique) qui peuvent implémenter (ou exprimer) une fonction si et seulement si est une fonction bijective calculable? f
Existe-t-il des langages de programmation (ou logique) qui peuvent implémenter (ou exprimer) une fonction si et seulement si est une fonction bijective calculable? f
Réponses:
Il n'y a pas un tel langage.
Cependant, jetez un œil à Boomerang . C'est un langage pour écrire des bijections entre les chaînes. Je ne sais pas dans quelle mesure une classe de cartes y est exprimable, mais je suis sûr que vous pouvez savoir si vous recherchez un peu.
Il est raisonnable d'exiger d'un langage de programmation que l'ensemble des programmes valides soit reconnaissable par un interprète ou un compilateur, c'est-à-dire qu'il s'agisse d'un ensemble énumérable par ordinateur. Supposons alors que nous disposions d'un langage de programmation dont l'ensemble des programmes valides était calculable et qui implémentait précisément toutes les bijections calculables . Cela impliquerait que nous pouvons énumérer de manière calculable toutes les bijections calculables (simplement énumérer tous les programmes valides dans ce langage de programmation), mais cela est impossible par le théorème suivant.
Théorème: Supposons que est une séquence calculable de bijections calculables. Ensuite, il y a une bijection calculable qui n'est pas dans la séquence.
Preuve. Nous construisons une bijection comme suit. Pour définir les valeurs et , nous regardons : g ( 2 k ) g ( 2 k + 1 ) f k ( 2 k )
Clairement, pour chaque , est différent de car . De plus, est calculable et c'est une bijection car c'est son propre inverse. QED. g f k g ( 2 k ) ≠ f k ( 2 k ) g