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 isInteger
ou 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 ?
computability
computing-over-reals
lambda-calculus
graph-theory
co.combinatorics
cc.complexity-theory
reference-request
graph-theory
proofs
np-complete
cc.complexity-theory
machine-learning
boolean-functions
combinatory-logic
boolean-formulas
reference-request
approximation-algorithms
optimization
cc.complexity-theory
co.combinatorics
permutations
cc.complexity-theory
cc.complexity-theory
ai.artificial-intel
p-vs-np
relativization
co.combinatorics
permutations
ds.algorithms
algebra
automata-theory
dfa
lo.logic
temporal-logic
linear-temporal-logic
circuit-complexity
lower-bounds
permanent
arithmetic-circuits
determinant
dc.parallel-comp
asymptotics
ds.algorithms
graph-theory
planar-graphs
physics
max-flow
max-flow-min-cut
fl.formal-languages
automata-theory
finite-model-theory
dfa
language-design
soft-question
machine-learning
linear-algebra
db.databases
arithmetic-circuits
ds.algorithms
machine-learning
ds.data-structures
tree
soft-question
security
project-topic
approximation-algorithms
linear-programming
primal-dual
reference-request
graph-theory
graph-algorithms
cr.crypto-security
quantum-computing
gr.group-theory
graph-theory
time-complexity
lower-bounds
matrices
sorting
asymptotics
approximation-algorithms
linear-algebra
matrices
max-cut
graph-theory
graph-algorithms
time-complexity
circuit-complexity
regular-language
graph-algorithms
approximation-algorithms
set-cover
clique
graph-theory
graph-algorithms
approximation-algorithms
clustering
partition-problem
time-complexity
turing-machines
term-rewriting-systems
cc.complexity-theory
time-complexity
nondeterminism
dbarbosa
la source
la source
Réponses:
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 τ x∈X τ v⊢x∈X v x N v⊢k∈N v s'é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 e ⊢ 42 ∈ N et F a l s e ⊢ n ∈ N pour n ≠ 42 . Pourquoi est-ce incorrect? Nous avons besoin d'un critère .k¯¯¯ True⊢42∈N False⊢n∈N n≠42
Integer
-42
Bool
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:F a l s e
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
satisfaisantX↦ 1 + X
induction x f zero = x
etinduction 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 .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:
lim : (nat -> real) -> real
qui 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 .)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 -> Bool
induction
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 pasR
Considérons la représentation suivante des réels: un réel est représenté par une paire ( q , b ) où ( 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 ∪ ( R ∖ Z )x (q,b) (qn)n x b x Z∪(R∖Z) . 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∪(R∖Z) 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)n xn=2−n T (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
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é11 88 ln89 , 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π163√ n n
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.
la source
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.x M M ϵ x M x
Décider si cette fonction calcule un nombre rationnel équivaut au problème d'arrêt.
la source
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).
la source
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.
la source
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.
est calculable.
Votre fonction n'est alors pas continue et n'est donc pas calculable.
La preuve que toute fonction calculable doit être continue est similaire.
la source