苏联哲学百科:什么是算法?

来源:互联网 发布:从nt数据能看出男女吗 编辑:程序博客网 时间:2024/04/28 14:06

 

算 法

 

(译自苏联哲学百科全书)


  所谓算法,就是确定计算过程 ( 从可变的初始数据导出所要求的答案 ) 的准确指令。算法是逻辑学和数学的基本概念之一。

  不能把上述“计算”过程狭义地理解为数字的计算。例如,中学的代数就已经有字母的计算,如 (x+y)*(x-y)=x*x-y*y( 虽然这里的字母还只起替代数字的作用 ) ;就在算术的计算中已经出现了不代表任何量的符号:括号、等号和算术运算符号。我们可以进而考察运用任意符号及其组合的计算;在描述“算法”概念时正是要这样广义地理解“计算”这一术语。例如,可以说将一种语言译成另一种语言的算法、列车调度员的工作 ( 他将列车运行的信息改造成为命令 ) 的算法以及控制论所研究的控制过程的算法描述的其他例子。

算法的意义

  算法一词可以上溯至 9 世纪 ( 它来自拉丁文 A1goritmi ,而后者大约出现于 12 世纪,是花拉子模数学家阿尔一霍列士米的阿拉伯名字的形译 ) 。今天,最简单的算法在小学里就出现了,这就是算术运算的算法 ( 在中世纪的欧洲,现代的小学算术,即十进制记数法和十进制四则运算,就叫做算法。这是因为阿尔一霍列士米的论文是使欧洲人懂得十进制记数法的最早的著作或最早的著作之一 ) 。我们强调一下,小学里所教的正是计算的算法。说一个人会将两数相加,并不是说他对于任何两个数都能或早或迟找到它们的和,而是说,他已经掌握了某种统一的加的方法,可以应用于任何两个具体的数字,换句话说,他掌握了加法算法 ( 这种算法的一个例子就是大家熟悉的将数字列成竖式相加的算法 ) 。

  科学中到处有算法;会解决“一般性”任务,实质上总是意味着掌握了某种算法。“一般性”任务这一概念可借助于总合问题这个概念而精确化。“问题”这一术语可以理解为寻求具有某些属性的对象的任务,这个对象就称为该问题的解 ( 比如,如果问题是寻求某个疑问的答案,那么对所提疑问的回答“是”或“不”就是解 ) 。如果一个问题没有解,即不存在具有必要属性的对象,那么这个问题就是不可解的。因此,问题的不可解性显然不能为不可知论的结论提供根据;相反,确定一个具体问题的不可解性是一步重要的认识。一个总合问题包括一系列个别的.“单一的”问题,它要求找到一个解决这一系列问题的一般方法 ( 即算法 ) 。总合问题的不可解性意味着不可能找到一个适当的算法。总合问题是逻辑学和数学非常重要的特征.单一问题的解决之所以也有价值,就往往是因为它同时提供了解决一整类问题的一般方法;同时,总合问题的提出意味着把某一类问题归结为一个单一的问题——一个为解决该类所有问题而寻求一个算法的问题;这里表现了诸如单一、特殊和普遍等辩证法范畴的联系。算法之所以重要正是由于总合问题的作用。

  确定任何总合问题的不可解性 ( 即不存在足以为该类的所有单一问题求解的统一的算法 ) 是一步极为重要的认识,它表明,为了解决具体的单一问题,原则上必须针对每一问题采取特殊方法。可见,不可解的总合问题之存在是认识过程的不可穷尽性的一个具体反映。

  有许多作为形成算法概念的基础的现象很早以来就在科学中占有重要的地位。数学和逻辑学中出现的许多课题,就在于寻找这样或那样的构造性方法。探索这样的方法 ( 这种探索由于建立了方便的数学符号和逻辑符号而特别得到加强 ) 。以及发现在许多场合原则上不存在这样的方法——这一切都成了科学认识发展的强大因素。由于意识到不可能依靠直接计算解决任何问题,才导致了在 19 世纪建立起集合论概念。只是在这一概念 ( 在这一概念范围内,现代所理解的构造性方法问题根本不会产生 ) 的蓬勃发展时期之后,才有可能在最近几十年间重新回到可构造性问题上来,但已经由于“算法”概念的定型而处于一个新的水平上了 ( 列宁关于认识发展的螺旋形性质的原理,又有了一个例证 ) 。虽然算法概念不是象“集合”概念那样的高度抽象,但是在历史上“算法”概念的产生晚于“集合”的概念,却不能认为是偶然的.


