Có thể kiểm tra xem một số tính toán là số nguyên hay số nguyên không?


18

Có thể kiểm tra bằng thuật toán nếu một số tính toán là số nguyên hay số nguyên? Nói cách khác, một thư viện có thể thực hiện các số tính toán để cung cấp các hàm isIntegerhay isRationalkhông?

Tôi đoán rằng điều đó là không thể, và điều này bằng cách nào đó có liên quan đến thực tế là không thể kiểm tra nếu hai số bằng nhau, nhưng tôi không thấy cách chứng minh điều đó.

Chỉnh sửa: Một số tính toán x được cho bởi một hàm fx(ϵ) mà có thể trở lại một xấp xỉ hợp lý x với độ chính xác ϵ : |xfx(ϵ)|ϵ , đối với bất kỳ ϵ>0 . Cho hàm số như vậy, có thể kiểm tra nếu xQ hoặc xZ không?

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 

3
Làm thế nào là số tính toán được đưa ra?
Tsuyoshi Ito

10
Làm thế nào số lượng được đưa ra là tất nhiên có liên quan. Như một ví dụ ngớ ngẩn, nếu đầu vào có chứa cờ cho dù số đó có phải là số nguyên hay không, quyết định xem đầu vào có phải là số nguyên hay không là tầm thường.
Tsuyoshi Ito


3
(1) Làm thế nào để bạn biết rằng đây là một số nguyên? Tại sao tôi nên quan tâm? Bạn đã không nói bất cứ điều gì về các yêu cầu về hoạt động. (2) Cho đến nay, nếu bạn thấy hai câu trả lời, họ không đề cập gì đến việc thực hiện.
Tsuyoshi Ito

16
Tôi hy vọng câu trả lời của tôi vùi dập cuộc thảo luận này. Tsuyoshi, bạn nhầm rồi, có liên quan đến những hoạt động nào có thể tính toán được. Chúng tôi không thực hiện các số thực trong chân không, nhưng để thao túng chúng . Theo bạn, chúng tôi chỉ có thể sử dụng loại đơn vị để thực hiện mọi thứ. Vâng, chúng tôi có thể, nhưng sau đó một số hoạt động sẽ không thể tính toán được, và đó chính xác là tiêu chí mà chúng tôi đánh giá các đại diện.
Andrej Bauer

Câu trả lời:


32

Rất dễ bị nhầm lẫn về ý nghĩa của việc "đại diện" hoặc "thực hiện" một con số thực. Trong thực tế, chúng tôi đang chứng kiến ​​một cuộc thảo luận trong các ý kiến ​​mà đại diện là gây tranh cãi. Vì vậy, hãy để tôi giải quyết điều này đầu tiên.

Làm thế nào để chúng ta biết rằng một thực hiện là chính xác?

Lý thuyết giải thích cách thể hiện mọi thứ trong máy tính là khả thi . Ý tưởng cơ bản là, đưa ra một tập , chúng tôi chọn một datatype τ và cho mọi x X một tập hợp các giá trị của loại τnhận ra nó. Chúng tôi viết v x X khi v là một giá trị mà nhận ra x . Ví dụ (Tôi sẽ sử dụng Haskell không có lý do chính đáng), việc thực hiện hợp lý của N có thể là kiểu dữ liệu mà v k N khi vXτxXτvxXvxNIntegervkNvước tính cho chữ số (do đó đặc biệt không đại diện cho số tự nhiên và cũng không phải là chương trình phân kỳ). Nhưng một số joker có thể đi bộ bằng và gợi ý rằng chúng tôi sử dụng để đại diện cho các số tự nhiên với T r u e42 NF một l s en N cho n 42 . Tại sao điều này không chính xác? Chúng tôi cần một tiêu chí .k¯-42BoolTrue42NFalsenNn42

Trong trường hợp "số joker", quan sát dễ dàng là việc bổ sung không thể được thực hiện. Giả sử tôi nói với bạn tôi có hai số, cả hai đều được đại diện bởi . Bạn có thể cho một người thực hiện cho số tiền của họ? Chà, điều đó phụ thuộc vào số tiền có phải là 42 hay không, nhưng bạn không thể biết được. Vì phép cộng là một "phần thiết yếu của số tự nhiên", nên điều này là không thể chấp nhận được. Nói cách khác, việc thực hiện không phải là về các tập hợp, mà là về các cấu trúc , tức là chúng ta phải biểu diễn các tập hợp theo cách mà cũng có thể thực hiện cấu trúc có liên quan. Hãy để tôi nhấn mạnh điều này:False

