亲子鉴定需要什么| 葬爱家族是什么意思| 桂枝茯苓丸主治什么病| 吃降压药有什么副作用| 9月18日是什么日子| 1983年是什么年| 凝血酶原时间是什么意思| 消化酶是什么| 脑梗塞什么症状| 梦到人死了是什么意思| 袁崇焕为什么被杀| 舌头上火吃什么药| 甲状腺在人体什么位置| 怀孕6个月吃什么好| 重阳节是什么生肖| 皮肤黏膜是什么| 什么是讨好型人格| 熟石灰是什么| 衤字旁与什么有关| 五代十国是什么意思| 有什么聚会玩的游戏| 下午四点到五点是什么时辰| 7月10号是什么星座| 脑梗有什么前兆| 男生圆脸适合什么发型| 宽慰什么意思| 甲胎蛋白是检查什么的| 糖化是什么意思| 谷字五行属什么| 中水是什么| 斤加一笔是什么字| 核磁共振和ct有什么区别| 胳膊疼挂什么科| 一鸣惊人指什么生肖| 坐立不安是什么意思| 埋线有什么好处和坏处| 肌酐高什么东西不能吃| 水杨酸是什么| 胃一阵一阵的疼是什么原因| 鸡骨草有什么功效| 心肌缺血是什么原因造成的| 面膜什么时候敷效果最好| 厂与什么有关| 梦到父母离婚是什么意思| 裸捐是什么意思| 手心出汗是什么原因| 司马光和司马迁是什么关系| 开团什么意思| 全自动洗衣机不脱水是什么原因| 屎发黑是什么原因| 支气管哮喘是什么原因引起的| 宝齐莱算什么档次的表| 鳞状上皮内高度病变是什么意思| 红米饭是什么米| 跟单员是做什么的| 一座什么| 万兽之王是什么动物| 晚上睡觉脚抽筋是什么原因引起的| 德巴金是什么药| 月经不调吃什么药好| 测血糖挂号挂什么科| 高密度灶是什么意思| 心悸吃什么中成药| 酸儿辣女什么意思| 魄力是什么意思| 来大姨妈前有什么症状| 尿正常是什么颜色| 1ph是什么意思| who医学上是什么意思| 舌头有裂纹是什么原因| 补办医保卡需要什么资料| 开诚布公什么意思| 什么什么为什么| 什么什么若狂| 指尖发麻是什么原因| 静脉曲张吃什么药好| 胡子发黄是什么原因| 勾芡用什么粉最好| 手抖看什么科| 朱雀玄武是什么意思| 音节是指什么| midea是什么牌子| 梦到鞋子是什么意思| 佛爷是什么意思| 曲马多是什么药| 六味地黄丸什么牌子的好| 色泽是什么意思| 宝宝低烧吃什么药| 锦鲤是什么鱼| 早搏的症状是什么表现| 蝉鸣声耳鸣是什么原因引起的| 什么的青草| 什么是紫苏| 树木什么| 脾胃虚弱吃什么食物补| 减肥期间吃什么水果| 富氢水是什么| 血压测不出来什么原因| 什么样人穿棉麻好看| 词牌名是什么意思| 医助是什么工作| 蚊子爱咬什么样的人| 反复口腔溃疡是什么病的前兆| 过敏性皮肤用什么护肤品比较好| 什么食物去湿气| 查甲状腺挂什么科| 甲状腺不能吃什么食物| 卵黄囊偏大是什么原因| 馒头逼是什么意思| 皮肤过敏吃什么药好| 鹅吃什么| 牛蛙吃什么| 河东狮吼什么意思| 两个方一个土是什么字| 什么是会车| 九零年属什么生肖| 九月三号是什么星座| 胃不消化吃什么药效果最好| only是什么品牌| 匪夷所思是什么意思| 中国属于什么亚| 什么菜| 万箭穿心代表什么生肖| 什么是属性| 龟头感染用什么药| 主治医师是什么级别| 冰箱为什么老是结冰| 尿酸低会引发什么症状| 肚子左侧是什么器官| 打喷嚏头疼是什么原因| 女孩子学什么专业好| 33是什么意思| 肺结节是什么病严重吗| 水漫金山是什么意思| la是什么品牌| 吃什么降血糖最快| 蒽是什么意思| 则字五行属什么| 管科是什么专业| 荷花是什么季节开放的| 乔治白属于什么档次| 四不念什么| 皮牙子是什么| 7月份可以种什么菜| conch是什么牌子| 良代表什么生肖| 属狗是什么星座| 梦见自己又结婚了是什么意思| 阿托伐他汀钙片有什么副作用| 胃溃疡适合吃什么食物| 冷喷机喷脸有什么好处| 抗巨细胞病毒抗体igg高是什么意思| 舌头发紫是什么原因| 十二点是什么时辰| 长沙有什么特产| dunk是什么牌子| 红景天有什么功效| 999足金是什么意思| 翡翠和玉石有什么区别| 什么的原野| 铉是什么意思| 紧迫感是什么意思| 什么叫2型糖尿病| 排卵期出血是什么原因| 一什么棉花| 甲功七项挂什么科| 什么叫肺纤维化| 子宫发炎是什么原因引起的| 肾病到什么程度腿会肿| 走花路是什么意思| 曙光是什么意思| 不让他看我的朋友圈是什么效果| 梦见到处都是蛇预示着什么| 看血管挂什么科| 属龙是什么星座| 麻风病是什么症状图片| 什么是生物制剂药| 胃属于什么科室| 文联主席是什么级别| 10月28日什么星座| 车震是什么意思| 格力空调睡眠模式1234什么意思| 什么药| 少女怀春是什么意思| 运动后喝什么饮料最好| 发芽土豆含有什么毒素| 语重心长是什么意思| 高血糖吃什么水果最好| 肝脂肪浸润是什么意思| 兔子的眼睛为什么是红色的| 文化内涵是什么意思| 经期肚子疼是什么原因| 盛情款待是什么意思| 空调的睡眠模式是什么意思| 复出是什么意思| 县宣传部长是什么级别| 什么是肋骨骨折| 丰胸吃什么| 原发性高血压是什么意思| 缺钙吃什么食物| 水痘是什么| 指鹿为马指什么生肖| 迎合是什么意思| 为什么刚吃完饭不能洗澡| 输卵管堵塞是什么原因造成的| 裤裙搭配什么上衣好看| BE是什么| 市公安局政委是什么级别| 支气管挂什么科| 腰间盘挂什么科| 小孩子流鼻血是什么原因| 什么叫血栓| 什么是优质碳水| 尿血是什么问题| 孩子老打嗝是什么原因| 2005年属鸡的是什么命| 尿毒症有些什么症状| 伤口不愈合是什么原因| gucci是什么品牌| 端庄的意思是什么| 伸舌头锻炼有什么好处| 吃什么能马上晕倒住院| 孙悟空被压在什么山下| 左是什么结构的字| 1971年是什么年| 苍茫的天涯是我的爱是什么歌| 普瑞巴林胶囊治什么病| 属猪的护身佛是什么佛| 时间是什么| 丑是什么生肖| 肤专家抑菌软膏主要治什么| 轻度异常脑电图是什么意思| 取鱼刺挂什么科室| 体检前一天不能吃什么| 美国的国宝是什么动物| 脚面疼痛什么原因| 心口疼是什么原因| 反复发烧挂什么科| 云裳是什么意思| 乳腺钙化灶是什么意思| 新疆是什么族| pr什么意思| 梦见女儿结婚是什么意思| 九月底是什么星座| 逆行是什么意思| 猪八戒姓什么| 什么牛肉最好吃| 小样是什么意思| 混油皮是什么意思| 眼睛模糊吃什么好| 湿气重挂什么科| 隐形眼镜没有护理液用什么代替| 什么是苔藓皮肤病| 2014是什么年| 多彩的什么| 结甲是什么意思| 灵魂摆渡是什么意思| 什么是预科生| 肌红蛋白是什么意思| 冰酒是什么酒| 金鱼藻是什么植物| 痉挛是什么| 头皮痒用什么止痒最好| 火鸡面为什么这么贵| 百度Jump to content