算法的例子

  “算法”概念正象“集合”、“对应。、“自然数”、“关系”等概念一样,也是逻辑、数学的一个基本概念 ( 逻辑和数学的范畴之一 ) 。不可能用更简单的概念来给它正式下定义,它只能象其他数学范畴一样,直接从经验中抽象出来。只有通过例子才能掌握这一概念。

  例 1 。可能的初始资料是由小杆“ I ”组成的有限非空组合,即对象 I , lI , III 等。算法由下列规则组成 ( 执行这些规则必须从 1 。开始 ) :

1 。在最左边的小杆之下划一横线,进而执行规则 2 。

2 。在最右边的小杆之上划一横线。进而执行规则 3 。

3 。检查下有横线的小杆,如上面未划横线,则进而执行规则 4 。

4 。检查紧跟在下有横线的小杆之后的小杆,如上面未划横线,则进而执行规则 5 。;如果上面已划横线,则进而执行规则 7 。

5 。把下有横线之小杆的横线移到紧跟在它后面的小杆下面,并进而执行规则 6 。

6 。把上有横线之小杆的横线移到其前的小杆之上,并进而执行规则 3 。

7 。删去上有横线的小杆以及在它后面的所有小杆,并进而执行规则 8 。

8 。删去下有横线的小杆下面的横线;这样得到的就是结果。

[说明:下面变灰的一段使用一些特殊符号,Word无法产生,尚待解决]

以组合 _IIII 作为初始资料,应用以上算法,则依次为:按规则 1 。得到 lIII ;按规到 2 。得到 IIIT ;按规则 3 。、 4 。、 5 。得到 IIIT ;按规则 6 。、 3 。、 4 。得到 IITI :按规则 7 。得到 Il ;

按规则 8 。得到 II( 这就是结果 ) 。如果想把这一算法应用于组合….则:按规则 1 。得到上 ll_ 按规则 2 。得到上 IT :按规则 3 。、 4 。和 5 。得到 1 JIT ;按规则 6 。得到 IIl ;接着要进而执行规则 3 。,但规则 3 。只有在下有横线的小杆上面没有横线时才能执行,由此可见,对于上述情形。算法不指示我们怎样进一步处理,因此就发生了所谓的无结果中断 ( 得不到结果而停止下来 ) 。不难看出,以上述算法应用于由偶数小杆组成的任何组合都能得出结果,并且结果就是由半数小杆组成的组合;而将上述算法应用于由奇数小杆组成的任何组合都得不出结果。

  例 2 。在逻辑学和数学中,任何有限的一组符号都称作“字母表”,其中的符号就称为字母表的“字母”;而用字母表中的字母相继写下的有限序列 ( 包括空序列 ) 则称为该字母表中的字。例如,阿拉伯数字构成一个字母表,而所有按十进制书写的整数都是该字母表中的字。

  我们来考察由字母 a 和 b 成的字母表 (a,b) 。这一字母表中的字是 b , ab , bba , aaababb 等等。假定,从这个字母表中的一个字到另一个字的转换,凡符合以下两条规则之一的,就称为“许可的”转换:

(1) 如果一个字的形式是 aP ,其中 p 是一个任意字,则转换到字 P8 ;

(2) 如果一个字的形式是 baP ,其中 P 是一个任意字,则转换到字 Paba 。

进而定出以下指令:“从某一个 ( 作为初始材料的 ) 字出发作出许可的转换,直到获得 aaP 形式的字为止;获得这种形式的字以后。去掉前两个字母,剩下来的就是结果”。由于每次可实现的最多只有一个转换规则,因此上述指令就构成算法,这一算法的可能初始资料就是字母表 (a,b) 中的字。

  现在我们取字 babaa 作为初始材料。按照规则 (2) 可获得 baaaba ;再应用规则 (2) 可获得 aabaaba 。根据我们的指令这时必须停止,而其结果 ( 应用算法于字 babaa 的结果 ) 就是 baaba 。再以字彻 baaba 作为初始资料,按规则 (2) 可获得 abaaba ,按规则 (1) 可获得 baabab ,继而可依次获得 abababa 、 bababab 、 babababa 等等。可以证明,这一过程永无完结之时 ( 也就是说,永远不会出现由两个字母口作为开头的字,并且对于所获得的每一个字来说都可以进行许可的转换 ) 。由此可知,算法如应用于字 baaba ,则不能得出结果。再以字 baab 作为初始资料,我们可依次获得 baaba 、 abbaba 、 bbabab 。但进一步,规则 (1) 、 (2) 都不能执行,这样也就不能获得结果。所以算法应用于字 abaab 也是不能得出结果的。

 

