是否可以测试可计算数字是有理数还是整数?


18

是否可以通过算法测试可计算数是有理数还是整数?换句话说,将有可能为图书馆实现可计算数提供的功能isInteger还是isRational

我猜测这是不可能的,并且这在某种程度上与以下事实有关:无法测试两个数字是否相等,但是我看不出如何证明这一点。

编辑:可计算的数字x由函数给出,该函数fx(ϵ)可以返回精度为ϵ的有理近似值:| x f xϵ | ε,对于任何ε > 0。鉴于这样的功能,就是可以测试,如果X QX žxϵ|xfx(ϵ)|ϵϵ>0xQxZ

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
可计算数字如何给出?
伊藤刚(Tsuyoshi Ito)

10
当然,如何给出数字是相关的。举一个愚蠢的例子,如果输入包含一个数字是否为整数的标志,则判断输入是否为整数是微不足道的。
伊藤刚(Tsuyoshi Ito)2013年


3
(1)“您怎么知道这是一个整数?”我为什么要关心?您没有对操作要求说任何话。(2)“到目前为止,如果您看到这两个答案,它们什么都没有提及实现。”我不知道您在这里所说的“实现”是什么意思,或者这句话为什么与我的评论相关。
伊藤刚(Tsuyoshi Ito)

16
我希望我的回答能使这次讨论顺利进行。刚,你误会了,什么运算是可以计算的。我们不是凭空实现实数,而是为了操纵它们。根据您的说法,我们可以只使用单元类型来实现所有功能。是的,我们可以,但是某些运算将无法计算,而这正是我们判断表示形式的标准。
Andrej Bauer 2013年

Answers:


32

对于“代表”或“实现”实数的含义很容易感到困惑。实际上,我们在评论中目睹了一个讨论,该讨论存在争议。因此,让我首先解决这个问题。

我们怎么知道一个实现是正确的?

