Est-il possible de tester si un nombre calculable est rationnel ou entier?

18

Est-il possible de tester algorithmiquement si un nombre calculable est rationnel ou entier? En d'autres termes, serait-il possible pour une bibliothèque qui implémente des nombres calculables de fournir les fonctions isIntegerou isRational?

Je suppose que ce n'est pas possible, et que cela est en quelque sorte lié au fait qu'il n'est pas possible de tester si deux nombres sont égaux, mais je ne vois pas comment le prouver.

Edit: Un nombre calculable est donné par une fonction qui peut retourner une approximation rationnelle de avec précision : , pour tout . Compte tenu de cette fonction, est-il possible de tester si ou ?xfx(ϵ)xϵ|xfx(ϵ)|ϵϵ>0xQxZ

dbarbosa
la source
3
Comment le nombre calculable est-il donné?
Tsuyoshi Ito
10
La façon dont le numéro est donné est bien sûr pertinente. À titre d'exemple stupide, si l'entrée contient un indicateur indiquant si le nombre est un entier ou non, décider si l'entrée est un entier ou non est trivial.
Tsuyoshi Ito
3
Question similaire: cstheory.stackexchange.com/questions/10495/…
Kristoffer Arnsfelt Hansen
3
(1) "Comment savez-vous qu'il s'agit d'un entier?" Pourquoi devrais-je m'en soucier? Vous n'avez rien dit sur les exigences relatives aux opérations. (2) «Si vous voyez les deux réponses jusqu'à présent, elles ne mentionnent rien de la mise en œuvre.» Je ne sais pas ce que vous entendez par «mise en œuvre» ici, ni pourquoi cette phrase est pertinente pour mes commentaires.
Tsuyoshi Ito
16
J'espère que ma réponse enterrera cette discussion. Tsuyoshi, vous vous trompez, il est pertinent de savoir quelles opérations sont calculables. Nous n'implémentons pas de vrais nombres dans le vide, mais pour les manipuler . Selon vous, nous pourrions simplement utiliser le type d'unité pour tout mettre en œuvre. Oui, nous le pourrions, mais certaines opérations ne seraient pas calculables, et c'est précisément le critère par lequel nous jugeons les représentations.
Andrej Bauer

Réponses:

32

Il est facile de se méprendre sur ce que signifie «représenter» ou «implémenter» un nombre réel. En fait, nous assistons à une discussion dans les commentaires où la représentation est controversée. Permettez-moi donc d'aborder cette question.

Comment savons-nous qu'une implémentation est correcte?

La théorie qui explique comment représenter les choses dans un ordinateur est la réalisabilité . L'idée de base est que, étant donné un ensemble , nous choisissons un type de données τ et pour chaque x X un ensemble de valeurs de type τ qui le réalisent . Nous écrivons v x X lorsque v est une valeur qui réalise x . Par exemple (j'utiliserai Haskell sans raison valable), une implémentation raisonnable de N pourrait être le type de données où v k N lorsque vXτXXτvXXvXNIntegervkNvs'évalue au nombre (donc en particulier ne représente pas un nombre naturel, pas plus qu'un programme divergent). Mais un petit rigolo pourrait marcher et suggérer que nous utilisons pour représenter des nombres naturels avec T r u e42 N et F a l s en N pour n 42 . Pourquoi est-ce incorrect? Nous avons besoin d'un critère .k¯-42BoolTrue42NFunelsenNn42

Dans le cas des «numéros joker», l'observation facile est que l'addition ne peut pas être mise en œuvre. Supposons que je vous dis que j'ai deux nombres, tous deux représentés par . Pouvez-vous donner un réalisateur pour leur somme? Eh bien, cela dépend si la somme est de 42, mais vous ne pouvez pas le dire. Étant donné que l'addition est "une partie essentielle de ce que sont les nombres naturels", cela est inacceptable. En d'autres termes, l'implémentation ne concerne pas les ensembles, mais les structures , c'est-à-dire que nous devons représenter les ensembles de manière à ce qu'il soit possible d'implémenter également la structure pertinente. Permettez-moi de souligner ceci:Funelse

Nous mettons en œuvre des structures, pas des ensembles nus. Par conséquent, nous devons être en mesure de mettre en œuvre la structure entière, ainsi que les opérations et tous les axiomes, afin que la mise en œuvre soit correcte.