算法的基本特征 

       按照A.A.马尔科夫的见解,算法有如下基本特征:

(a) 确定性, 即算法的指令要求确切并人人理解,其中不包含可以任意解释的地方(由于指令的这种确定性,算法过程决定了在计算中的每一步骤都是单值地规定了它的下一个步骤);
(b) 总合性, 即每一个算法都有可能从在一定范围内可变异的初始资料出发:
(c) 结果性, 即算法具有获得未知结果的趋向性。
算法的确定性,保证一个人有可能将算法告知另一个人,而后者没有前者参与也能执行这个算法;正是由于这种决定性,将算法交给机器执行才成为可能。而算法的总合性必须以某个由可能的初始资料构成的总体作为前提(每一个算法各有其自己的资料总体)。至于这个总体是怎样提出的,那是另一个问题。可以认为,与某个算法相对应的可能的初始资料总体并不是同算法分开提出的,而是由这一算法的内容本身自然而然地指明(例如,与竖式加法算法相对应的初始资料总体就是由所有十进制整数对组成的)。当某个具体对象被选来作为算法的初始资料时,则可说把算法应用于这个对象。如果算法应用于某一对象而得出了结果,则称算法适用于这个对象。
算法的结果性决不意味着算法必须适用于相应的初始资料总体中的每一个对象(参阅例1和例2)。这里指出以下一点是适宜的,即可以构造这样的算法,对于它,没有任何算法足以根据前一算法的任意初始资料来辨别前一算法是否适用于这些资料。

算法论的基本抽象
  在科学实践中形成了一系列为数学和逻辑学所特有的抽象,首先是实无穷的抽象、同一的抽象潜在可实现性的抽象。苏联学者A.A.马尔科夫指出,在考察算法时,后两种抽象是必需的。一个算法过程可分解成独立的步骤,而每一步都必须简单明了,因而它的实际实现的可能性不至于引起怀疑。但同时。为获致结果所需要的基本步数可能如此之大,以致可以认为,要得到结果在实际上是不可能的。不过,关于某一步数的实际可实现性和不可实现性的观念是相对的,它会随着计算工具的发展而改变(关于个别的步的基本性观念原则上也可以改变)。因此在算法理论中就撇开这种“实际的可实现性。,而认为任何有限的步数都是可实现的。于是在研究算法时,容许有潜在可实现性的抽象,它撇开了我们的可能性的现实界限。快速电子计算机的发展,迅速地把这种界限愈来愈远地向后推移。昨天还只是潜在可实现的,今天已成为实际可实现的了。这种情况,促使算法论与计算机的实际操作接近起来。也促使这两门学科相互丰富起来。要让机器去解决某组问题,没有事先编制的解决算法是不行的。编制这样的算法通常具有非常重要的意义(例如,机器翻译问题主要就是编制翻译算法)。
    潜在可实现性的抽象不仅在考察算法过程时是需要的,而且在考察参与这些过程的对象本身(其中包括“初始资料”与“结果”)时也是需要的。例如,为了要讨论任何自然数(确切些说,是这个数的书写形式,譬如说。十进位制的书写形式),就必须允许考察这样大的自然数,以至它的记录使整个地球也容纳不下。由此可见,为了撇开数字记录的实际可实现性,这里也要利用潜在可实现性的抽象。一般说来,要讨论某个字母表中任意长的字.就需要借助于潜在可实现性的抽象。