Chúng tôi thực hiện các cấu trúc, không phải bộ trần. Do đó, chúng ta phải có khả năng thực hiện toàn bộ cấu trúc, cùng với các hoạt động và tất cả các tiên đề, để việc thực hiện được chính xác.

Nếu bạn không tuân thủ nguyên tắc này, thì bạn phải đề xuất một tiêu chí toán học thay thế về tính đúng đắn. Tôi không biết một.

Ví dụ: biểu diễn số tự nhiên

Đối với các số tự nhiên, cấu trúc có liên quan được mô tả bởi các tiên đề Peano và tiên đề quan trọng phải được thực hiện là cảm ứng (nhưng cũng là , kế, +× ). Chúng ta có thể tính toán, sử dụng khả năng thực hiện, những gì việc thực hiện cảm ứng làm. Nó hóa ra là một bản đồ (trong đó kiểu dữ liệu chưa biết đại diện cho số tự nhiên)0+×nat

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

thỏa mãn induction x f zero = xinduction x f (succ n) = f n (induction x f n). Tất cả điều này đi ra từ khả năng thực tế. Chúng tôi có một tiêu chí: việc thực hiện các số tự nhiên là chính xác khi nó cho phép thực hiện các tiên đề Peano. Một kết quả tương tự sẽ được thu được nếu chúng tôi sử dụng các đặc tính của con số như đại số ban đầu cho functor .X1+X

Thực hiện đúng số thực

Chúng ta hãy chú ý đến những con số thực và câu hỏi trong tầm tay. Câu hỏi đầu tiên được đặt ra là "cấu trúc liên quan của các số thực là gì?" Câu trả lời là: Archimedean Cauchy hoàn thành trường đặt hàng . Đây là ý nghĩa được thiết lập của "số thực". Bạn không thể thay đổi nó, nó đã được sửa bởi những người khác (trong trường hợp của chúng tôi, các thực thể Dedekind thay thế hóa ra là đồng hình với các thực thể Cauchy, mà chúng tôi đang xem xét ở đây.) Bạn không thể lấy đi bất kỳ phần nào của nó, bạn không được phép nói "Tôi không quan tâm đến việc thực hiện bổ sung" hoặc "Tôi không quan tâm đến đơn hàng". Nếu bạn làm điều đó, bạn không được gọi nó là "số thực", nhưng một cái gì đó như "số thực mà chúng ta quên thứ tự tuyến tính".

Tôi sẽ không đi vào tất cả các chi tiết, nhưng hãy để tôi giải thích làm thế nào các phần khác nhau của cấu trúc cung cấp các hoạt động khác nhau trên thực tế:

  • các Archimedean tiên đề được về tính hợp lý xấp xỉ của số thực
  • cấu trúc trường cung cấp cho các hoạt động số học thông thường
  • trật tự tuyến tính cho chúng ta một semidecidable thủ tục để thử nghiệm x<y
  • lim : (nat -> real) -> real(xn)n m , n|xnxm|2min(n,m)m,n

Những gì chúng ta không nhận được là một chức năng kiểm tra cho sự bình đẳng. Không có gì trong các tiên đề cho các thực thể yêu cầu có thể quyết định được. (Ngược lại, các tiên đề Peano ngụ ý rằng các số tự nhiên là có thể quyết định và bạn có thể chứng minh rằng bằng cách thực hiện chỉ sử dụng như một bài tập thú vị).=eq : nat -> nat -> Boolinduction

Có một thực tế là đại diện thập phân thông thường của các thực tế mà nhân loại sử dụng là xấu bởi vì với nó, chúng ta thậm chí không thể thực hiện bổ sung. Điểm nổi với mantissa vô hạn cũng thất bại (bài tập: tại sao?). Những gì hoạt động, tuy nhiên là đại diện chữ số đã ký , tức là một trong đó chúng tôi cho phép các chữ số âm cũng như số dương. Hoặc chúng ta có thể sử dụng các chuỗi hợp lý thỏa mãn bài kiểm tra Cauchy nhanh chóng, như đã nêu ở trên.

Đại diện Tsuyoshi cũng thực hiện một cái gì đó, nhưng không phảiR