Si vous ne respectez pas ce principe, vous devez alors suggérer un autre critère mathématique d'exactitude. Je n'en connais pas.

Exemple: représentation des nombres naturels

Pour les nombres naturels, la structure pertinente est décrite par les axiomes de Peano, et l'axiome crucial qui doit être implémenté est l'induction (mais aussi , successeur, + et × ). Nous pouvons calculer, en utilisant la réalisabilité, ce que fait l'implémentation de l'induction. Cela s'avère être une carte (où est le type de données encore inconnu qui représente les nombres naturels)0+×nat

induction : 'a -> (nat -> 'a -> 'a) -> 'nat -> 'a

satisfaisant induction x f zero = xet induction x f (succ n) = f n (induction x f n). Tout cela vient de la réalisabilité. Nous avons un critère: une implémentation de nombres naturels est correcte lorsqu'elle permet une implémentation d'axiomes de Peano. Un résultat similaire serait obtenu si nous avons utilisé la caractérisation des nombres comme l'algèbre initiale du foncteur .X1+X

Mise en œuvre correcte des nombres réels

Tournons-nous vers les chiffres réels et la question qui se pose. La première question à se poser est "quelle est la structure pertinente des nombres réels?" La réponse est: Archimedean Cauchy complète le champ ordonné . Telle est la signification établie de «nombres réels». Vous ne pouvez pas le changer, il a été fixé par d'autres pour vous (dans notre cas, les réels Dedekind alternatifs se révèlent isomorphes aux réels de Cauchy, que nous considérons ici.) Vous ne pouvez pas en retirer une partie, vous n'êtes pas autorisé à dire "je ne me soucie pas de l'implémentation de l'addition" ou "je ne me soucie pas de la commande". Si vous faites cela, vous ne devez pas l'appeler "nombres réels", mais quelque chose comme "nombres réels où nous oublions l'ordre linéaire".

Je ne vais pas entrer dans tous les détails, mais permettez-moi d'expliquer comment les différentes parties de la structure donnent différentes opérations sur les réels:

  • l' axiome archimédien concerne le calcul d' approximations rationnelles de réels
  • la structure du champ donne les opérations arithmétiques habituelles
  • l'ordre linéaire nous donne une procédure semi - décidable pour tester X<y
  • l' exhaustivité de Cauchy nous donne une fonction lim : (nat -> real) -> realqui prend une (représentation de) séquence de Cauchy rapide et renvoie sa limite. (Une séquence est rapide si | x n - x m |2 min ( n , m ) pour tout m , n .)(Xn)n|Xn-Xm|2min(n,m)m,n