能够在潜在可实现性抽象(与实无穷的抽象相对立)的范围内加以构造和考察的对象称为可构造对象(构造性对象)。例如,用任何进位制写下的自然数、某一字母表的字等等,以及由数字或字母表中的字所组成的二元组、三元组和一般有限序列等等:还有有理数(可以组成自然数的三元组)之类。所谓演算(即形式系统)中的表达式也是可构造对象,这就使算法论工具也可以运用于形式系统。任何一个算法(理解为指令)也可以(在将这个指令以某种符号组合形式写下后)看作可构造对象。相反,不引入实无穷的抽象就无法加以考察的那些对象则不属于可构造对象。例如,实数(康托尔、戴德金或魏尔斯特拉斯所理解的那种实数)、几何点等都不是可构造对象(因为分析象“点”那样的抽象,会导致把点看成实无穷的小体系统)。可构造对象自然地组合成各种总体,例如某个字母表中所有的字构成的总体.以及一般说来,由上面列举的任何类型的可构造对象中的所有对象组成的总体,都是这样的例子。每一个这样的可构造对象总体都是用构造属于它的对象的方法形成的。
在考察可构造对象和算法时可使用的另一种基本抽象是同一的抽象。在某些场合下可以将两个对象说成是同样的。“同样性”的条件则每次根据该特定情况予以确定。例如,当人们在纸上进行计算时,写下的数字字体往往是无关紧要的,1547和1647两种写法就可以看作是同样的:但是可以想象,在某些场合下。字体的粗细就有重要的差别了(例如这本哲学百科全书审的字体就是这样)。这时两种不同的字体已被看成是不一样台匀了,不过1647和1647却还是(在通常情况下)看作一样的(虽然在物理上这是不同的客体)。通常人们认为,可构造对象是由某些非常简单的“基本部分”组成的(就象词是字母组成的那样).因此两个可构造对象,只要它们由同样的基本部分组成而这些基本部分的配置次序也相同。就被认为是同样的。正是根据“同样性”概念,人们才把用粉笔写在黑板上的数字和用墨水笔写在本子上的数字看作是同样的,没有“同样性”概念,也就不可能进行教学了。同一的抽象使得人们可以把同样的对象看作同一个对象。同一的抽象导致了“抽象对象”的概念,这就是把两个“同样的”县体对象看作同一个抽象对象的两个代表。每一个应用于同样对象的算法,也导致同样的对象。因此可以认为,每一个算法都指明了抽象可构造对象的变换过程。算法的这一属性(以及它的决定性)决定了它的重复性或可再现性:当一种算法作为抽象可构造对象的算法而形成以后,就可以重复应用于适合该算法的任何具体可构造对象。
由上述可知,在实行某个算法时所出现的初始资料以及最终结果,永远都是可构造对象(算法过程的任何“状态”都是可构造对象!)。不可构造的对象甚至连潜在可实现性过程也不可能有,就是由于没有方法可以辨认这些对象是同样的还是不同样的(试比较控制论中关于用离散形式保存信息优越于用连续形式保存信息的著名原理)。
在研究算法时可以使用什么方法的问题上,存在着各种看法。一种是数学和逻辑学中构造派代表所提出的看法,认为既然形成算法概念只要有同一的抽象和潜在可实现性的抽象就够了,那么就应当在这两种抽象的范围之内发展算法理论。另外一种看法是,在研究算法时可以使用一般为数学和逻辑学所容许的任何方法,其中包括需要实无穷的抽象的方法在内。例如,可以设想,有时为了证明某个算法应用于某一对象而能得出结果,必须使用与实无穷的抽象密切关联的排中律。

算法论的基本概念
  在算法概念的基础上产生的基本概念包括可计算函数、可判定集和可枚举集等概念。一个函数称为可计算函数,是因为有一个可以计算该函数的算法,即:(a)这个算法适用于函数定义域中的任何一个对象,并且所得出的结果是函数以此对象为自变量时的函数值:(b)这个算法不适用于函数定义域之外的任何对象。可构造对象总体中的某个集(即由该总体的某些对象所组成的集)称为可判定集(相对于包含它的那个总体而言),是因为有一个可以判定该集(相对于上述总体而言)的算法,即:这个算法适用于该总体的每一个对象,并且所得出的结果就是关于对象是否属于被考察的集这一问题的答案。最后。一个非空集(参见空集)称为可枚举集,是因为有一个能够枚举这个集的算法,即:(a)该算法适用于任何一个自然数,而所得出的结果属于被考察的集;(b)被考察集中的每一个元素都可以作为将该算法应用于某个自然数的结果而得到。按照定义,空集通常也列入可枚举集一类。同一个可计算函数(相应地,同一个可判定集,同一个可枚举集)可以用不同的算法来计算(相应地,来判定,来枚举)。从定义可知,可计算函数的自变量和值,可判定集或可枚举集的元素,永远都是可构造对象。将某一总体中的可构造对象代之以它们在任意一个算法编号(即有可能根据对象找到号码和根据号码找到对象的算法的那种编号)下的号码,就可以象算法论中往往所做的那样,仅仅限于考察以自然数为自变量和值的可计算函数,以及以自然数为元素的可判定集和可枚举集。
可以证明,一切可判定集都是可枚举的。但同时已成功地构造出可枚举、但不可判定的集。这样的算法(即可以判定所构造的集的算法)不存在的第一个具体例子(是1936年美国学者A·车尔契在<初等数论的一个不可判定问题>一文中发表的)成了往后几乎所有这类例子的来源或样本。已经发现,一个集唯有当它和它的补集(对包含它的对象总体的补)都可以枚举时,是可判定的。由此可见,可枚举集有着本身不可枚举的补集。