深入学习贯彻党的十九大精神

From Wikipedia, the free encyclopedia
百度 国家新闻出版署(国家版权局)在中央宣传部加挂牌子,由中央宣传部承担相关职责。

In computability theory, the halting problem is the problem of determining, from a description of an arbitrary computer program and an input, whether the program will finish running, or continue to run forever. The halting problem is undecidable, meaning that no general algorithm exists that solves the halting problem for all possible program–input pairs. The problem comes up often in discussions of computability since it demonstrates that some functions are mathematically definable but not computable.

A key part of the formal statement of the problem is a mathematical definition of a computer and program, usually via a Turing machine. The proof then shows, for any program f that might determine whether programs halt, that a "pathological" program g exists for which f makes an incorrect determination. Specifically, g is the program that, when called with some input, passes its own source and its input to f and does the opposite of what f predicts g will do. The behavior of f on g shows undecidability as it means no program f will solve the halting problem in every possible case.

Background

[edit]

The halting problem is a decision problem about properties of computer programs on a fixed Turing-complete model of computation, i.e., all programs that can be written in some given programming language that is general enough to be equivalent to a Turing machine. The problem is to determine, given a program and an input to the program, whether the program will eventually halt when run with that input. In this abstract framework, there are no resource limitations on the amount of memory or time required for the program's execution; it can take arbitrarily long and use an arbitrary amount of storage space before halting. The question is simply whether the given program will ever halt on a particular input.

For example, in pseudocode, the program

while (true) continue

does not halt; rather, it goes on forever in an infinite loop. On the other hand, the program

print "Hello, world!"

does halt.

While deciding whether these programs halt is simple, more complex programs prove problematic. One approach to the problem might be to run the program for some number of steps and check if it halts. However, as long as the program is running, it is unknown whether it will eventually halt or run forever. Turing proved no algorithm exists that always correctly decides whether, for a given arbitrary program and input, the program halts when run with that input. The essence of Turing's proof is that any such algorithm can be made to produce contradictory output and therefore cannot be correct.

Programming consequences

[edit]

Some infinite loops can be quite useful. For instance, event loops are typically coded as infinite loops.[1] However, most subroutines are intended to finish.[2] In particular, in hard real-time computing, programmers attempt to write subroutines that are not only guaranteed to finish, but are also guaranteed to finish before a given deadline.[3]

Sometimes these programmers use some general-purpose (Turing-complete) programming language, but attempt to write in a restricted style—such as MISRA C or SPARK—that makes it easy to prove that the resulting subroutines finish before the given deadline.[citation needed]

Other times these programmers apply the rule of least power—they deliberately use a computer language that is not quite fully Turing-complete. Frequently, these are languages that guarantee all subroutines finish, such as Rocq.[citation needed]