Chúng ta hãy xem xét biểu diễn sau đây của các số thực: một thực được biểu thị bằng một cặp trong đó là một chuỗi Cauchy nhanh chóng hội tụ đến và là Boolean cho biết có phải là số nguyên hay không. Để điều này trở thành một đại diện của thực tế, chúng ta sẽ phải thực hiện bổ sung, nhưng hóa ra chúng ta không thể tính toán các cờ Boolean. Vì vậy, đây không phải là một đại diện của thực tế. Nhưng nó vẫn đại diện cho một cái gì đó, cụ thể là tập hợp con của reals( q , b ) ( q n ) n x b x Z( RZ ) Z( RZ ) Rx(q,b)(qn)nxbxZ(RZ). Thật vậy, theo cách giải thích khả thi, một liên minh được thực hiện với một lá cờ cho biết phần nào của liên minh chúng ta đang tham gia. Nhân tiện, là a không bằng , trừ khi bạn tin vào loại trừ giữa, không thể thực hiện được và do đó khá không liên quan cho cuộc thảo luận này. Chúng ta bị ép buộc bởi máy tính để làm mọi thứ theo trực giác.Z(RZ)R

Chúng tôi không thể kiểm tra xem một số thực có phải là số nguyên không

Cuối cùng, hãy để tôi trả lời câu hỏi đã được hỏi. Bây giờ chúng ta biết rằng một đại diện có thể chấp nhận được của các thực tế là một trong các chuỗi hợp lý nhanh chóng của Cauchy. (Một định lý quan trọng nói rằng bất kỳ hai biểu diễn nào của các thực thể có thể chấp nhận được đều thực sự là đẳng cấu.)

Định lý: Kiểm tra xem một số thực có phải là số nguyên không là quyết định.