算法论与逻辑学的关系
  可判定集和可枚举集的概念是与定义的分类密切联系的(我们只涉及这样的定义,其中每一个都是某一类型的对象的定义,或者说,某一对象类的定义)。大家知道,有两种基本的定义,即“属加种差”的定义,和“归纳”定义。
在通过“属加种差”下定义时,要提出某个对象的总体(“属”),再指出特征(“种差”),以便从上述总体中区分出被定义的一类对象。如果认为这一定义是可构造的,即对象是可构造的,并且属元素的种差存在与否在算法上是可以辨认的,则被定义的集是可判定的(并且每一个可判定集都可以这样来决定)。由此可见,可判定集与通过属加种差被构造地定义的集是等同的。
“归纳”定义由两部分组成:(1)基础部分,是列入被定义类的对象的清单;(2)归纳部分,它表示,如果某种对象属于被定义的类,则与它们有一定关系的某种对象也属于被定义的类(也可能有更复杂的所谓交叉定义的情形,这时有几个对象类同时互相通过对方而被定义)。如果定义是构造性的,即对象是可构造的,并且包含在基础部分的初始对象清单是有限的,而归纳部分所包含的、从已定义对象到新对象的转换规则是算法上的(即可以借助于某个算法来辨认存在或者不存在归纳部分所谈的那种关系),那么我们就可以获得一个按照归纳法构造地定义的集的概念,或(意义相同)可有效产生的集的概念(因为这样的定义给出了有效的产生过程,在这过程展开的某些阶段上,“发生”着或“产生”着被定义的对象)。构造性归纳定义的例子之一就是象棋的许可棋局(即在对弈过程中棋盘上可能出现的阵势)的定义。这一定义的基础部分仅包含唯一的初始棋局,而归纳部分包含的是走棋规则。因此。许可棋局集是可有效产生的。
可有效产生集的另一个例子是由任何一个形式系统或演算中的算法全部可证公式组成的集:可证公式定义的基础部分是公理,而归纳部分就是推理规则(公理按定义被宣称为可证的;进而指出:如果某些公式是可证的,则由这些公式按照推理规则推出的那些公式也是可证的)。在这里,一切可证公式的证明过程都是产生过程。最后,演算的一切可驳公式的反驳过程也是有效产生过程。
有效产生过程概念和算法概念是有紧密联系的。我们已提出了依赖于算法概念的有效产生过程的(近似的)定义。同样,有了产生过程的概念,那么在此基础上,即使不能给算法概念本身下定义,无论如何也能给可计算函数的概念下定义。事实上,假设某个产生过程能够“产生”的对象是元素对(x,y),并且任何两个被产生的元素对中,当第一项相同时第二项也相同。那么。这个过程就按照以下方式确定函数y=f(x);当且仅当x。是某个生成元素对的第一项时,才能确定对象x。的函数,因为在这种场合自变量‰的函数值等于此元素对的第二项。显然,在上述意义下被有效产生过程所确定的函数是可计算函数【为了寻找f(x0),就要把过程继续下去。直到找到以,c。为第一项的元素对为止】。反之,任何可计算函数均可通过有效产生过程来确定。从逻辑学的观点来看,算法过程和产生过程是近似的。它们都只以构造性概念为基础。两者的差别在于:算法过程是根据对一定进行方式的要求而展开的,而有效产生过程则根据许可展开。这里出现了“必然”与“可能”之间的差别(算法过程的每一阶段都是单值地,即必然地规定了它的下一个阶段,而有效产生过程在展开时。每一阶段之后出现的只是下一阶段的很多可能性)。
在有效产生过程概念适当精确化之后就会发现,每一个司有效产生的集都是可枚举的,反之亦然。根据这一情况,加上前面介绍过的可枚举集与可判定集之间的相互关系,可以得出以下结论:凡容许属加种差的构造性定义的,也容许构造性归纳定义:但反之则不然。有这样的对象类·对它可以下构造性归纳定义,却不能下属加种差的构造性定义;该对象类(在包含它的可构造对象总体的范围内)的补则不容许有效归纳定义。每一个构造性的产生过程都可以看作在适当演算中获得可证公式的过程。因此,具有刚才描写的性质的对象类,可以在某一演算中作为全部可证公式类而建立起来。并且已发现,凡内容足够充实的演算(例如谓词演算或算术的形式化系统)都会发生这一情况,因为如果演算是内容足够充实的,则其中就可以表达任何一个有效产生过程。这种演算的全部可证公式类(当然是可枚举的)是不可判定的,这就是说,能辨别演算的公式是否可证的算法是不存在的;在这个意义上可以说,演算是不可判定的。由于演算的全部可证公式类是不可判定的,所以与它相补的全部不可证公式类是不可枚举的,因而不能通过任何有效产生过程获得:尤其不可能构造这样一种演算,其中“反驳”并且仅仅反驳原来演算中的一切不可证公式;何况,所有这些不可证公式都不可能用原来演算本身的手段来加以反驳,这就是说,原来的演算中存在着所谓不可判定(即既不可证也不可驳)的公式。这些推论可能仅仅涉及这样的公式,在对演算作涵义解释时它们所表达的是有意义的(即或者真或者假的)判断;可见,在这样的公式中也可以发现不可判定的公式。由此可知,有可能提出一个表示真实判断而在演算中却不可证的公式;在这个意义上我们说,系统a是不完备的。我们强调指出,由于上面所作的推论是一般性的,所以每一个内容足够充实的演算都不完备。
    演算的不可判定性概念依赖于算法概念,因此不可判定性的事实要在算法论领域的研究基础上来确立,也就并不奇怪了。象演算的不完备性这种普通逻辑的事实(这个事实表明,原则上不可能将逻辑推理过程完全形式化,它早在1931年,在“算法”概念精确化之前,已由奥地利学者K.Godel 初次严格证明),正如我们刚才所看到的那样,可以借助于算法论而获得,这一情况是极为重要的(初看也许是出乎意料的)。仅此一点,就足以表明算法论应用于逻辑学问题的巨大可能性。而且这种应用还不限于上面援引的那些例子。早在1932年,苏联学者A.H.阔尔莫果洛夫就巳建议利用与直觉主义观点毫无关系的涵义工具来解释直觉主义者所建立的构造性逻辑。阔尔莫果洛夫建议把构造性逻辑中的每一个命题都解释为一个问题。但是问题这一概念要求具体化,而这种具体化只有在经过研究的算法理论的基础上才能实现。美国学者S.C.kleene(克林)和苏联学者IO.T.梅德维捷夫先后于1945和1955年提出了可用以解释构造性逻辑的两类具体问题。1956年苏联学者H.A.沙宁提出一种新的见解,认为在构造性逻辑中并非所有命题都要求以问题的形式来解释。
    和这一思想范围有密切关系的是古典数学概念和命题的“构造化”或寻求其“构造性模拟”的问题。这些问题也只有在算法论基础上才能得到解决。由于数学分析基本概念的构造化,就出现了目前正在研究的构造性数学分析。其他数学理论的构造化途径亦粗具轮廓。在实现构造化时使用的基本手段之一就是把被研究的对象转换成它们的名称,而名称总是可构造对象。