Common pitfalls

[edit]

The difficulty in the halting problem lies in the requirement that the decision procedure must work for all programs and inputs. A particular program either halts on a given input or does not halt. Consider one algorithm that always answers "halts" and another that always answers "does not halt". For any specific program and input, one of these two algorithms answers correctly, even though nobody may know which one. Yet neither algorithm solves the halting problem generally.

There are programs (interpreters) that simulate the execution of whatever source code they are given. Such programs can demonstrate that a program does halt if this is the case: the interpreter itself will eventually halt its simulation, which shows that the original program halted. However, an interpreter will not halt if its input program does not halt, so this approach cannot solve the halting problem as stated; it does not successfully answer "does not halt" for programs that do not halt.

The halting problem is theoretically decidable for linear bounded automata (LBAs) or deterministic machines with finite memory. A machine with finite memory has a finite number of configurations, and thus any deterministic program on it must eventually either halt or repeat a previous configuration:[4]

...any finite-state machine, if left completely to itself, will fall eventually into a perfectly periodic repetitive pattern. The duration of this repeating pattern cannot exceed the number of internal states of the machine...

However, a computer with a million small parts, each with two states, would have at least 21,000,000 possible states:[5]

This is a 1 followed by about three hundred thousand zeroes ... Even if such a machine were to operate at the frequencies of cosmic rays, the aeons of galactic evolution would be as nothing compared to the time of a journey through such a cycle:

Although a machine may be finite, and finite automata "have a number of theoretical limitations":[5]

...the magnitudes involved should lead one to suspect that theorems and arguments based chiefly on the mere finiteness [of] the state diagram may not carry a great deal of significance.

It can also be decided automatically whether a nondeterministic machine with finite memory halts on none, some, or all of the possible sequences of nondeterministic decisions, by enumerating states after each possible decision.

History

[edit]

In April 1936, Alonzo Church published his proof of the undecidability of a problem in the lambda calculus. Turing's proof was published later, in January 1937. Since then, many other undecidable problems have been described, including the halting problem which emerged in the 1950s.

Timeline

