正确性 (计算机科学)

✍ dations ◷ 2025-05-21 20:46:06 #理论计算机科学

在理论计算机科学中,算法的正确性(英语:correctness)是指一个算法在程序规范下被认定为正确的判定。其中,正确(英语:functional correctness)针对输入输出的行为(例如:对每一个输入,算法都能给出预期的输出)。

人们将正确性分为两类。一类被称为部分正确性(英语:partial correctness),它要求在算法返回结果时这一结果是正确的;另一类被称为完全正确性(英语:total correctness),它在部分正确性的基础之上还要求算法必须能够结束。由于对于停机问题没有通用的解决方案,因此判定完全正确性的断言有着更多需要深层次研究的地方。终止的证明是指一类数学证明,因为完全正确性需要证明一个算法会终止,所以它在程序的形式验证中起着至关重要的作用。

例如考虑这样一个问题:依次搜索整数列1, 2, 3, …来看是否存在某个特定现象——比如说存在一个奇数为完全数。对于这个问题而言,我们很容易写出一个部分正确的程序(直接对于每个数字做长除法判定其是否完全)。然而如果我们想证明这个程序是完全正确的,那就相当于我们在断言一个在数论里目前还未知的结论。

在算法和程序规范都是基于形式化来给出时,对正确性的证明应当为一个数学证明。然而我们并不期待能够给出特定机器上实现的特定程序的正确性断言,因为那样将需要考虑诸如内存限制在内的更多问题。

证明论中有一个结论柯里-霍华德同构。这一结论认为:任意一个在构造性逻辑下的功能正确性的证明都对应了一个λ演算程序。这种转换证明的方式被称为(英文:program extraction)。

霍尔逻辑是一个具体的能够严密验证程序正确性的形式系统。它用一系列的公理来定义程序语言的语义,从而通过称之为霍尔三元组的断言来验证程序的正确性。

软件测试是指验证一个程序或系统的某些属性或能力来判断它是否达到预期目的的行为。尽管软件测试在软件质量方面起着至关重要的作用,并且被程序员和测试员们广泛采用,但由于人们对软件的认识十分有限,它仍旧是一个艰深的领域。软件测试的最大难点在于如何控制其复杂性:我们没有办法在一个合理的复杂度内完整地测试一个程序。测试不只是调试。测试的目的包括但不限于确保软件质量、验证其正确性和估算其稳定性。我们对测试的定义也可以更加一般化,其中正确性测试和稳定性测试是两个最大的研究领域。软件测试是预算、时间和软件质量的一个平衡。

相关

  • 昏迷糖尿病昏迷为一种常见的内科急症,只有通过准确且有效的治疗才能让患者及时康复,相反,若不及时抢救亲者脑部缺氧瘫痪及会诱发各种并发症以至患者死亡。其确诊依赖于患者病史、
  • 胎毛毫毛或称胎毛是一种只有婴儿才有的体毛,它的功能与头发类似,但在婴孩八个月时就会逐渐消失,因为毫毛有此特性,故有家长把孩子带到订做毛笔的地方,把毫毛刮下制成毛笔,作为送给孩子
  • 法国电视一台坐标:48°50′1.9″N 2°15′38.3″E / 48.833861°N 2.260639°E / 48.833861; 2.260639法国电视一台(TF1)是法国的一家民营电视台,隶属于TF1 Group。工业集团布依格对该媒体
  • 非形式谬误非形式谬误(英语:informal fallacies)意指一个推理犯了论证结构(形式)以外的错误。非形式谬误有几种常见的表现方式:非形式谬误由于以上几种情形,使得论证缺乏合理性或说服力。我们
  • 埃普索姆坐标:51°20′10″N 0°16′03″W / 51.3361°N 0.2674°W / 51.3361; -0.2674埃普索姆(Epsom)是英国萨里郡埃普瑟姆和尤厄尔内的一个邮镇,不过其还有一部分地区属于赖盖特和班
  • 山极胜三郎山极胜三郎(日语:山極 勝三郎/やまぎわ かつさぶろう Yamagiwa Katsusaburō ?,1863年4月10日-1930年3月2日),是日本病理学家、诗人,东京帝国大学教授。信浓国上田藩(今·长野县上
  • 美属维京群岛美属维尔京群岛(英语:Virgin Islands of the United States,常写作United States Virgin Islands,缩写为USVI)是美国在加勒比海的一个建制非合并属地,位于波多黎各以东,处于小安的
  • 下丘脑-垂体-肾上腺轴下视丘-垂体-肾上腺轴 (HPA或HTPA轴),也被叫做 边缘系统-下视丘-垂体-肾上腺轴(LHPA轴),是一个直接作用和反馈互动的复杂集合,包括 下视丘(脑内的一个中空漏斗状区域),脑垂体(下视丘
  • 日野启三日野启三(日野 啓三,ひの けいぞう,1929年6月14日-2002年10月14日),日本作家,出生于东京。曾在1974及1986年分别获得芥川龙之介赏和谷崎润一郎赏。
  • 前向声明在程序设计中,前向声明(Forward Declaration)是指声明标识符(表示编程的实体,如数据类型、变量、函数)时还没有给出完整的定义。一个简单的C/C++例子:void printThisInteger(int)