判定问题
  这是总合问题的一种特殊情形。对某个集的判定问题,就是要建立判定这个集的算法问题。相应的单一问题系列中的那些问题是要回答构造性对象总体中的每个对象是否属于所考察的集。反过来,相当于上述单一问题系列的任何一个总合问题都可以看作某个集,即以“是”作为其回答的那些单一问题的集的判定问题。判定问题的重要作用于此可见。研究它们正是着眼于它们的可解性。在判定问题中特别重要的是为演算的可证公式类提出的判定问题。某一演算的全部可证公式类的判定问题也称为演算本身的判定问题 (在俄文中,判定问题通常称为“可解性问题”;不过,把“回答该判定问题是否有解。这个问题称为“可解性问题”比较恰当)。

不可解的总合问题
   不可解的总合问题。任何演算的判定问题都是可枚举集的判定问题。一般说来,所有在数学中自然出现的判定问题都是可枚举集的判定问题。上面提到的车尔契于1936年发表的第一个不可解的判定问题(同时也是第一个不可解的总合问题)就是这样。所谓结合系统的等价性问题也是这样.这个问题的不可解性证明是由AA.马尔科夫和美国学者EL.波斯特于1947年各自独立发表的。这个结果,作为在逻辑学和算法论之外出现的第一个总合问题(这个问题早在1914年就提出了)不可解性的证明是很有意思的。著名的群的等价性问题也是如此,这个问题早在1912年就提出,而其不可解性证明是苏联学者nC.诺维柯夫于1952年提出的(荣获1957年列宁奖金)。每一个等价性问题都在于寻找一个算法,以确定某个字母表中的两个字等价或不等价(我们是与结合系统还是与群打交道,这取决于对等价性的定义)。因此,可以把等价性问题看作所有相互等价的字对集(相对于可能的字对总体)的判定问题。同时,由于全部相互等价的字对可以由产生过程给出,所以全部这样的字对所构成的集是可枚举的。