解释如何在计算机中表示事物的理论是可实现的。其基本思路是,给定一组,我们选择一个数据类型τ和每一个X X一组类型的值τ其中实现它。我们写v X X时,v是一个值了实现X。例如(我将使用哈斯克尔没有很好的理由),一个合理的实施ñ可能是数据类型,其中v ķ ñvXτxXτvxXvxNIntegervkNv计算结果为数字(因此特别不表示自然数,并且同样没有发散程序)。但一些小丑可以通过行走,并建议我们使用与代表自然数牛逼[R ü è42 ñ˚F 小号Ëñ ññ 42。为什么这不正确?我们需要一个标准k¯-42BoolTrue42NFalsenNn42

在“小丑号码”的情况下,很容易观察到无法实现加法运算。假如我告诉你,我有两个数字,由双方代表。你能给一个实现者多少钱吗?好吧,这取决于总和是否为42,但是您无法确定。由于加法是“自然数是必不可少的部分”,因此这是不可接受的。换句话说,实现不是关于集合,而是关于结构,即,我们必须以这样的方式表示集合:也可以实现相关的结构。让我强调一下:False

我们实现结构,而不是裸集。因此,我们必须能够实现整个结构以及操作和所有公理,以使实现正确。

如果您不遵守该原则,则必须提出另一种正确性的数学准则。我不知道一个。

示例:自然数的表示

对于自然数,相关结构由Peano公理描述,必须实现的关键公理是归纳法(也可以是,后继,+×)。我们可以使用可实现性来计算归纳的实现。原来是一张地图(代表自然数的未知数据类型在哪里)0+×nat

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

满意induction x f zero = xinduction x f (succ n) = f n (induction x f n)。所有这些都是出于可实现性。我们有一个标准:自然数的实现在允许实现Peano公理的情况下是正确的。如果我们使用的数字的表征作为算符初始代数类似的结果将获得X1+X

正确执行实数

让我们将注意力转向实际数字和眼前的问题。要问的第一个问题是“实数的相关结构是什么?” 答案是:阿基米德·柯西完成有序字段。这是“实数”的既定含义。您不必更改它,它已由其他人为您修复(在我们的案例中,替代的Dedekind实物与我们在考虑的Cauchy实物同构)。您无法删除其中的任何部分,您不得说“我不在乎执行加法”或“我不在乎订单”。如果这样做,则不能将其称为“实数”,而应称为“我们忘记线性顺序的实数”。

我将不涉及所有细节,但让我只解释一下结构的各个部分如何实现实际的各种操作:

  • 所述阿基米德公理关于计算合理的实数的近似值
  • 字段结构给出了通常的算术运算
  • 线性阶为我们提供了检验x < y半确定过程x<y
  • 柯西完整性给我们一个函数lim : (nat -> real) -> real,其需要(的表示)迅速柯西序列,并返回它的极限。(A序列是快速如果| X ñ - X |2 分钟(xn)n对于所有Ñ。)|xnxm|2min(n,m)m,n

我们没有得到的是相等性的测试函数。实在的公理中没有什么要求可判定的。(相反,Peano公理表示自然数是可确定的,您可以通过仅将它用作有趣的练习来证明这一点)。=eq : nat -> nat -> Boolinduction

一个事实是,人类使用的通常的十进制实数表示形式不好,因为我们甚至不能实现加法。具有无限尾数的浮点也会失败(练习:为什么?)。但是有效的是带符号的数字表示,即在其中我们允许负数也可以是正数。或者我们可以使用满足快速柯西检验的理性序列,如上所述。

Tsuyoshi表示形式也实现了某些内容,但不实现R

让我们考虑以下实数表示:实数由一对q b )表示,其中q n n是收敛到x的快速柯西序列,而b是指示x是否为整数的布尔值。为了将其表示为实数,我们必须实现加法,但事实证明我们无法计算布尔标志。因此,这不是真实的表示。但它仍然代表某种东西,即实数的子集x(q,b)(qn)nxbxZ(RZ)。实际上,根据可实现性解释的联合与指示工会我们是在哪部分的标志来实现。顺便提一句,是一个等于 [R ,除非你相信排中,这无法实施,因此与该讨论完全无关。计算机迫使我们凭直觉做事。Z(RZ)R

我们无法测试实数是否为整数

最后,让我回答提出的问题。我们现在知道,可以通过快速的柯西序列理性来表示实数。(一个重要的定理指出,可接受的实数的任何两个表示实际上都是可计算的同构。)

定理:无法确定实数是否为整数。

证明。假设我们可以测试一个实数是否为整数(当然,该实数是通过快速柯西序列实现的)。这个想法可以让您证明一个更通用的定理,该想法是构造一个非整数的快速柯西序列,它收敛到一个整数。这很容易,只要取x n = 2 n即可。接下来,按以下方法解决暂停问题。给定图灵机T,通过 y n = { x n 如果  T定义一个新序列y n n(xn)nxn=2nT(yn)n 也就是说,新序列的样子序列Xññ只要牛逼运行,但随后被“卡住”在X,如果Ť停止在步骤。非常重要的是,新序列也是快速柯西序列(我们可以在不知道T是否停止的情况下证明这一点)。因此,我们可以计算其极限z=limnyn

yn={xnif T has not stopped within n stepsxmif T stopped in step m and mn
(xn)nTxmTmTz=limnyn,因为我们对实数的表示是正确的。测试是否为整数。如果是,则必须为0z0并且仅在永远运行时才会发生。否则,z不是整数,因此T必须停止。QED。TzT

练习:修改以上证明以表明我们无法测试有理数。然后对其进行调整,以表明我们无法测试任何非平凡的东西(这有点困难)。

有时人们会对所有这些测试业务感到困惑。他们认为我们已经证明,我们永远无法测试一个实数是否为整数。但是可以肯定的是42是实数,我们可以判断它是否是整数。事实上,任何特定的现实,我们想出了,88 LN 89É π sin1188ln89等,我们可以很好地判断它们是否为整数。确切地说,我们可以说是因为我们有更多信息:这些实数不是作为序列提供给我们的,而是作为可以用来计算Tsuyoshi位的符号表达式。一旦我们拥有关于实数的唯一信息,便是一个有理逼近序列收敛到该序列(我不是要描述该序列的符号表达式,而是一个在输入n上输出第n个项的黑盒),那么我们就像机器一样无助。eπ163nn

这个故事的主旨

除非我们知道要对集合执行哪种操作,否则谈论集合的实现没有任何意义。


16
如果我的回答是妻子,我只能回答一次。或者至少在写下一个答案之前,我必须删除上一个答案。
Andrej Bauer 2013年

5
@Max:此类第一个定理是由Kreisel,Lacombe和Shoenfield给出的(查找KLS定理)。Tsteitin独立地给出了一个定理,该定理推广了KLS,并且明确地具有“每个可计算图都是可计算的连续”的形式。
安德烈·鲍尔

6
我需要写一本教科书 -(Google google google google)。好吧,好,您有任期。去吧!
Jeffε

10
@Tsuyoshi:这个问题使用了既定的短语“实数”,没有限定条件。实数的结构是标准的。您可以自由考虑其他结构,但不能随意误解标准术语。
Andrej Bauer

21
从技术上讲,您是对的,没有使用“真实”一词。但是您对实数的定义感到误解。或我这样说:认为实数是特定的集合是最先出现的,然后才是某种结构,这是不好的数学。就像我们根据结构定义组,环,拓扑空间等一样,我们也根据其通用属性定义特殊对象(自然数是初始半环,整数是初始环,有理数是初始场,实数.....)。
Andrej Bauer 2013年

10

我倾向于认为这是不可确定的:

为可计算的无理数。考虑一个TM 中号。您可以构造一个在ϵ上运行M的函数,并以越来越高的精度并行计算x。如果M暂停,它将停止计算xxMMϵxMx,否则它将继续。

决定此函数是否计算有理数等效于暂停问题。


I don't understand your answer, could you please elaborate more? I don't understand how do you relate it with the halting problem, and more importantly, I think there is no reason for M to ever halt (even if x is an integer).
dbarbosa

As Tsuyoshi has pointed out the answer depends on the representation and the model of computation. Your answer correctly says that if take the inputs to be computable real numbers given by a TM computing them then equality is not decidable. This is correct, however it is not close to any model that is used in practice.
Kaveh

2
Indeed, my answer refers to representations as posted in the question, be them practical or not. @dbarbosa - I'll explain: given a TM M, follow the construction in the answer. Then, assume by way of contradiction that you can decide whether the outputted machine represents a rational or not. If it is a rational, it means that at some point, M halted and we cease to compute the number. On the other hand, if it is irrational, then M doesn't halt. Thus, we know whether M halts, solving the halting problem, which is known to be undecidable.
Shaull

10

Assuming a real is given as a sequence of rational approximations with the error bounded by some known computable function which tends to zero (all such approximations are equivalent, and correspond to the usual topology on the reals).

Computable functions are continuous. IsRational and IsInteger are not continuous and therefore not computable.

IsInteger is semi-computable: there is a procedure that will eventually output "false" if the input is not an integer, but will run forever if the input is an integer. This procedure simply looks at each approximation and checks whether there is an integer within the error bound. This function is continuous when we use the Sierpiński topology on {true, false} (i.e. {false} is an open set but {true} is not).


Thanks for the answer. I don't understand the not continuous => not computable, I am guessing that you used a (probably widely known) theorem that I am not aware of or that I am not remembering. Could you please provide more detail about this step?
dbarbosa

1
"computable => continuous" seems to be a folk theorem -- I can't find an original citation. The theory of computation on infinite objects and the connections to topology are described quite well (IMO) in these course slides by Brattka (math.uni.wroc.pl/~pkowa/slides/brattka.pdf). Proposition 2 in the slides states that all computable functions on sequences of naturals are continuous; combined with Theorem 12 one gets the result for functions of other types.
Max

6

It is undecidable whether a given computable number is equal to zero.

(So your rational approximation oracle returns 0 for every ε you've tried? Maybe you just haven't given it a small enough ε.)

Thus, it's undecidable whether a given computable number between -½ and +½ is an integer.


2

A function being computable is a stronger than the function being continuous, i.e. any computable function needs to be continuous in the information topology.

You want to see if the function F:R{Yes,No} defined by

F(r)={YESrQNOo.w.

is computable.

Let's assume that similar to what you wrote, real numbers are given by black-boxes and a real number black-box r can be used to obtain a rational number of the form k2n such that r[k2n,k+12n] for any natural number n.

Then your function is not continuous and is therefore not computable.

Here is a more direct and intuitive adversary argument: Let M be a machine. Assume that the number is 0. Assume that for n the black-box returns [12n,12n]. If M doesn't halt we are done. If it halts, let the largest number that M has asked an approximation for to be m. Then information that M has seen up to this point is consistent with the real number being any real number in the interval [12m,12m], i.e. M doesn't have enough information to correctly solve the problem. If M answers NO then the answer is incorrect. If it answers YES then we can consider running M on any irrational number in the interval [12m,12m] and M will incorrectly answer YES since it will get exactly the same information from the black-box. Therefore M cannot solve the problem correctly.

The proof that any computable function needs to be continuous is similar.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.