Ist es möglich, algorithmisch zu testen, ob eine berechenbare Zahl rational oder ganzzahlig ist? Mit anderen Worten, könnte eine Bibliothek, die berechenbare Zahlen implementiert, die Funktionen bereitstellen, isInteger
oder isRational
?
Ich vermute, dass es nicht möglich ist und dass dies irgendwie damit zusammenhängt, dass es nicht möglich ist, zu testen, ob zwei Zahlen gleich sind, aber ich sehe nicht, wie ich es beweisen kann.
Edit: Eine berechenbare Zahl wird durch eine Funktion , die eine rationale Approximation von mit der Genauigkeit : , für jedes . Bei einer solchen Funktion ist es möglich , zu testen , ob oder ?
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
quelle
quelle
Antworten:
Es ist leicht zu verwechseln, was es bedeutet, eine reelle Zahl "darzustellen" oder "umzusetzen". In der Tat erleben wir eine Diskussion in den Kommentaren, in denen die Darstellung umstritten ist. Also lassen Sie mich zuerst darauf eingehen.
Woher wissen wir, dass eine Implementierung korrekt ist?
Die Theorie, die erklärt, wie man Dinge in einem Computer darstellt, ist Realisierbarkeit . Die Grundidee ist, dass wir für eine Menge einen Datentyp τ und für jedes x ∈ X eine Menge von Werten vom Typ τ auswählen, die dies realisieren . Wir schreiben v ⊢ x ∈ X, wenn v ein Wert ist, der x realisiert . Zum Beispiel (ich werde Haskell ohne guten Grund verwenden), könnte eine sinnvolle Implementierung von N der Datentyp sein, bei dem v ⊢ k ∈ N ist, wenn vX τ x ∈ X τ v ⊢ x ∈ X v x N v ⊢ k ∈ N v Ergibt die Ziffer (also insbesondere nicht eine natürliche Zahl darstellen, und auch nicht ein divergierendes Programm). Aber einige Joker konnten zu Fuß durch und legen nahe , dass wir verwenden natürliche Zahlen mit vertreten zu T r u e ⊢ 42 ∈ N und F ein l s e ⊢ n ∈ N für n ≠ 42 . Warum ist das falsch? Wir brauchen ein Kriterium .k¯¯¯ T r u e ⊢42∈ N F eine l s e ⊢n∈ N n ≠ 42
Integer
-42
Bool
Im Fall von "Joker-Nummern" besteht die einfache Beobachtung darin, dass die Addition nicht implementiert werden kann. Angenommen, ich sage Ihnen, ich habe zwei Zahlen, die beide durch . Können Sie einen Realisator für ihre Summe geben? Nun, das hängt davon ab, ob die Summe 42 ist, aber Sie können es nicht sagen. Da die Addition ein "wesentlicher Bestandteil der natürlichen Zahlen" ist, ist dies nicht akzeptabel. Mit anderen Worten, bei der Implementierung geht es nicht um Mengen, sondern um Strukturen , dh wir müssen Mengen so darstellen, dass es möglich ist, auch die relevante Struktur zu implementieren. Lassen Sie mich das betonen:F a l s e
Wenn Sie sich nicht an diesen Grundsatz halten, müssen Sie ein alternatives mathematisches Kriterium für die Richtigkeit vorschlagen . Ich kenne keinen.
Beispiel: Darstellung natürlicher Zahlen
Für natürliche Zahlen wird die relevante Struktur durch Peano-Axiome beschrieben, und das entscheidende Axiom, das implementiert werden muss, ist Induktion (aber auch , Nachfolger, + und × ). Wir können anhand der Realisierbarkeit berechnen, was die Implementierung der Induktion bewirkt. Es stellt sich heraus, dass es sich um eine Karte handelt (wobei es sich um den noch unbekannten Datentyp handelt, der natürliche Zahlen darstellt)0 + ×
nat
befriedigendX↦ 1 + X
induction x f zero = x
undinduction x f (succ n) = f n (induction x f n)
. All dies kommt aus der Realisierbarkeit. Wir haben ein Kriterium: Eine Implementierung von natürlichen Zahlen ist korrekt, wenn sie eine Implementierung von Peano-Axiomen erlaubt. Ein ähnliches Ergebnis würde erhalten, wenn wir die Charakterisierung von Zahlen als Anfangsalgebra für den Funktor .Richtige Implementierung von reellen Zahlen
Lasst uns die Aufmerksamkeit auf die reellen Zahlen und die vorliegende Frage lenken. Die erste Frage lautet: "Wie ist die relevante Struktur der reellen Zahlen?" Die Antwort lautet: Archimedischer Cauchy füllt das bestellte Feld aus . Dies ist die gängige Bedeutung von "reellen Zahlen". Sie können es nicht ändern, es wurde von anderen für Sie repariert (in unserem Fall erweisen sich die alternativen Dedekind-Reals als isomorph zu den Cauchy-Reals, die wir hier betrachten.). Sie können keinen Teil davon wegnehmen. Sie dürfen nicht sagen: "Es ist mir egal, ob Sie Additionen implementieren" oder "Die Reihenfolge ist mir egal". Wenn Sie das tun, dürfen Sie es nicht als "reelle Zahlen" bezeichnen, sondern als "reelle Zahlen, bei denen wir die lineare Reihenfolge vergessen".
Ich werde nicht auf alle Details eingehen, sondern nur erläutern, wie die verschiedenen Teile der Struktur verschiedene Operationen für Real ergeben:
lim : (nat -> real) -> real
Was wir nicht bekommen, ist eine Testfunktion für Gleichheit. Es gibt nichts in den Axiomen für Reals , die das fragt sein entscheidbar. (Im Gegensatz dazu implizieren die Peano-Axiome, dass die natürlichen Zahlen bestimmbar sind, und Sie können dies beweisen, indem Sie sie nur als unterhaltsame Übung implementieren .)=
eq : nat -> nat -> Bool
induction
Es ist eine Tatsache, dass die übliche Dezimaldarstellung von Realwerten, die die Menschheit verwendet, schlecht ist, weil wir damit nicht einmal Addition implementieren können. Fließkomma mit unendlicher Mantisse versagt ebenfalls (Übung: Warum?). Was jedoch funktioniert, ist eine vorzeichenbehaftete Zifferndarstellung, dh eine, bei der sowohl negative als auch positive Ziffern zulässig sind. Oder wir könnten Rationalisierungssequenzen verwenden, die den oben genannten Cauchy-Schnelltest erfüllen.
Die Tsuyoshi-Darstellung implementiert auch etwas, aber nichtR
Betrachten wir die folgende Darstellung von Real: Ein Real wird durch ein Paar wobei eine schnelle Cauchy-Folge ist, die zu konvergiert, und ein Boolescher ist, der angibt, ob eine ganze Zahl ist. Damit dies eine Repräsentation der Realwerte ist, müssten wir eine Addition implementieren, aber wie sich herausstellt, können wir die Booleschen Flags nicht berechnen. Das ist also keine Repräsentation der Realitäten. Aber es repräsentiert immer noch etwas, nämlich die Teilmenge des Reals( q , b ) ( q n ) n x b x Z ≤ ( R ≤ Z ) Z ≤ ( R ≤ Z ) Rx ( q,b) (qn)n x b x Z∪(R∖Z) . In der Tat, nach der Realisierbarkeit Auslegung wird eine Vereinigung mit einem Flag implementiert angibt , welcher Teil der Union sind wir in. Im Übrigen ist ein nicht gleich zu , es sei denn , Sie in ausgeschlossenen glauben, die nicht umgesetzt werden können , und ist daher durchaus für diese Diskussion nicht relevant. Wir werden von Computern gezwungen , Dinge intuitiv zu tun.Z∪(R∖Z) R
Wir können nicht testen, ob ein Real eine ganze Zahl ist
Lassen Sie mich zum Schluss die gestellte Frage beantworten. Wir wissen jetzt, dass eine akzeptable Repräsentation der Realitäten eine durch schnelle Cauchy-Sequenzen von Rationals ist. (Ein wichtiger Satz besagt, dass zwei beliebige Darstellungen von Real, die akzeptabel sind, tatsächlich rechnerisch isomorph sind.)
Satz: Das Testen, ob ein Real eine ganze Zahl ist, ist nicht entscheidbar.
Beweis. Angenommen, wir könnten testen, ob ein Real eine ganze Zahl ist (natürlich wird der Real durch eine schnelle Cauchy-Sequenz realisiert). Die Idee, mit der Sie einen viel allgemeineren Satz beweisen können, besteht darin, eine schnelle Cauchy-Folge von Nicht-Ganzzahlen zu konstruieren, die zu einer ganzen Zahl konvergiert. Das ist einfach, nimm einfach . Lösen Sie als Nächstes das Halteproblem wie folgt. Definieren Sie bei gegebener Turing-Maschine eine neue Folge durch Das heißt, die neue Sequenz sieht aus wie die Sequenz , solangex n = 2 - n T ( y n ) n y n = { x n, wenn T nicht innerhalb von n Schritten gestoppt hat x m, wenn T in Schritt m gestoppt hat und m ≤ n ( x n ) n T x m T m T z = lim n y n z 0(xn)n xn=2−n T (yn)n
Aufgabe: Passen Sie den obigen Beweis an, um zu zeigen, dass wir nicht auf rationale Zahlen testen können. Passen Sie es dann an, um zu zeigen, dass wir nichts Nicht-Triviales testen können (dies ist etwas schwieriger).
Manchmal sind die Leute verwirrt über all dieses Testgeschäft. Sie denken, wir haben bewiesen, dass wir niemals testen können, ob ein Real eine ganze Zahl ist. Aber sicher ist 42 ein Real und wir können erkennen, ob es eine ganze Zahl ist. Tatsächlich können wir mit jedem bestimmten Real, das wir uns einfallen lassen, , , usw., sehr gut sagen, ob es sich um ganze Zahlen handelt. Wir können genau sagen, weil wir zusätzliche Informationen haben: Diese Reals werden uns nicht als Sequenzen gegeben, sondern als symbolische Ausdrücke, aus denen wir das Tsuyoshi-Bit berechnen können. Sobald die einzige Information, die wir über das Reale haben, eine Folge rationaler Annäherungen ist, die sich diesem annähern (und ich auch)88 ln 89 e π √sin11 88ln89 nneπ163√ bedeutet nicht einen symbolischen Ausdruck, der die Sequenz beschreibt, sondern eine Blackbox, die den ten Term bei Eingabe von ) ausgibt, dann sind wir genauso hilflos wie Maschinen.n n
Die Moral der Geschichte
Es macht keinen Sinn, über die Implementierung eines Sets zu sprechen, wenn wir nicht wissen, welche Art von Operationen wir darauf ausführen möchten.
quelle
Ich neige dazu, dies für unentscheidbar zu halten:
Sei eine berechenbare irrationale Zahl. Betrachten wir eine TM . Sie können eine Funktion , die auf , und parallel mit wachsender Genauigkeit berechnen . Wenn anhält, wird berechnet , andernfalls wird fortgefahren.M M ≤ x M xx M M ϵ x M x
Die Entscheidung, ob diese Funktion eine rationale Zahl berechnet, entspricht dem Halteproblem.
quelle
Angenommen, ein Real wird als Folge rationaler Approximationen angegeben, wobei der Fehler durch eine bekannte berechenbare Funktion begrenzt wird, die gegen Null tendiert (alle derartigen Approximationen sind äquivalent und entsprechen der üblichen Topologie des Real).
Berechenbare Funktionen sind fortlaufend. IsRational und IsInteger sind nicht kontinuierlich und daher nicht berechenbar.
IsInteger ist semi- computable: Es gibt eine Prozedur, die letztendlich "false" ausgibt, wenn die Eingabe keine Ganzzahl ist, aber für immer ausgeführt wird, wenn die Eingabe eine Ganzzahl ist. Diese Prozedur untersucht einfach jede Approximation und prüft, ob sich eine ganze Zahl innerhalb der Fehlergrenze befindet. Diese Funktion ist kontinuierlich, wenn die Sierpiński-Topologie für {true, false} verwendet wird (dh {false} ist eine offene Menge, {true} jedoch nicht).
quelle
Es ist nicht zu entscheiden, ob eine bestimmte berechenbare Zahl gleich Null ist .
(Ihr Orakel für rationale Näherung gibt also für jede versuchte Näherung 0 zurück. Vielleicht haben Sie es einfach nicht klein genug gegeben.)
Daher ist es nicht zu entscheiden, ob eine bestimmte berechenbare Zahl zwischen -½ und + ½ eine ganze Zahl ist.
quelle
Eine berechenbare Funktion ist stärker als die stetige Funktion, dh jede berechenbare Funktion muss in der Informationstopologie stetig sein.
ist berechenbar.
Dann ist Ihre Funktion nicht stetig und daher nicht berechenbar.
Der Beweis, dass eine berechenbare Funktion kontinuierlich sein muss, ist ähnlich.
quelle