可归结性。
  从1936年车尔契的例子开始直到1944年为止,所有总合问题的不可解性证明都是按照或者可以按照以下的同样方法进行的。车尔契所探讨的显然不可解的问题可以归结为这里所研究的总合问题:因此,如果这里所研究的总合问题是可解的,那么车尔契的问题也就是可解的了(在这/{、意义上可以说,这里所研究的问题的不可解性证明可归结为车尔契问题的不可解性证明)。一个问题产生了:是否所有不可解的判定问题的不可解性证明都可以按照以上这种方式来进行?这个问题称为可归结性问题,是波斯特在1944年提出的;同时,波斯特举出了几个不可解的判定问题的例子,它们的不可解性证明是他利用与上述不同的方法作出的(这些例子并没有解决可归结性问题,因为下述问题仍旧没有得到解决,即难道不能为这些例子也找到可归结为车尔契问题不可解性证明的不可解性证明吗?后来确实为其中的几个例子找到了这样的证明)。可归结性问题成了算法论研究的中心,直到1956年,苏联学者A.A.穆奇尼克和美国学者R.M.弗里德贝尔格各自独立地解决了这个问题。建立了不可解的判定问题(对可枚举集的)的例子。其不可解性是不能通过把车尔契问题归结为这个问题而予以证明的。穆奇尼克甚至进一步证明了,不仅车尔契问题,而且任何一个其他问题都不可能成为“标准的不可解问题”,以致可以把任何对可枚举集的不可解判定问题的不可解性证明都归结为这一标准问题的不可解性证明。

算法概念及有关概念的精确化
  要得到算法不存在的结论,不把“算法”概念进一步精确化和形式化是不可能的。要使算法概念精确化,只能用这样一种方式,即描述某个具体的算法类,使得任何一个算法都能用这一算法类中的某个等价的算法来代替。这样的精确化从1936年起开始出现了,当时E.L.波斯特和英国学者A.M。图灵各自独立地提出了相似的抽象计算机(其用途是实现算法过程)的定义(值得注意的是,这些定义是在快速电子计算机制造出来之前出现的,却表现了快速电子计算机的许多重要特征)。1950年A.A.马尔科夫描述了一个特殊的算法类(他称之为“正规算法”),这种算法实现了字的转换:在这一精确化的基础上,他首次研究出了系统的算法理论。1953年A.H.阔尔奠果洛夫开始研究处理拓扑复形的算法。此外还有算法概念的其他精确化。
    算法概念的各种精确化都是根据以下的一般观念得来的(或者可以很容易地归结为这种一般观念)。算法过程可以分解成为一些单独的、足够基本的步。每一步都是过程的一个状态与另一个状态的交替(初始资料也就是初始状态)。从任何状态到下一个状态的过渡都是根据被认为足够基本的所谓直接加工规则进行的。某些状态被规定为结尾状态(根据足够基本的结束规则),而从结尾状态就可引出最终结果(也是根据足够基本的规则)。把算法应用于某个对象时,算法过程的进展可能有三种方式:(1)每一个状态都被下一个状态所代替,而过程永不终止;(2)在某一步上出现了一个既不适用直接加工规则也不适用结束规则的状态,于是发生无结果的中断;(3)在某一步上所出现的状态,被认明为结尾状态,于是发生有结果的中断,也就获得了算法的最终结果。因此,算法仅仅适用于其算法过程按照第三种方式进行的那些对象。
     我们知道的每一种算法概念的精确化,实质上都在于规定直接加工规则、结束规则和最终结果引出规则的某种具体形式。同时也就不可避免地规定了可构造对象总体,将上述规则应用于该总体中的对象是有意义的。对于每一个精确化,都可以提出一个基本假设。即:对于任何一个算法。都可以在利用该精确化描述的算法类中指出一个与之等价的算法(等价性,简单地说,就是指两个算法都导致同样的结果。但是,等价性概念本身也需要进一步精确化,因为原来的算法可以适用于这样的对象,它们根本不是“精确化”所描述的那些算法的可能的初始资料)。这个基本假设不可能成为数学证明的对象,因为它的表述包含着任意算法的概念。它具有象物理定律那样的自然科学假设的性质。对于所提的每一种精确化,相应的基本假设与实践都很符合。此外,所提的全部精确化在某种自然意义上都是相互等价的(这一断言已经着手证明,而且确实是能够得到证明的).这一点也说明这些基本假设是有用的。
     有效产生过程概念精确化的最初形式,应当说是早在19世纪出现的、带有推论规则的形式化描述的逻辑系统(最早见于德国数学家G.弗雷格的著作中)。后来,当愈来愈广泛的数学领域被形式化时(主要是在英国逻辑学家A.N.怀特海和B.罗素的著作中)。就出现了足够有效的演算,借助于这些演算所绐出的产生过程,可以确定(在上面所解释的意义上)任何一个可计算函数。这使得哥德尔在1943年,早在最初的算法概念精确化出现以前就能够确定作为某一演算中的推理规则所决定的函数的可计算函数。而在波斯特和图灵的著作发表之后,就有可能根据他们所提出的算法概念的精确化来确定可计算函数了(当然,根据其他的算法概念精确化来确定可计算函数也是可能的)。同时,克里尼则提出了不依赖于任何算法概念或产生过程概念精确化的可计算函数定义(所有这些可计算函数的定义结果都是相互等价的)。
     不依据算法概念的可计算函数定义,既有逻辑学上的意义(因为已经发现,可计算函数概念有其不依赖于算法概念的内涵),也有数学上的意义(因为在许多问题上,无需明显地建立算法,而只要确定相应函数的可计算性就够了)。诸如可枚举集和可判定集等基本概念,可以通过可计算函数的概念来下定义,而不必诉诸算法概念。当然,可计算函数的价值,归根结底正是在于其中每一个函数都有计算它的算法。现在认为,具有自然数的自变量和值的可计算函数,就是所谓部分递归函数,后者具有严格的数学定义(参见递归函数和递归谓词)。

参考书目
关于一般性问题的:
C。H.阿迪扬t算法问题,载苏联<科学和生活>1957年第8期第13一14页;
A.H.阔尔莫果洛夫和B.A.乌斯宾斯基<关于算法的定义>载<数学科学成就>第13卷第4分册1958年俄文版第3—28页;
 A.A.马尔科夫<算法论>载<苏联科学院数学研究所丛刊>第38卷1951年俄文版第176—189页;<算法论>科学出版社1959年中文版(参阅引言。第1章苇l一2节和第3节第1—5小节,第2章第1—2节和第3节第1—6小节,第4节第1~5小节,第5节);
R.培特<递归函数论>转译自俄文,科学出版社1959年中文版第20、21节;
B.A.特拉赫登勃罗特<算法与机器解题>莫斯科1957年版第95页;
H.A.沙宁<关于算术的几个逻辑问题>载<苏联科学院数学研究所丛刊>第43卷1955年俄文版(参阅引言。第1、4、5、6节)。
关于专题的:
     可计算函数——B.A.乌斯宾斯基<关于一致连续性定理>载<数学科学成就>第1Z卷第1分册1957年俄文版第2节;
     归纳定义——S.C.克里尼, 元数学导论,译自英文,莫斯科1957年版第6、53节,附图书总目录:
     数学题的构造性解释——A.H.阔尔莫果洛夫<直觉主义逻辑的解释>载<数学杂志>第35卷第1册1932年德文版第58—65页:B.A.乌斯宾斯基<关于一致连续性定理>载<数学科学成就>第12卷第1分册1957年俄文版第3节:H.A.沙宁<论数学命题的构造性解释>载<全苏第三届数学代表大会著作集>第1卷1956年俄文版第189—190页;<论数学命题的构造性解释>载<苏联科学院数学研究所丛刊>第52卷1958年俄文版第226—311页;
     等价性问题——A.A.利亚普诺夫和C.B.亚勃隆斯基<对数学的巨大贡献>载苏联<自然>1957年第8期第54—56页;
     算法论和计算数学的关系与计算机——M.B.凯尔迪什、A.A.利亚普诺夫和M.P.舒拉一布拉<计算机理论的数学问题>载<1956年10月15—20日苏联科学院关于生产自动化科学问题的常会。全体会议>莫斯科1957年版第100—130页;A.A.利亚普诺夫和r.A.舍斯托帕尔<电子计算机解题的初步知识>载<数学教育>1957年俄文版第1册第57—74页;A.A.马尔科夫<数理逻辑和计算数学>载<苏联科学院公报>1957年俄文版第8期第21—25页;E.L.波斯特<有限组合过程——说明I>载<符号逻辑杂志>美纳沙(美国维斯康辛州)1936年英文版第1卷第3期第21—25页;A.A.利亚普诺夫和G.A.舍斯托帕尔<控制过程的算法描述>载<数学教育>1957年俄文版第2册第81—95页。
图书索引:
S.C.克林<元数学导论>译自英文,莫斯科1957年版第493—509页。
 
    作者:B.乌斯宾斯基,莫斯科   译者:吴祖增
 
 
 
原创粉丝点击