Ce que nous n'obtenons pas, c'est une fonction de test pour l'égalité. Il n'y a rien dans les axiomes des réels qui demande que soit décidable. (En revanche, les axiomes Peano impliquent que les nombres naturels sont décidables, et vous pouvez le prouver en implémentant l' utilisation uniquement comme un exercice amusant).=eq : nat -> nat -> Boolinduction

C'est un fait que la représentation décimale habituelle des réels que l'humanité utilise est mauvaise parce qu'avec elle, nous ne pouvons même pas implémenter l'addition. Le point flottant avec une mantisse infinie échoue également (exercice: pourquoi?). Ce qui fonctionne, cependant , c'est la représentation numérique signée , c'est-à-dire celle dans laquelle nous autorisons les chiffres négatifs aussi bien que les chiffres positifs. Ou nous pourrions utiliser des séquences de rationnels qui satisfont au test de Cauchy rapide, comme indiqué ci-dessus.

La représentation Tsuyoshi implémente également quelque chose, mais pas R

Considérons la représentation suivante des réels: un réel est représenté par une paire ( q , b )( q n ) n est une séquence de Cauchy rapide convergeant vers x et b est un booléen indiquant si x est un entier. Pour que cela soit une représentation des réels, nous devons implémenter l'addition, mais il s'avère que nous ne pouvons pas calculer les drapeaux booléens. Ce n'est donc pas une représentation des réels. Mais cela représente quand même quelque chose, à savoir le sous-ensemble des réels Z( RZ )x(q,b)(qn)nxbxZ(RZ). En effet, selon l'interprétation de réalisabilité un syndicat est mis en œuvre avec un drapeau indiquant quelle partie de l'union que nous sommes. Soit dit en passant, est un pas égal à R , à moins que vous croyez en milieu exclu, ce qui ne peut pas être mis en œuvre et est donc tout à fait hors de propos pour cette discussion. Nous sommes obligés par les ordinateurs de faire les choses de manière intuitionniste.Z(RZ)R

Nous ne pouvons pas tester si un réel est un entier

Enfin, permettez-moi de répondre à la question qui a été posée. Nous savons maintenant qu'une représentation acceptable des réels est celle par des séquences rapides de Cauchy de rationnels. (Un théorème important déclare que deux représentations de réels acceptables sont en réalité isomorphes de façon calculable.)

Théorème: Tester si un réel est un entier n'est pas décidable.

Preuve. Supposons que nous puissions tester si un réel est un entier (bien sûr, le réel est réalisé par une séquence de Cauchy rapide). L'idée, qui vous permettra de prouver un théorème beaucoup plus général si vous le souhaitez, est de construire une séquence de Cauchy rapide de non entiers qui converge vers un entier. C'est facile, prenez simplement x n = 2 - n . Ensuite, résolvez le problème d'arrêt comme suit. Étant donné une machine de Turing T , définir une nouvelle séquence ( y n ) n par y n = { x n si  T(xn)nxn=2nT(yn)n Autrement dit, la nouvelle séquence ressemble à la séquence(xn)ntant queTs'exécute, mais elle est "bloquée" àxmsiTs'arrête à l'étapem. Très important, la nouvelle séquence est également une séquence de Cauchy rapide (et nous pouvons le prouver sans savoir siTs'arrête). Par conséquent, nous pouvons calculer sa limitez=limnyn

yn={Xnsi T ne s'est pas arrêté à l'intérieur n pasXmsi T arrêté à l'étape m et mn
(Xn)nTXmTmTz=limnyn, car notre représentation des réels est correcte. Testez si est un entier. Si c'est le cas, alors il doit être 0 et cela ne se produit que si T s'exécute pour toujours. Sinon, z n'est pas un entier, donc T doit s'être arrêté. QED.z0TzT

Exercice: adaptez la preuve ci-dessus pour montrer que nous ne pouvons pas tester les nombres rationnels. Ensuite, adaptez-le pour montrer que nous ne pouvons pas tester quoi que ce soit de non trivial (c'est un peu plus difficile).

Parfois, les gens sont confus à propos de toutes ces activités de test. Ils pensent que nous avons prouvé que nous ne pouvons jamais tester si un réel est un entier. Mais sûrement, 42 est un réel et nous pouvons dire s'il s'agit d'un entier. En fait, tout réel particulier que nous trouvons, , 88 ln 89 , e π péché1188ln89 , etc., nous pouvons parfaitement dire s'il s'agit d'entiers. Précisément,nouspouvons le dire parce quenousavons des informations supplémentaires: ces réels ne nous sont pas donnés comme des séquences, mais plutôt comme des expressions symboliques à partir desquelles nous pouvons calculer le bit de Tsuyoshi. Dès que la seule information dont nous disposons sur le réel est une séquence d'approximations rationnelles qui y convergent (et je neparlepas d'une expression symbolique décrivant la séquence, mais d'une boîte noire qui renvoie len-ème terme sur l'entréen), alors nous sera tout aussi impuissant que les machines.eπ163nn

La morale de l'histoire

Cela n'a aucun sens de parler de l'implémentation d'un ensemble à moins que nous ne sachions quel type d'opérations nous voulons y effectuer.

Andrej Bauer
la source
16
Si mes réponses étaient des épouses, je ne pourrais répondre qu'une seule fois. Ou au moins, je devrais supprimer la réponse précédente avant d'écrire la suivante.
Andrej Bauer
5
@Max: les premiers théorèmes de ce type ont été donnés par Kreisel, Lacombe et Shoenfield (chercher le théorème KLS). Indépendamment Tsteitin a donné un théorème qui a généralisé KLS et était explicitement de la forme "chaque carte calculable est continuellement calculable".
Andrej Bauer
6
J'ai besoin d'écrire un manuel - (Google google google). D'accord, bien, vous avez un mandat. Fonce!
Jeffε
10
@Tsuyoshi: La question a utilisé l'expression établie "nombre réel" sans qualification. La structure des nombres réels est standard. Vous êtes libre de considérer d'autres structures, mais vous n'êtes pas libre de mal interpréter la terminologie standard.
Andrej Bauer
21
Techniquement parlant, vous avez raison, le mot «réel» n'a pas été utilisé. Mais vous vous trompez sur la définition des nombres réels. Ou je dirais ceci: ce sont de mauvaises mathématiques de penser que les réels sont un ensemble particulier qui vient en premier, pour être suivi par une certaine structure. Tout comme nous définissons des groupes, des anneaux, des espaces topologiques, etc., en fonction de leur structure, nous devons donc définir des objets spéciaux en fonction de leurs propriétés universelles (les nombres naturels sont le semi-initial, les entiers l'anneau initial, le champ initial rationnel, les réels). les .....).
Andrej Bauer
10

J'ai tendance à penser que c'est indécidable:

Soit un nombre irrationnel calculable. Considérons un TM M . Vous pouvez construire une fonction qui exécute M sur ϵ et calcule en parallèle x avec une précision croissante. Si M s'arrête, il arrête de calculer x , sinon il continue.xMMϵxMx

Décider si cette fonction calcule un nombre rationnel équivaut au problème d'arrêt.

Shaull
la source
Mx
Comme Tsuyoshi l'a souligné, la réponse dépend de la représentation et du modèle de calcul. Votre réponse indique correctement que si les entrées sont des nombres réels calculables donnés par une MT les calculant, alors l'égalité n'est pas décidable. C'est correct, mais il n'est proche d'aucun modèle utilisé dans la pratique.
Kaveh
2
MMMM
10

En supposant qu'un réel est donné comme une séquence d'approximations rationnelles avec l'erreur limitée par une fonction calculable connue qui tend vers zéro (toutes ces approximations sont équivalentes et correspondent à la topologie habituelle sur les réels).

Les fonctions calculables sont continues. IsRational et IsInteger ne sont pas continus et ne sont donc pas calculables.

IsInteger est semi- calculable: il existe une procédure qui sortira éventuellement "false" si l'entrée n'est pas un entier, mais s'exécutera indéfiniment si l'entrée est un entier. Cette procédure examine simplement chaque approximation et vérifie s'il existe un entier dans la limite d'erreur. Cette fonction est continue lorsque nous utilisons la topologie de Sierpiński sur {true, false} (c'est-à-dire que {false} est un ensemble ouvert mais que {true} ne l'est pas).

Max
la source
Merci d'avoir répondu. Je ne comprends pas le non continu => non calculable, je suppose que vous avez utilisé un théorème (probablement largement connu) que je ne connais pas ou dont je ne me souviens pas. Pourriez-vous s'il vous plaît fournir plus de détails sur cette étape?
dbarbosa
1
"computable => continue" semble être un théorème populaire - je ne trouve pas de citation originale. La théorie du calcul sur des objets infinis et les connexions à la topologie sont assez bien décrites (IMO) dans ces diapositives de cours par Brattka ( math.uni.wroc.pl/~pkowa/slides/brattka.pdf ). La proposition 2 dans les diapositives indique que toutes les fonctions calculables sur des séquences de naturels sont continues; combiné avec le théorème 12, on obtient le résultat pour les fonctions d'autres types.
Max
6

Il est indécidable qu'un nombre calculable donné soit égal à zéro .

(Donc, votre oracle d'approximation rationnelle renvoie 0 pour chaque ε que vous avez essayé? Peut-être que vous ne lui avez pas donné un ε suffisamment petit.)

Ainsi, il est indécidable qu'un nombre calculable donné entre -½ et + ½ soit un entier.

Jeffε
la source
2

Une fonction calculable est plus forte que la fonction continue, c'est-à-dire que toute fonction calculable doit être continue dans la topologie de l'information.

F:R{Ouies,No}

F(r)={OuiESrQNOo.w.

est calculable.

rk2nr[k2n,k+12n]n

Votre fonction n'est alors pas continue et n'est donc pas calculable.

M0n[-12n,12n]MMmM[-12m,12m]MMNOYESM[12m,12m]MYESM

La preuve que toute fonction calculable doit être continue est similaire.

Kaveh
la source