Bằng chứng. Giả sử chúng ta có thể kiểm tra xem một số thực có phải là một số nguyên hay không (tất nhiên, số thực được nhận ra bằng một chuỗi Cauchy nhanh chóng). Ý tưởng, cho phép bạn chứng minh một định lý tổng quát hơn nhiều nếu bạn muốn, là xây dựng một chuỗi Cauchy nhanh của các số nguyên không hội tụ thành một số nguyên. Điều này thật dễ dàng, chỉ cần lấy . Tiếp theo, giải quyết vấn đề Dừng như sau. Đưa ra một máy Turing , xác định một chuỗi mới bởi Nghĩa là, chuỗi mới trông giống như chuỗi miễn làx n = 2 - n T ( y n ) n y n = { x n nếu  T  chưa dừng lại trong  n  bước x m nếu  T  dừng ở bước  m  và  m n ( x n ) n T x m T m T z = lim n y n z 0(xn)nxn=2nT(yn)n

yn={xnif T has not stopped within n stepsxmif T stopped in step m and mn
(xn)nTchạy, nhưng sau đó nó bị "kẹt" tại nếu dừng lại ở bước . Rất quan trọng, trình tự mới cũng là một chuỗi Cauchy nhanh chóng (và chúng ta có thể chứng minh điều này mà không cần biết liệu dừng lại hay không). Do đó, chúng ta có thể tính giới hạn của nó , vì đại diện của chúng ta là đúng. Kiểm tra xem có phải là số nguyên không. Nếu có thì nó phải là và điều này chỉ xảy ra nếu chạy mãi mãi. Mặt khác, không phải là số nguyên, vì vậy phải dừng lại. QED.xmTmTz=limnynz0z TTzT

Bài tập: điều chỉnh bằng chứng trên để cho thấy rằng chúng ta không thể kiểm tra các số hữu tỷ. Sau đó điều chỉnh nó để cho thấy chúng ta không thể kiểm tra bất cứ thứ gì không tầm thường (điều này khó hơn một chút).

Đôi khi mọi người bị lẫn lộn về tất cả các doanh nghiệp thử nghiệm này. Họ nghĩ rằng chúng tôi đã chứng minh rằng chúng tôi không bao giờ có thể kiểm tra xem một số thực có phải là số nguyên hay không. Nhưng chắc chắn, 42 là có thật và chúng ta có thể biết liệu nó có phải là số nguyên hay không. Trên thực tế, bất kỳ thực tế cụ thể nào chúng tôi đưa ra, , , , v.v., chúng tôi hoàn toàn có thể biết liệu chúng có phải là số nguyên hay không. Chính xác, chúng ta có thể nói bởi vì chúng ta có thêm thông tin: những thực tế này không được trao cho chúng ta dưới dạng chuỗi, mà là các biểu thức tượng trưng mà từ đó chúng ta có thể tính toán bit Tsuyoshi. Ngay khi thông tin duy nhất chúng ta có về thực tế là một chuỗi các xấp xỉ hợp lý hội tụ với nó (và tôi làmsin1188ln89eπ163không có nghĩa là một biểu thức tượng trưng mô tả chuỗi, nhưng một hộp đen xuất ra thuật ngữ thứ trên đầu vào ) thì chúng ta sẽ bất lực như máy móc.nn

noi dung chinh cua cau chuyen

Thật vô nghĩa khi nói về việc thực hiện một tập hợp trừ khi chúng ta biết loại hoạt động nào chúng ta muốn thực hiện trên nó.


16
Nếu câu trả lời của tôi là vợ, tôi chỉ có thể trả lời một lần. Hoặc ít nhất tôi sẽ phải xóa câu trả lời trước khi tôi viết câu tiếp theo.
Andrej Bauer

5
@Max: các định lý đầu tiên của loại này được đưa ra bởi Kreisel, Lacombe và Shoenfield (tra cứu định lý KLS). Tsteitin một cách độc lập đã đưa ra một định lý khái quát hóa KLS và rõ ràng có dạng "mọi bản đồ tính toán được liên tục tính toán".
Andrej Bauer

6
Tôi cần viết một cuốn sách giáo khoa - (Google google google). Được rồi, tốt, bạn có nhiệm kỳ. Cứ liều thử đi!
Jeffε

10
@Tsuyoshi: Câu hỏi đã sử dụng cụm từ được thiết lập "số thực" mà không cần bằng cấp. Cấu trúc của số thực là tiêu chuẩn. Bạn có thể tự do xem xét các cấu trúc khác, nhưng bạn không được tự do hiểu sai thuật ngữ tiêu chuẩn.
Andrej Bauer

21
Về mặt kỹ thuật, bạn đã đúng, từ "thực" không được sử dụng. Nhưng bạn đang nhầm về định nghĩa của số thực. Hoặc tôi sẽ đặt nó theo cách này: thật tệ khi nghĩ rằng thực tế là một tập hợp cụ thể xuất hiện trước, chỉ được theo sau bởi một số cấu trúc. Giống như chúng ta định nghĩa các nhóm, vòng, không gian tôpô, v.v., theo cấu trúc của chúng, vì vậy chúng ta nên xác định các đối tượng đặc biệt theo các đặc tính phổ quát của chúng (số tự nhiên là nửa đầu, số nguyên của vòng ban đầu, trường hợp lý ban đầu, số thực các .....).
Andrej Bauer

10

Tôi có xu hướng nghĩ rằng điều này là không thể giải quyết được:

Đặt là một số vô tỷ tính toán. Hãy xem xét một TM . Bạn có thể xây dựng một hàm chạy trên và song song tính với độ chính xác ngày càng tăng. Nếu dừng lại, nó dừng tính toán , nếu không nó vẫn tiếp tục.xMMϵxMx

Quyết định nếu hàm này tính một số hữu tỷ tương đương với bài toán tạm dừng.


Tôi không hiểu câu trả lời của bạn, bạn có thể vui lòng giải thích thêm? Tôi không hiểu làm thế nào để bạn liên hệ nó với vấn đề tạm dừng và quan trọng hơn, tôi nghĩ không có lý do gì để dừng lại (ngay cả khi là số nguyên). Mx
dbarbosa

Như Tsuyoshi đã chỉ ra câu trả lời phụ thuộc vào đại diện và mô hình tính toán. Câu trả lời của bạn nói chính xác rằng nếu lấy các đầu vào là các số thực có thể tính toán được đưa ra bởi một máy tính TM thì chúng không thể quyết định được. Điều này là chính xác, tuy nhiên nó không gần với bất kỳ mô hình nào được sử dụng trong thực tế.
Kaveh

2
Thật vậy, câu trả lời của tôi đề cập đến các đại diện như được đăng trong câu hỏi, có thực tế hay không. @dbarbosa - Tôi sẽ giải thích: đưa ra một TM , hãy làm theo cách xây dựng trong câu trả lời. Sau đó, giả sử bằng cách mâu thuẫn rằng bạn có thể quyết định xem máy đầu ra có đại diện cho một lý trí hay không. Nếu nó là một số hữu tỷ, điều đó có nghĩa là tại một thời điểm nào đó, dừng lại và chúng ta ngừng tính toán số. Mặt khác, nếu nó không hợp lý, thì không dừng lại. Vì vậy, chúng ta biết liệu dừng lại, giải quyết vấn đề tạm dừng, được biết là không thể giải quyết được. MMMM
Shaull

10

Giả sử một số thực được đưa ra như một chuỗi các xấp xỉ hợp lý với sai số giới hạn bởi một số hàm tính toán đã biết có xu hướng bằng không (tất cả các xấp xỉ như vậy là tương đương và tương ứng với cấu trúc liên kết thông thường trên các số thực).

Các chức năng tính toán được liên tục. IsRational và IsInteger không liên tục và do đó không thể tính toán được.

IsInteger là bán được tính toán: có một quy trình cuối cùng sẽ xuất ra "false" nếu đầu vào không phải là số nguyên, nhưng sẽ chạy mãi mãi nếu đầu vào là một số nguyên. Quy trình này chỉ đơn giản là xem xét từng xấp xỉ và kiểm tra xem có một số nguyên nào trong phạm vi lỗi không. Hàm này liên tục khi chúng ta sử dụng cấu trúc liên kết Sierpiński trên {true, false} (nghĩa là {false} là một tập mở nhưng {true} thì không).


Cảm ơn câu trả lời. Tôi không hiểu không liên tục => không tính toán được, tôi đoán rằng bạn đã sử dụng một định lý (có thể được biết đến rộng rãi) mà tôi không biết hoặc tôi không nhớ. Bạn có thể vui lòng cung cấp thêm chi tiết về bước này?
dbarbosa

1
"Computable => liên tục" dường như là một định lý dân gian - tôi không thể tìm thấy một trích dẫn gốc. Lý thuyết tính toán trên các đối tượng vô hạn và các kết nối với cấu trúc liên kết được mô tả khá tốt (IMO) trong các slide này của Brattka ( math.uni.wroc.pl/~pkowa/slides/brattka.pdf ). Dự luật 2 trong các trang trình bày rằng tất cả các chức năng tính toán trên các chuỗi tự nhiên là liên tục; kết hợp với Định lý 12 người ta nhận được kết quả cho các hàm của các loại khác.
Tối đa

6

Không thể xác định được liệu một số tính toán đã cho có bằng không .

(Vì vậy, lời tiên tri gần đúng hợp lý của bạn trả về 0 cho mỗi bạn đã thử? Có lẽ bạn chưa cho nó đủ nhỏ ε.)

Do đó, không thể xác định được liệu một số tính toán nhất định giữa-và + ½ có phải là số nguyên hay không.


2

Hàm có thể tính toán mạnh hơn hàm liên tục, tức là bất kỳ hàm tính toán nào cũng cần phải liên tục trong cấu trúc liên kết thông tin.

Bạn muốn xem hàm được xác định bởiF:R{Yes,No}

F(r)={YESrQNOo.w.

là tính toán.

Giả sử tương tự như những gì bạn đã viết, các số thực được cho bởi các hộp đen và một hộp đen số thực có thể được sử dụng để lấy số hữu tỷ có dạng sao cho cho mọi số tự nhiên .rk2nnr[k2n,k+12n]n

Sau đó, chức năng của bạn không liên tục và do đó không thể tính toán được.

Dưới đây là một đối số đối thủ trực tiếp và trực quan hơn: Gọi là một cỗ máy. Giả sử rằng số đó là . Giả sử rằng với , hộp đen trả về . Nếu không dừng lại, chúng ta đã xong. Nếu nó dừng lại, hãy để số lớn nhất mà đã yêu cầu một xấp xỉ là . Sau đó, thông tin mà đã thấy cho đến thời điểm này phù hợp với số thực là bất kỳ số thực nào trong khoảng , tức là không có đủ thông tin để giải quyết chính xác vấn đề. Nếu trả lời0 n [ - 1M0nMMmM[-1[12n,12n]MMmMMMNOYESM[-1[12m,12m]MMNOthì câu trả lời không chính xác. Nếu nó trả lời sau đó chúng ta có thể xem xét việc chạy trên bất kỳ số lượng hợp lý trong khoảng và không đúng cách sẽ trả lời vì nó sẽ nhận được chính xác cùng thông tin từ hộp đen. Do đó không thể giải quyết vấn đề một cách chính xác.YESMMYESM[12m,12m]MYESM

Bằng chứng cho thấy bất kỳ chức năng tính toán nào cần phải liên tục là tương tự nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.