Apakah mungkin untuk menguji secara algoritmik apakah bilangan yang dihitung rasional atau bilangan bulat? Dengan kata lain, apakah mungkin bagi perpustakaan yang mengimplementasikan angka yang dapat dihitung untuk menyediakan fungsi isInteger
atau isRational
?
Saya menduga itu tidak mungkin, dan bahwa ini entah bagaimana terkait dengan fakta bahwa tidak mungkin untuk menguji apakah dua angka sama, tetapi saya tidak melihat bagaimana membuktikannya.
Sunting: Angka dapat dihitung diberikan oleh fungsi yang dapat mengembalikan perkiraan rasional dengan presisi : , untuk setiap . Dengan fungsi seperti itu, apakah mungkin untuk menguji apakah atau ?f x ( ϵ ) x ϵ | x - f x ( ϵ ) | ≤ ϵ ϵ > 0 x ∈ Q x ∈ Z
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
sumber
sumber
Jawaban:
Sangat mudah untuk bingung tentang apa artinya "mewakili" atau "menerapkan" bilangan real. Bahkan, kami menyaksikan diskusi di komentar di mana representasi itu kontroversial. Jadi izinkan saya mengatasi ini dulu.
Bagaimana kita tahu bahwa implementasi itu benar?
Teori yang menjelaskan bagaimana merepresentasikan sesuatu dalam komputer adalah realisasi . Ide dasarnya adalah bahwa, diberikan himpunan , kami memilih tipe data dan untuk setiap set nilai dari tipe yang menyadarinya . Kami menulis ketika adalah nilai yang menyadari . Misalnya (saya akan menggunakan Haskell tanpa alasan yang jelas), implementasi masuk akal mungkin merupakan tipe data di mana saat mengevaluasi ke angka ( dengan demikian khususnyaτ x ∈ X τ v ⊢ x ∈ X v x N v ⊢ k ∈ N v ¯ k T r u e ⊢ 42 ∈ N F a l s e ⊢ n ∈ n ∈ N n ≠ 42X τ x ∈ X τ v ⊢ x ∈ X v x N v ⊢ k ∈ N v k¯¯¯ T r u e ⊢42∈ N F a l s e ⊢n∈ N n ≠ 42
Integer
-42
tidak mewakili angka alami, dan juga tidak ada program yang berbeda). Tetapi beberapa joker bisa berjalan dan menyarankan agar kita gunakanBool
untuk merepresentasikan bilangan asli dengan dan untuk . Kenapa ini salah? Kami membutuhkan kriteria .Dalam kasus "angka joker" pengamatan yang mudah adalah bahwa penambahan tidak dapat diterapkan. Misalkan saya memberi tahu Anda saya memiliki dua angka, keduanya diwakili oleh . Bisakah Anda memberi realizer untuk jumlah mereka? Ya, itu tergantung apakah jumlahnya 42, tetapi Anda tidak tahu. Karena penambahan adalah "bagian penting dari bilangan asli", ini tidak dapat diterima. Dengan kata lain, implementasi bukan tentang set, tetapi tentang struktur , yaitu, kita harus mewakili set sedemikian rupa sehingga dimungkinkan untuk juga menerapkan struktur yang relevan. Biarkan saya menekankan ini:F a l s e
Jika Anda tidak mematuhi prinsip ini, maka Anda harus menyarankan kriteria matematis alternatif tentang kebenaran. Saya tidak tahu satu pun.
Contoh: representasi bilangan asli
Untuk bilangan asli struktur yang relevan dijelaskan oleh aksioma Peano, dan aksioma penting yang harus dilaksanakan adalah induksi (tetapi juga , penerus, dan ). Kita dapat menghitung, menggunakan kesadaran, apa yang dilakukan oleh induksi. Ternyata menjadi peta (di mana datatype belum diketahui yang mewakili bilangan asli)+ ×0 + ×
nat
memuaskanX↦ 1 + X
induction x f zero = x
daninduction x f (succ n) = f n (induction x f n)
. Semua ini keluar dari kesadaran. Kami memiliki kriteria: implementasi bilangan asli benar ketika memungkinkan implementasi aksioma Peano. Hasil serupa akan diperoleh jika kita menggunakan karakterisasi angka sebagai aljabar awal untuk functor .Implementasi bilangan real yang benar
Mari kita perhatikan bilangan real dan pertanyaan yang ada. Pertanyaan pertama yang diajukan adalah "apa struktur yang relevan dari bilangan real?" Jawabannya adalah: Archimedean Cauchy isian lengkap yang dipesan . Ini adalah arti mapan dari "bilangan real". Anda tidak bisa mengubahnya, itu telah diperbaiki oleh orang lain untuk Anda (dalam kasus kami real Dedekind alternatif ternyata isomorfik dengan real Cauchy, yang kami pertimbangkan di sini.) Anda tidak dapat mengambil bagian dari itu, Anda tidak diperbolehkan mengatakan "Saya tidak peduli tentang penerapan penambahan", atau "Saya tidak peduli dengan pesanan". Jika Anda melakukan itu, Anda tidak boleh menyebutnya "bilangan real", tetapi sesuatu seperti "bilangan real di mana kami lupa urutan linier".
Saya tidak akan membahas semua detail, tetapi izinkan saya hanya menjelaskan bagaimana berbagai bagian struktur memberikan berbagai operasi pada real:
lim : (nat -> real) -> real
Apa yang kita tidak dapatkan adalah fungsi tes untuk kesetaraan. Tidak ada dalam aksioma untuk real yang meminta bahwa dapat dipilih. (Sebaliknya, aksioma Peano menyiratkan bahwa bilangan asli dapat ditentukan, dan Anda dapat membuktikan bahwa dengan menerapkan hanya menggunakan sebagai latihan yang menyenangkan).=
eq : nat -> nat -> Bool
induction
Adalah fakta bahwa representasi desimal biasa dari realita yang digunakan umat manusia adalah buruk karena dengan itu kita bahkan tidak dapat mengimplementasikan penambahan. Titik mengambang dengan mantissa tak terbatas juga gagal (olahraga: mengapa?). Apa yang berhasil, bagaimanapun adalah representasi digit yang ditandatangani , yaitu, di mana kami mengizinkan digit negatif dan juga digit positif. Atau kita bisa menggunakan urutan rasional yang memenuhi tes Cauchy cepat, seperti yang dinyatakan di atas.
Representasi Tsuyoshi juga mengimplementasikan sesuatu, tetapi tidakR
Mari kita perhatikan representasi real berikut: a nyata diwakili oleh pasangan mana adalah deretan Cauchy cepat yang konvergen ke dan adalah Boolean yang menunjukkan apakah adalah bilangan bulat. Agar ini menjadi representasi dari real, kita harus mengimplementasikan penambahan, tetapi ternyata kita tidak dapat menghitung bendera Boolean. Jadi ini bukan representasi dari real. Tapi itu masih merupakan sesuatu, yaitu bagian dari real( 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) . Memang, menurut interpretasi realisasi sebuah serikat diterapkan dengan bendera yang menunjukkan bagian mana dari serikat kita berada. Omong-omong, adalah a tidak sama dengan , kecuali jika Anda percaya pada tengah yang dikecualikan, yang tidak dapat diimplementasikan dan karena itu sangat tidak relevan untuk diskusi ini. Kita dipaksa oleh komputer untuk melakukan berbagai hal secara intuisi.Z∪(R∖Z) R
Kami tidak dapat menguji apakah real adalah bilangan bulat
Akhirnya, izinkan saya menjawab pertanyaan yang diajukan. Kita sekarang tahu bahwa representasi real yang dapat diterima adalah satu dengan deretan rasional Cauchy yang cepat. (Teorema penting menyatakan bahwa dua representasi real yang dapat diterima sebenarnya adalah isomorfik yang dapat dihitung).
Teorema: Menguji apakah real adalah integer tidak dapat ditentukan.
Bukti. Misalkan kita dapat menguji apakah real adalah bilangan bulat (tentu saja, real direalisasikan oleh deretan Cauchy yang cepat). Idenya, yang akan memungkinkan Anda untuk membuktikan teorema yang jauh lebih umum jika Anda mau, adalah untuk membangun urutan Cauchy cepat dari non-integer yang konvergen ke integer. Ini mudah, ambil saja . Selanjutnya, selesaikan masalah Hentikan sebagai berikut. Diberikan mesin Turing , tentukan urutan baru oleh Artinya, urutan baru seperti urutan selamax n = 2 - n T ( y n ) n y n = { x n jika T tidak berhenti dalam n langkah x m jika T berhenti pada langkah m dan 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
Latihan: sesuaikan bukti di atas untuk menunjukkan bahwa kita tidak dapat menguji angka rasional. Kemudian sesuaikan untuk menunjukkan bahwa kami tidak dapat menguji apa pun yang non-sepele (ini agak sulit).
Terkadang orang bingung tentang semua bisnis pengujian ini. Mereka pikir kami telah membuktikan bahwa kami tidak pernah dapat menguji apakah real adalah bilangan bulat. Tapi yang pasti, 42 adalah nyata dan kita bisa tahu apakah itu bilangan bulat. Faktanya, setiap real khusus yang kita buat, , , , dll., Kita dapat dengan baik mengetahui apakah mereka bilangan bulat. Tepatnya, kita dapat mengetahui karena kita memiliki informasi tambahan: real ini tidak diberikan kepada kita sebagai urutan, melainkan sebagai ekspresi simbolik dari mana kita dapat menghitung bit Tsuyoshi. Begitu satu-satunya informasi yang kita miliki tentang yang sebenarnya adalah serangkaian perkiraan rasional yang menyatu dengannya (dan saya lakukan88 ln 89 e π √sin11 88ln89 nneπ163√ bukan berarti ekspresi simbolik yang menggambarkan urutan, tetapi kotak hitam yang menampilkan istilah ke- pada input ) maka kita akan sama tidak berdaya dengan mesin.n n
Moral cerita
Tidak masuk akal untuk berbicara tentang implementasi suatu set kecuali kita tahu operasi apa yang ingin kita lakukan di atasnya.
sumber
Saya cenderung berpikir ini tidak dapat diputuskan:
Biarkan menjadi bilangan irasional yang dapat dihitung. Pertimbangkan TM . Anda dapat membangun fungsi yang menjalankan pada , dan secara paralel menghitung dengan presisi yang semakin besar. Jika berhenti, ia berhenti menghitung , jika tidak ia akan melanjutkan.M M ϵ x M xx M M ϵ x M x
Memutuskan apakah fungsi ini menghitung bilangan rasional setara dengan masalah penghentian.
sumber
Dengan asumsi nyata diberikan sebagai urutan perkiraan rasional dengan kesalahan yang dibatasi oleh beberapa fungsi yang diketahui dapat dihitung yang cenderung nol (semua perkiraan tersebut setara, dan sesuai dengan topologi biasa pada real).
Fungsi yang dapat dihitung kontinu. IsRational dan IsInteger tidak berkelanjutan dan karenanya tidak dapat dihitung.
IsInteger bersifat semi- komputasi: ada prosedur yang pada akhirnya akan menampilkan "false" jika inputnya bukan bilangan bulat, tetapi akan berjalan selamanya jika inputnya adalah bilangan bulat. Prosedur ini hanya melihat pada setiap perkiraan dan memeriksa apakah ada bilangan bulat dalam batas kesalahan. Fungsi ini kontinu ketika kita menggunakan topologi Sierpiński pada {true, false} (yaitu {false} adalah himpunan terbuka tetapi {true} tidak).
sumber
Tidak dapat dipastikan apakah angka yang dihitung sama dengan nol .
(Jadi oracle perkiraan Anda menghasilkan 0 untuk setiap ε yang Anda coba? Mungkin Anda belum memberikan ε yang cukup kecil.)
Dengan demikian, tidak dapat dipastikan apakah angka yang dapat dihitung antara -½ dan + ½ adalah bilangan bulat.
sumber
Fungsi yang dapat dihitung lebih kuat daripada fungsi yang berkelanjutan, artinya fungsi yang dapat dihitung harus kontinu dalam topologi informasi.
dapat dihitung.
Maka fungsi Anda tidak kontinu dan karenanya tidak dapat dihitung.
Bukti bahwa setiap fungsi yang dikomputasi perlu kontinu adalah serupa.
sumber