[edit]
  • 1900 (1900): David Hilbert poses his "23 questions" (now known as Hilbert's problems) at the Second International Congress of Mathematicians in Paris. "Of these, the second was that of proving the consistency of the 'Peano axioms' on which, as he had shown, the rigour of mathematics depended".[6]
  • 1920 (1920) – 1921 (1921): Emil Post explores the halting problem for tag systems, regarding it as a candidate for unsolvability.[7] Its unsolvability was not established until much later, by Marvin Minsky.[8]
  • 1928 (1928): Hilbert recasts his 'Second Problem' at the Bologna International Congress.[9] He posed three questions: i.e. #1: Was mathematics complete? #2: Was mathematics consistent? #3: Was mathematics decidable?[10] The third question is known as the Entscheidungsproblem (Decision Problem).[11]
  • 1930 (1930): Kurt G?del announces a proof as an answer to the first two of Hilbert's 1928 questions.[12] "At first he [Hilbert] was only angry and frustrated, but then he began to try to deal constructively with the problem... G?del himself felt—and expressed the thought in his paper—that his work did not contradict Hilbert's formalistic point of view".[13]
  • 1931 (1931): G?del publishes "On Formally Undecidable Propositions of Principia Mathematica and Related Systems I".[14]
  • 19 April 1935 (2025-08-06): Alonzo Church publishes "An Unsolvable Problem of Elementary Number Theory", which proposes that the intuitive notion of an effectively calculable function can be formalized by the general recursive functions or equivalently by the lambda-definable functions. He proves that the halting problem for lambda calculus (i.e., whether a given lambda-expression has a normal form) is not effectively calculable.[15]
  • 1936 (1936): Church publishes the first proof that the Entscheidungsproblem is unsolvable, using a notion of calculation by recursive functions.[16]
  • 7 October 1936 (2025-08-06): Emil Post's paper "Finite Combinatory Processes. Formulation I" is received. Post adds to his "process" an instruction "(C) Stop". He called such a process "type 1 ... if the process it determines terminates for each specific problem."[17]
  • May 1936 (1936-05) – January 1937 (1937-01): Alan Turing's paper On Computable Numbers With an Application to the Entscheidungsproblem goes to press in May 1936 and reaches print in January 1937.[18] Turing proves three problems undecidable: the "satisfaction" problem, the "printing" problem, and the Entscheidungsproblem.[19] Turing's proof differs from Church's by introducing the notion of computation by machine. This is one of the "first examples of decision problems proved unsolvable".[20]
  • 1939 (1939): J. Barkley Rosser observes the essential equivalence of "effective method" defined by G?del, Church, and Turing.[21]
  • 1943 (1943): In a paper, Stephen Kleene states that "In setting up a complete algorithmic theory, what we do is describe a procedure ... which procedure necessarily terminates and in such manner that from the outcome we can read a definite answer, 'Yes' or 'No,' to the question, 'Is the predicate value true?'."
  • 1952 (1952): Kleene includes a discussion of the unsolvability of the halting problem for Turing machines and reformulates it in terms of machines that "eventually stop", i.e. halt: "...there is no algorithm for deciding whether any given machine, when started from any given situation, eventually stops."[20]
  • 1952 (1952): Martin Davis uses the term 'halting problem' in a series of lectures at the Control Systems Laboratory at the University of Illinois in 1952. It is likely that this is the first such use of the term.[22]

Origin of the halting problem

[edit]

Many papers and textbooks refer the definition and proof of undecidability of the halting problem to Turing's 1936 paper. However, this is not correct.[19][23] Turing did not use the terms "halt" or "halting" in any of his published works, including his 1936 paper.[24] A search of the academic literature from 1936 to 1958 showed that the first published material using the term “halting problem” was Rogers (1957). However, Rogers says he had a draft of Davis (1958) available to him,[19] and Martin Davis states in the introduction that "the expert will perhaps find some novelty in the arrangement and treatment of topics",[25] so the terminology must be attributed to Davis.[19][23] Davis stated in a letter that he had been referring to the halting problem since 1952.[22] The usage in Davis's book is as follows:[26]

"[...] we wish to determine whether or not [a Turing machine] Z, if placed in a given initial state, will eventually halt. We call this problem the halting problem for Z. [...]

Theorem 2.2 There exists a Turing machine whose halting problem is recursively unsolvable.

A related problem is the printing problem for a simple Turing machine Z with respect to a symbol Si".

A possible precursor to Davis's formulation is Kleene's 1952 statement, which differs only in wording:[19][20]

there is no algorithm for deciding whether any given machine, when started from any given situation, eventually stops.

The halting problem is Turing equivalent to both Davis's printing problem ("does a Turing machine starting from a given state ever print a given symbol?") and to the printing problem considered in Turing's 1936 paper ("does a Turing machine starting from a blank tape ever print a given symbol?"). However, Turing equivalence is rather loose and does not mean that the two problems are the same. There are machines which print but do not halt, and halt but not print. The printing and halting problems address different issues and exhibit important conceptual and technical differences. Thus, Davis was simply being modest when he said:[19]

It might also be mentioned that the unsolvability of essentially these problems was first obtained by Turing.

Formalization

[edit]

In his original proof Turing formalized the concept of algorithm by introducing Turing machines. However, the result is in no way specific to them; it applies equally to any other model of computation that is equivalent in its computational power to Turing machines, such as Markov algorithms, Lambda calculus, Post systems, register machines, or tag systems.

What is important is that the formalization allows a straightforward mapping of algorithms to some data type that the algorithm can operate upon. For example, if the formalism lets algorithms define functions over strings (such as Turing machines) then there should be a mapping of these algorithms to strings, and if the formalism lets algorithms define functions over natural numbers (such as computable functions) then there should be a mapping of algorithms to natural numbers. The mapping to strings is usually the most straightforward, but strings over an alphabet with n characters can also be mapped to numbers by interpreting them as numbers in an n-ary numeral system.

Representation as a set

[edit]

The conventional representation of decision problems is the set of objects possessing the property in question. The halting set

K = {(i, x) | program i halts when run on input x}

represents the halting problem.

This set is recursively enumerable, which means there is a computable function that lists all of the pairs (ix) it contains. However, the complement of this set is not recursively enumerable.[27]

There are many equivalent formulations of the halting problem; any set whose Turing degree equals that of the halting problem is such a formulation. Examples of such sets include:

  • {i | program i eventually halts when run with input 0}
  • {i | there is an input x such that program i eventually halts when run with input x}.

Proof concept

[edit]

Christopher Strachey outlined a proof by contradiction that the halting problem is not solvable.[28][29] The proof proceeds as follows: Suppose that there exists a total computable function halts(f) that returns true if the subroutine f halts (when run with no inputs) and returns false otherwise. Now consider the following subroutine:

def g():
    if halts(g):
        loop_forever()

halts(g) must either return true or false, because halts was assumed to be total. If halts(g) returns true, then g will call loop_forever and never halt, which is a contradiction. If halts(g) returns false, then g will halt, because it will not call loop_forever; this is also a contradiction. Overall, g does the opposite of what halts says g should do, so halts(g) can not return a truth value that is consistent with whether g halts. Therefore, the initial assumption that halts is a total computable function must be false.

Sketch of rigorous proof

[edit]

The concept above shows the general method of the proof, but the computable function halts does not directly take a subroutine as an argument; instead it takes the source code of a program. Moreover, the definition of g is self-referential. A rigorous proof addresses these issues. The overall goal is to show that there is no total computable function that decides whether an arbitrary program i halts on arbitrary input x; that is, the following function h (for "halts") is not computable:[30]

Here program i refers to the i th program in an enumeration of all the programs of a fixed Turing-complete model of computation.

f(i,j) i
1 2 3 4 5 6
j 1 1 0 0 1 0 1
2 0 0 0 1 0 0
3 0 1 0 1 0 1
4 1 0 0 1 0 0
5 0 0 0 1 1 1
6 1 1 0 0 1 0
f(i,i) 1 0 0 1 1 0
g(i) U 0 0 U U 0

Possible values for a total computable function f arranged in a 2D array. The orange cells are the diagonal. The values of f(i,i) and g(i) are shown at the bottom; U indicates that the function g is undefined for a particular input value.

The proof proceeds by directly establishing that no total computable function with two arguments can be the required function h. As in the sketch of the concept, given any total computable binary function f, the following partial function g is also computable by some program e:

The verification that g is computable relies on the following constructs (or their equivalents):

  • computable subprograms (the program that computes f is a subprogram in program e),
  • duplication of values (program e computes the inputs i,i for f from the input i for g),
  • conditional branching (program e selects between two results depending on the value it computes for f(i,i)),
  • not producing a defined result (for example, by looping forever),
  • returning a value of 0.

The following pseudocode for e illustrates a straightforward way to compute g:

procedure e(i):
    if f(i, i) == 0 then
        return 0
    else
        loop forever

Because g is partial computable, there must be a program e that computes g, by the assumption that the model of computation is Turing-complete. This program is one of all the programs on which the halting function h is defined. The next step of the proof shows that h(e,e) will not have the same value as f(e,e).

It follows from the definition of g that exactly one of the following two cases must hold:

  • f(e,e) = 0 and so g(e) = 0. In this case program e halts on input e, so h(e,e) = 1.
  • f(e,e) ≠ 0 and so g(e) is undefined. In this case program e does not halt on input e, so h(e,e) = 0.

In either case, f cannot be the same function as h. Because f was an arbitrary total computable function with two arguments, all such functions must differ from h.

This proof is analogous to Cantor's diagonal argument. One may visualize a two-dimensional array with one column and one row for each natural number, as indicated in the table above. The value of f(i,j) is placed at column i, row j. Because f is assumed to be a total computable function, any element of the array can be calculated using f. The construction of the function g can be visualized using the main diagonal of this array. If the array has a 0 at position (i,i), then g(i) is 0. Otherwise, g(i) is undefined. The contradiction comes from the fact that there is some column e of the array corresponding to g itself. Now assume f was the halting function h, if g(e) is defined (g(e) = 0 in this case), g(e) halts so f(e,e) = 1. But g(e) = 0 only when f(e,e) = 0, contradicting f(e,e) = 1. Similarly, if g(e) is not defined, then halting function f(e,e) = 0, which leads to g(e) = 0 under g's construction. This contradicts the assumption of g(e) not being defined. In both cases contradiction arises. Therefore any arbitrary computable function f cannot be the halting function h.

Computability theory

[edit]

A typical method of proving a problem to be undecidable is to reduce the halting problem to . For example, there cannot be a general algorithm that decides whether a given statement about natural numbers is true or false. The reason for this is that the proposition stating that a certain program will halt given a certain input can be converted into an equivalent statement about natural numbers. If an algorithm could find the truth value of every statement about natural numbers, it could certainly find the truth value of this one; but that would determine whether the original program halts.

Rice's theorem generalizes the theorem that the halting problem is unsolvable. It states that for any non-trivial property, there is no general decision procedure that, for all programs, decides whether the partial function implemented by the input program has that property. (A partial function is a function which may not always produce a result, and so is used to model programs, which can either produce results or fail to halt.) For example, the property "halt for the input 0" is undecidable. Here, "non-trivial" means that the set of partial functions that satisfy the property is neither the empty set nor the set of all partial functions. For example, "halts or fails to halt on input 0" is clearly true of all partial functions, so it is a trivial property, and can be decided by an algorithm that simply reports "true." Also, this theorem holds only for properties of the partial function implemented by the program; Rice's Theorem does not apply to properties of the program itself. For example, "halt on input 0 within 100 steps" is not a property of the partial function that is implemented by the program—it is a property of the program implementing the partial function and is very much decidable.

Gregory Chaitin has defined a halting probability, represented by the symbol Ω, a type of real number that informally is said to represent the probability that a randomly produced program halts. These numbers have the same Turing degree as the halting problem. It is a normal and transcendental number which can be defined but cannot be completely computed. This means one can prove that there is no algorithm which produces the digits of Ω, although its first few digits can be calculated in simple cases.

Since the negative answer to the halting problem shows that there are problems that cannot be solved by a Turing machine, the Church–Turing thesis limits what can be accomplished by any machine that implements effective methods. However, not all machines conceivable to human imagination are subject to the Church–Turing thesis (e.g. oracle machines). It is an open question whether there can be actual deterministic physical processes that, in the long run, elude simulation by a Turing machine, and in particular whether any such hypothetical process could usefully be harnessed in the form of a calculating machine (a hypercomputer) that could solve the halting problem for a Turing machine amongst other things. It is also an open question whether any such unknown physical processes are involved in the working of the human brain, and whether humans can solve the halting problem.[31]

Approximations

[edit]

Turing's proof shows that there can be no mechanical, general method (i.e., a Turing machine or a program in some equivalent model of computation) to determine whether algorithms halt. However, each individual instance of the halting problem has a definitive answer, which may or may not be practically computable. Given a specific algorithm and input, one can often show that it halts or does not halt, and in fact computer scientists often do just that as part of a correctness proof. There are some heuristics that can be used in an automated fashion to attempt to construct a proof, which frequently succeed on typical programs. This field of research is known as automated termination analysis.

Some results have been established on the theoretical performance of halting problem heuristics, in particular the fraction of programs of a given size that may be correctly classified by a recursive algorithm. These results do not give precise numbers because the fractions are uncomputable and also highly dependent on the choice of program encoding used to determine "size". For example, consider classifying programs by their number of states and using a specific "Turing semi-infinite tape" model of computation that errors (without halting) if the program runs off the left side of the tape. Then , over programs chosen uniformly by number of states. But this result is in some sense "trivial" because these decidable programs are simply the ones that fall off the tape, and the heuristic is simply to predict not halting due to error. Thus a seemingly irrelevant detail, namely the treatment of programs with errors, can turn out to be the deciding factor in determining the fraction of programs.[32]

To avoid these issues, several restricted notions of the "size" of a program have been developed. A dense G?del numbering assigns numbers to programs such that each computable function occurs a positive fraction in each sequence of indices from 1 to n, i.e. a G?delization φ is dense iff for all , there exists a such that . For example, a numbering that assigns indices to nontrivial programs and all other indices the error state is not dense, but there exists a dense G?del numbering of syntactically correct Brainfuck programs.[33] A dense G?del numbering is called optimal if, for any other G?del numbering , there is a 1-1 total recursive function and a constant such that for all , and . This condition ensures that all programs have indices not much larger than their indices in any other G?del numbering. Optimal G?del numberings are constructed by numbering the inputs of a universal Turing machine.[34] A third notion of size uses universal machines operating on binary strings and measures the length of the string needed to describe the input program. A universal machine U is a machine for which every other machine V there exists a total computable function h such that . An optimal machine is a universal machine that achieves the Kolmogorov complexity invariance bound, i.e. for every machine V, there exists c such that for all outputs x, if a V-program of length n outputs x, then there exists a U-program of at most length outputting x.[35]

We consider partial computable functions (algorithms) . For each we consider the fraction of errors among all programs of size metric at most , counting each program for which fails to terminate, produces a "don't know" answer, or produces a wrong answer, i.e. halts and outputs DOES_NOT_HALT, or does not halt and outputs HALTS. The behavior may be described as follows, for dense G?delizations and optimal machines:[33][35]

  • For every algorithm , . In words, any algorithm has a positive minimum error rate, even as the size of the problem becomes extremely large.
  • There exists such that for every algorithm , . In words, there is a positive error rate for which any algorithm will do worse than that error rate arbitrarily often, even as the size of the problem grows indefinitely.
  • . In words, there is a sequence of algorithms such that the error rate gets arbitrarily close to zero for a specific sequence of increasing sizes. However, this result allows sequences of algorithms that produce wrong answers.
  • If we consider only "honest" algorithms that may be undefined but never produce wrong answers, then depending on the metric, may or may not be 0. In particular it is 0 for left-total universal machines, but for effectively optimal machines it is greater than 0.[35]

The complex nature of these bounds is due to the oscillatory behavior of . There are infrequently occurring new varieties of programs that come in arbitrarily large "blocks", and a constantly growing fraction of repeats. If the blocks of new varieties are fully included, the error rate is at least , but between blocks the fraction of correctly categorized repeats can be arbitrarily high. In particular a "tally" heuristic that simply remembers the first N inputs and recognizes their equivalents allows reaching an arbitrarily low error rate infinitely often.[33]

G?del's incompleteness theorems

[edit]

The concepts raised by G?del's incompleteness theorems are very similar to those raised by the halting problem, and the proofs are quite similar. In fact, a weaker form of the First Incompleteness Theorem is an easy consequence of the undecidability of the halting problem. This weaker form differs from the standard statement of the incompleteness theorem by asserting that an effective axiomatization of the natural numbers that is both complete and sound is impossible. The "sound" part is the weakening: it means that we require the axiomatic system in question to prove only true statements about natural numbers. Since soundness implies consistency, this weaker form can be seen as a corollary of the strong form. It is important to observe that the statement of the standard form of G?del's First Incompleteness Theorem is completely unconcerned with the truth value of a statement, but only concerns the issue of whether it is possible to find it through a mathematical proof.

The weaker form of the theorem can be proved from the undecidability of the halting problem as follows.[36] Assume that we have a sound (and hence consistent) and complete effective axiomatization of all true first-order logic statements about natural numbers. Then we can build an algorithm that enumerates all these statements. This means that there is an algorithm N(n) that, given a natural number n, computes a true first-order logic statement about natural numbers, and that for all true statements, there is at least one n such that N(n) yields that statement. Now suppose we want to decide if the algorithm with representation a halts on input i. We know that this statement can be expressed with a first-order logic statement, say H(a, i). Since the axiomatization is complete it follows that either there is an n such that N(n) = H(a, i) or there is an n such that N(n) = ? H(a, i). So if we iterate over all n until we either find H(a, i) or its negation, we will always halt, and furthermore, the answer it gives us will be true (by soundness). This means that this gives us an algorithm to decide the halting problem. Since we know that there cannot be such an algorithm, it follows that the assumption that there is a sound and complete effective axiomatization of all true first-order logic statements about natural numbers must be false.

Generalization

[edit]

Many variants of the halting problem can be found in computability textbooks.[37] Typically, these problems are RE-complete and describe sets of complexity in the arithmetical hierarchy, the same as the standard halting problem. The variants are thus undecidable, and the standard halting problem reduces to each variant and vice-versa. However, some variants have a higher degree of unsolvability and cannot be reduced to the standard halting problem. The next two examples are common.

Halting on all inputs

[edit]

The universal halting problem, also known (in recursion theory) as totality, is the problem of determining whether a given computer program will halt for every input (the name totality comes from the equivalent question of whether the computed function is total). This problem is not only undecidable, as the halting problem is, but highly undecidable. In terms of the arithmetical hierarchy, it is -complete.[38]

This means, in particular, that it cannot be decided even with an oracle for the halting problem.

Recognizing partial solutions

[edit]

There are many programs that, for some inputs, return a correct answer to the halting problem, while for other inputs they do not return an answer at all. However the problem "given program p, is it a partial halting solver" (in the sense described) is at least as hard as the halting problem. To see this, assume that there is an algorithm PHSR ("partial halting solver recognizer") to do that. Then it can be used to solve the halting problem, as follows: To test whether input program x halts on y, construct a program p that on input (x,y) reports true and diverges on all other inputs. Then test p with PHSR.

The above argument is a reduction of the halting problem to PHS recognition, and in the same manner, harder problems such as halting on all inputs can also be reduced, implying that PHS recognition is not only undecidable, but higher in the arithmetical hierarchy, specifically -complete.

Lossy computation

[edit]

A lossy Turing machine is a Turing machine in which part of the tape may non-deterministically disappear. The halting problem is decidable for a lossy Turing machine but non-primitive recursive.[39]

Oracle machines

[edit]

A machine with an oracle for the halting problem can determine whether particular Turing machines will halt on particular inputs, but they cannot determine, in general, whether machines equivalent to themselves will halt.

See also

[edit]

Notes

[edit]
  1. ^ McConnell, Steve (2004). Code Complete (2nd ed.). Pearson Education. p. 374. ISBN 9780735636972.
  2. ^ Huang, Han-Way (2009). The HCS12 / 9S12: An Introduction to Software and Hardware Interfacing. p. 197. ... if the program gets stuck in a certain loop, ... figure out what's wrong.
  3. ^ Simon, David E. (1999). An Embedded Software Primer. p. 253. For hard real-time systems, therefore, it is important to write subroutines that always execute in the same amount of time or that have a clearly identifiable worst case.
  4. ^ Minsky 1967, p. 24. italics in original
  5. ^ a b Minsky 1967, p. 25.
  6. ^ Hodges 1983, p. 83; Davis' commentary in Davis 1965, p. 108
  7. ^ Absolutely unsolvable problems and relatively undecidable propositions – account of an anticipation, reprinted in Davis 1965, pp. 340–433
  8. ^ Minsky 1967.
  9. ^ Reid 1996, pp. 188–189.
  10. ^ Hodges 1983, p. 91.
  11. ^ Hodges 1983, p. 91; Penrose 1989, p. 34.
  12. ^ Reid 1996, p. 198.
  13. ^ Reid 1996, p. 199.
  14. ^ reprinted in Davis 1965, p. 5ff
  15. ^ Church 1936.
  16. ^ A Note on the Entscheidungsproblem, reprinted in Davis 1965, p. 110
  17. ^ Davis 1965, p. 289ff.
  18. ^ reprinted in Davis 1965, p. 115
  19. ^ a b c d e f Lucas 2021.
  20. ^ a b c Kleene 1952, p. 382.
  21. ^ Rosser, "Informal Exposition of Proofs of G?del's Theorem and Church's Theorem", reprinted in Davis 1965, p. 223
  22. ^ a b letter from Davis to Copeland, 12 December 2001, Footnote 61 in Copeland 2004, p. 40
  23. ^ a b Copeland 2004, p. 40.
  24. ^ Textual search of Turing's collected works: Good (1992), Gandy & Yates (2001), Ince (1992), Saunders (1992). Similarly Hodges (1983) does not have the word "halting" or words "halting problem" in his index.
  25. ^ Davis 1958, pp. vii–viii.
  26. ^ Davis 1958, pp. 70–71.
  27. ^ Moore & Mertens 2011, pp. 236–237.
  28. ^ Strachey, C. (1 January 1965). "An impossible program". The Computer Journal. 7 (4): 313. doi:10.1093/comjnl/7.4.313.
  29. ^ Daylight, Edgar G. (16 April 2021). "The halting problem and security's language-theoretic approach: Praise and criticism from a technical historian" (PDF). Computability. 10 (2): 141–158. doi:10.3233/COM-180217. S2CID 233329507. Retrieved 26 August 2021.
  30. ^ Penrose 1989, pp. 57–63.
  31. ^ Copeland 2004, p. 15.
  32. ^ Hamkins, Joel David; Miasnikov, Alexei (1 October 2006). "The Halting Problem Is Decidable on a Set of Asymptotic Probability One" (PDF). Notre Dame Journal of Formal Logic. 47 (4). doi:10.1305/ndjfl/1168352664. S2CID 15005164. Retrieved 5 November 2022.
  33. ^ a b c K?hler, Sven; Schindelhauer, Christian; Ziegler, Martin (2005). "On Approximating Real-World Halting Problems". Fundamentals of Computation Theory. Lecture Notes in Computer Science. Vol. 3623. pp. 454–466. doi:10.1007/11537311_40. ISBN 978-3-540-28193-1.
  34. ^ Lynch, Nancy (October 1974). "Approximations to the halting problem" (PDF). Journal of Computer and System Sciences. 9 (2): 143–150. doi:10.1016/S0022-0000(74)80003-6.
  35. ^ a b c Bienvenu, Laurent; Desfontaines, Damien; Shen, Alexander (5 April 2016). "Generic algorithms for halting problem and optimal machines revisited". Logical Methods in Computer Science. 12 (2): 1. arXiv:1505.00731. doi:10.2168/LMCS-12(2:1)2016. S2CID 14763862.
  36. ^ Aaronson, Scott (21 July 2011). "Rosser's Theorem via Turing machines". Shtetl-Optimized. Retrieved 2 November 2022.
  37. ^ for example, Sipser 2006, Davis 1958, Minsky 1967, Hopcroft & Ullman 1979, B?rger 1989
  38. ^ B?rger 1989, p. 121.
  39. ^ Abdulla & Jonsson 1996, p. 92.

References

[edit]

Further reading

[edit]
  • c2:HaltingProblem
  • Alfred North Whitehead and Bertrand Russell, Principia Mathematica to *56, Cambridge at the University Press, 1962. Re: the problem of paradoxes, the authors discuss the problem of a set not be an object in any of its "determining functions", in particular "Introduction, Chap. 1 p. 24 "...difficulties which arise in formal logic", and Chap. 2.I. "The Vicious-Circle Principle" p. 37ff, and Chap. 2.VIII. "The Contradictions" p. 60ff.
  • Martin Davis, "What is a computation", in Mathematics Today, Lynn Arthur Steen, Vintage Books (Random House), 1980. A wonderful little paper, perhaps the best ever written about Turing Machines for the non-specialist. Davis reduces the Turing Machine to a far-simpler model based on Post's model of a computation. Discusses Chaitin proof. Includes little biographies of Emil Post, Julia Robinson.
  • Edward Beltrami, What is Random? Chance and order in mathematics and life, Copernicus: Springer-Verlag, New York, 1999. Nice, gentle read for the mathematically inclined non-specialist, puts tougher stuff at the end. Has a Turing-machine model in it. Discusses the Chaitin contributions.
  • Ernest Nagel and James R. Newman, Godel’s Proof, New York University Press, 1958. Wonderful writing about a very difficult subject. For the mathematically inclined non-specialist. Discusses Gentzen's proof on pages 96–97 and footnotes. Appendices discuss the Peano Axioms briefly, gently introduce readers to formal logic.
  • Daras, Nicholas J.; Rassias, Themistocles M. (2018). Modern discrete mathematics and analysis: with applications in cryptography, information systems and modeling. Cham, Switzerland: Springer International Publishing. ISBN 978-3319743240.. Chapter 3 Section 1 contains a quality description of the halting problem, a proof by contradiction, and a helpful graphic representation of the Halting Problem.
  • Taylor Booth, Sequential Machines and Automata Theory, Wiley, New York, 1967. Cf. Chapter 9, Turing Machines. Difficult book, meant for electrical engineers and technical specialists. Discusses recursion, partial-recursion with reference to Turing Machines, halting problem. Has a Turing Machine model in it. References at end of Chapter 9 catch most of the older books (i.e. 1952 until 1967 including authors Martin Davis, F. C. Hennie, H. Hermes, S. C. Kleene, M. Minsky, T. Rado) and various technical papers. See note under Busy-Beaver Programs.
  • Busy Beaver Programs are described in Scientific American, August 1984, also March 1985 p. 23. A reference in Booth attributes them to Rado, T.(1962), On non-computable functions, Bell Systems Tech. J. 41. Booth also defines Rado's Busy Beaver Problem in problems 3, 4, 5, 6 of Chapter 9, p. 396.
  • David Bolter, Turing’s Man: Western Culture in the Computer Age, The University of North Carolina Press, Chapel Hill, 1984. For the general reader. May be dated. Has yet another (very simple) Turing Machine model in it.
  • Sven K?hler, Christian Schindelhauer, Martin Ziegler, On approximating real-world halting problems, pp.454-466 (2005) ISBN 3540281932 Springer Lecture Notes in Computer Science volume 3623: Undecidability of the Halting Problem means that not all instances can be answered correctly; but maybe "some", "many" or "most" can? On the one hand the constant answer "yes" will be correct infinitely often, and wrong also infinitely often. To make the question reasonable, consider the density of the instances that can be solved. This turns out to depend significantly on the Programming System under consideration.
  • Logical Limitations to Machine Ethics, with Consequences to Lethal Autonomous Weapons - paper discussed in: Does the Halting Problem Mean No Moral Robots?
[edit]
5月24日是什么星座 肺结核复发有什么症状 多动症吃什么药 阿魏酸是什么 什么是肠息肉
杜牧号什么 心跳太慢吃什么药 金童玉女指什么生肖 孕妇吃鸽子蛋对胎儿有什么好处 虚不受补是什么意思
三八妇女节送老婆什么礼物好 茜色是什么颜色 口臭应该挂什么科 小龙虾吃什么 虾吃什么
总警监是什么级别 烫伤抹什么药 什么是横纹肌溶解 清华校长什么级别 血液病是什么
成人受到惊吓吃什么药hcv8jop5ns4r.cn aosc医学是什么意思xianpinbao.com 四平八稳是什么生肖naasee.com 70年属狗的是什么命hcv8jop7ns3r.cn 女生什么时候绝经hcv9jop5ns0r.cn
草莓是什么意思hcv8jop2ns1r.cn 梦见好多鱼是什么意思fenrenren.com 喉咙痛喝什么hcv8jop0ns8r.cn 幽门螺杆菌有什么症状hcv9jop2ns3r.cn 一月底是什么星座hcv8jop4ns7r.cn
结肠是什么病hcv8jop5ns4r.cn 闺蜜是什么样的关系hcv7jop5ns0r.cn 腹泻期间宜吃什么食物hcv9jop4ns5r.cn 申是什么生肖hcv7jop9ns0r.cn 岑岑是什么意思jiuxinfghf.com
都有什么瓜weuuu.com 嘴角疱疹用什么药膏hcv9jop6ns3r.cn 玫瑰糠疹吃什么药hcv8jop6ns7r.cn saq是什么意思hcv9jop7ns2r.cn 脚转筋是什么原因引起的hcv9jop2ns1r.cn
百度