自然数阶乘算法程序正确性的形式化证明

来源 :大众科学·上旬 | 被引量 : 0次 | 上传用户:slovedw520
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:程序正确性与可信性是各类计算机系统中最重要的核心问题。在开展“C程序设计”课程双语教学、以及精品在线开放课程建设的实践中,培养计算思维的意识和能力是核心任务。本文选择体现计算思维本质特征的“自然数阶乘算法”这个典型程序为抓手,透过程序调试与测试的表象,直击程序正确性与可信性的核心,通过程序的完全正确性证明,为开展计算思维的形式化方法教育、培养视野及思维开阔的国际化人才,进行了有益的实践。
  关键词:阶乘算法;程序正确性;形式化证明;计算思维;双语教学
  1 引言
  实施双语教学,是“互联网+”及智能时代培养国际化人才的重要举措。广州涉外学院发挥“涉外”特色优势,采用爱尔兰都柏林工业大学Paul Kelly编著的中国教育部双语教学示范教材[1],在计算机应用及软件技术专业强化双语教学,取得显著成效[2]。在进一步开展“双语C程序设计”精品在线开放课程的建设实践中,更需要注重将“计算思维”的意识培养和方法应用贯穿人才培养和实践教学的全过程。
  计算思维被认为是数学逻辑思维、物理实证思维后的第三种思维方式,由美国计算机科学家周以真教授首次提出[3]:计算思维是与形式化问题及其解决方法相关的思维过程,是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等思维活动,根本特征是抽象和自动化。形式化方法用严格的符号系统和数学模型描述和验证一个目标软件系统的行为和特性[4],使用严格精确的数学语言、无二义的语法语义,以及一组定义其语法语义的形式化规则,采用严谨的演绎推理法完成逻辑分析和证明。
  程序设计课程是培养计算思维最有效的工具。中国九校(首批“985工程”建设高校)联盟在计算机基础教学发展战略联合声明中,把培养计算思维能力作为计算机基础教学的核心任务[5]。而自然数的阶乘算法,可用“循环结构”与“递归函数”两种程序实现,体现了计算思维中“自动化”的本质特征,成为培养计算思维能力的最好抓手。
  2 程序正确性概述
  程序的正确性是衡量一个程序正常工作的基本条件。然而,程序所描述的动态计算过程是无法直接用程序本身的静态结构进行正确性证明。因此,程序含有错误是难免的。为尽量减少错误[6],首先应使用结構化程序设计方法,并在程序调试时采用软件测试的方法去跟踪程序的运行,从而发现与改正错误,但更重要的是采用程序正确性证明的理论进行证明。
  然而,这些早期的奠基性工作仍有很多不足之处[4],在应用中异常繁琐且较难掌握。但其中采用形式化方法构建正确及可信的程序,则有利于提高计算思维能力,便于从理论上指导设计出正确的程序。
  程序规约是对程序所实现功能的精确描述,是程序正确性的判断依据,由程序的前置断言和后置断言两部分组成。前置断言是程序执行前的输入应满足的条件,用一阶逻辑公式Pre表示。后置断言是程序执行后的输出应满足的条件,用一阶逻辑公式Post表示。若用P表示问题求解的实现程序,则程序规约可用Floyd-Hoare逻辑公式表示为{Pre}P{Post},根据此逻辑表达式的布尔值,对程序正确性做以下定义:
  (1)部分正确:若对于每个使Pre(i)为真,且能使程序P计算终止的输入信息i,Post(i,P(i))都为真,则称程序P关于Pre和Post是部分正确的。
  (2)程序终止:若对于每个使Pre(i)为真的输入i,程序P的计算都终止,则称程序P关于Pre是终止的。
  (3)完全正确:若对于每个使Pre(i)为真的输入信息i,程序P的计算都将终止,并且Post(i,P(i))都为真,则称程序P关于Pre和Post是完全正确的。
  一个程序的完全正确,等价于该程序是部分正确,同时又是终止的。
  3 自然数阶乘算法的递归实现及正确性证明
  自然数阶乘的C语言递归程序P如下[1]:
  int fact( int n )
  {
  int x = 1;
  if ( n > 0 )
  x = n * fact(n-1);
  return x;
  }
  证:使用广义数学归纳法,容易证明程序正确,此处从略。
  4 自然数阶乘算法的循环实现及正确性证明
  自然数阶乘的C语言循环程序P如下[1]:
  int fact( int y )
  {
  int x = 1;
  while ( y > 0 )
  x = y * x, y = y-1;
  return x;
  }
  证:① 首先使用Hoare公理法证明程序部分正确性。
  采用Hoare逻辑三元组描述程序为:
  [ y ≥ 0  y = n ]  F  [x = n!] (4-1)
  由此可见:P: y ≥ 0  y = n
  Q: x = n!
  首先, y > 0  x × y! = n!  →  y > 0  ( y × x ) × (y - 1)! = n!                                                       (4-2)   根据赋值公理,用 x 代替 y × x 可得到以下表达式:
  [ y > 0  ( y × x ) × (y - 1)! = n! ]  x = y * x  [ y > 0  x × (y - 1)! = n! ]                                                       (4-3)
  由式(4-2)和式(4-3)利用结论规则,可得
  [ y > 0  x × y! = n! ]  x = y * x  [ y > 0  x × (y - 1)! = n! ]                                                       (4-4)
  同理,由赋值公理可得
  [ y > 0  x × (y - 1)! = n! ]  y = y - 1  [ y ≥ 0  x × y! = n! ]                     (4-5)
  由式(4-4)和式(4-5)利用顺序规则,可得
  [ y > 0  x × y! = n! ]  x = y * x, y = y - 1  [ y ≥ 0  x × y! = n! ] (4-6)
  根据式(4-6),利用循环规则中 P = y > 0  x × y! = n!,R = y > 0,可得
  [y ≥ 0  x × y! = n! ]  while (y>0) x = y * x, y = y - 1 [ y≥0  x × y! = n!  y≤0 ] (4-7)
  因为 y = n  x = 1  →  x × y! = n! (4-8)
  由式(4-7)和式(4-8)利用结论规则,可得
  [ y ≥ 0  y = n  x = 1] while (y > 0) x = y * x, y = y - 1 [ y≥0  x × y! = n!  y≤0 ] (4-9)
  又因為 0! = 1,所以
  y ≥ 0  x × y! = n!  y ≤ 0  →  y=0  x × y! = n!  →  x = n!     (4-10)
  由式(4-9)和式(4-10)利用结论规则,可得
  [ y ≥ 0  y = n  x = 1 ]  while ( y > 0 )  x = y * x, y = y - 1  [ x = n! ] (4-11)
  根据赋值公理可得
  [ y≥0  y = n]  x = 1  [ y≥0  y = n  x = 1 ]   (4-12)
  最后,由式(4-11)和式(4-12)利用顺序规则,可得
  [ y ≥ 0  y = n ]  x = 1;  while ( y > 0 )  x = y * x, y = y - 1  [ x = n! ] (4-13)
  可以看出,式(4-13)和式(4-1)相同且成立,程序的部分正确性得证。
  ② 再用 Kruth计数器方法证明程序终止性。
  选取 N(y) = y
  输入断言: I(y): y > 0
  当第一次进入循环时有 y > 0
  根据程序算法容易看出:循环体内始终满足 y > 0,于是就有N(y) > 0;
  而每执行一次循环,N(y)是递减的;
  因而,循环只能执行有限次,必定终止,程序的终止性得证。
  完全正确性:综合上述证明,程序是部分正确的且也是终止的,故程序是完全正确的。
  5 结语
  计算思维的形式化方法能够严格分析、处理、证明程序及其性质,对于确保程序正确性和提高可信性具有基础性的作用。当前,形式化方法教育已在欧美教育界进行了相关的实践,因此我国高校计算机教育强调计算思维的同时,更要注重其内涵形式化方法的教育作用。
  参考文献:
  [1] Paul Kelly等,双语版C程序设计[M], 2017,电子工业出版社
  [2]Jiangtao Geng etc. Research on Speeding up the Internationalization of Private High Vocational Education[J].International Journal of Technology Management 2017(4):7-9
  [3] Jeannette M. Wing. Computational Thinking[J]. Communication of the ACM. 2006, 49,(3):33-35.
  [4] 王戟等. 形式化方法概貌[J]. 软件学报, 2019, 30(01):33-61.
  [5] 何钦铭等.计算机基础教学的核心任务是计算思维能力的培养[J].中国大学教学,2010(9): 5-9.
  [6] 马晓星等. 软件开发方法发展回顾与展望[J]. 软件学报, 2019, 30(01):3-21.
  作者简介:
  梁元贞(1983.12-),女,讲师,硕士,广州涉外经济职业技术学院计算机应用教研室主任。研究方向:双语教学、课程研究、计算机课程教学。
  林燕芬(1974.7-),女,助理研究员,广州涉外经济职业技术学院高教研究室。研究方向:高职教育研究、精品课程建设。
  *通讯作者:耿江涛(1965.12-),男,副教授,高级工程师,华南师范大学博士生,广州涉外经济职业技术学院华文与国际教育学院院长。研究方向:大数据应用技术、高职教育国际化、双语教学。
  基金项目:1.广东省教育厅2017年度广东省特色创新项目“粤港合作背景下高职院校国际化人才培养研究”(项目编号:2017GWTSCX061)阶段性成果 2.广州涉外经济职业技术学院2018年校级质量工程重点项目“广州涉外经济职业技术学院精品在线开放课程管理与建设研究”(项目编号:SWZL201807)成果 3.广州涉外经济职业技术学院2019年校级质量工程重点项目“基于大数据智慧教育平台的计算机课程双语教学改革的实践研究”(项目编号:SWZL2019008)成果 4.广州涉外经济职业技术学院2019年校级教研重点项目“基于学者网平台构建对分课堂模式实施程序设计课程的双语教学改革”(项目编号:2019JY01)成果
其他文献
一说起肛裂,大多数人都会忍俊不禁。但是当该病的发生伴随着剧烈的疼痛来临时,人们往往又很难忽视肛裂这一肛肠疾病。根据统计结果显示,全世界的肛裂病人占全球总人数的万分之一,该病的发病年龄和发病性别并不固定,但多见于青年女性和中老年男性之中。虽然肛裂并不算大病,而且有一定的概率自动愈合,但是该病会呈现出明显的临床症状,而且存在较大的复发可能性,因此需要经由专业的医师进行诊断和治疗。为了了解我们在面对肛裂
期刊
摘 要:在口腔疾病中,龋齿是最为普遍也是最为严重的疾病,它被世界卫生组织划为重要防治疾病的第三种疾病,仅次于癌症和心血管疾病,3-6岁是幼儿身体和各种机能成长的关键期,这阶段的龋齿患病率要大于未来几年,下面我从3-6岁这一阶段幼儿的年龄心理特点进行分析,找出龋齿的形成原因,并对这一时期的幼儿如何预防龋齿做了简单的研究。  关键词:龋齿;预防策略  龋齿又称作龋病,是在以细菌为主的多因素作用下,牙无
期刊
摘 要:阐述了COVID-19病房空气流通存在的问题;论述了基于TRIZ理论消除病毒和获得新鲜适温空气的最终理想解;技术矛盾应用“阿奇舒勒矛盾矩阵”的创新方法推出了有效的空气流通过程消除病毒方案;物理矛盾应用“空间分离原理”的创新方法推出了获取新鲜空气循环通风方案;论证了COVID-19病房空气流通方法的有效性。  关键词:COVID-19;病房;空气;流通性  0新型冠状病毒COVID-19病房
期刊
摘 要:随着我国经济的发展,我国的科学技术得到了很大的提升与进步,尤其是网络技术方面的技术发展的尤为迅速。大数据技术是如今网络技术中的热门技术,通过对大数据的研究和使用,让我国的各行业、企业的发展都发生了很大的变化。档案管理是每个事业单位都要进行的一项工作,面对庞大的档案信息,运用大数据可以对这些庞大的数据进行管理。  关键词:大数据;事业单位;档案管理  一、大数据对档案管理工作带来的挑战  无
期刊
摘 要:在初中阶段的教学当中,语文教学格外重要,而在语文教学当中经典古诗文诵读又是必不可缺的。基于此,本文章从把初中语文教学和经典古诗文诵读相结合来,课堂中进行互动交流、老师要在语文教学中带头诵读来激发初中生们诵读热情两方面来探讨了关于老师如何进行初中语文经典古诗文诵读的教学,这也有利于初中生们可以更好掌握语文的精髓,为培养学生语文综合能力打下良好的基础。  关键词:初中语文;经典古诗文;诵读  
期刊
摘 要:正当防卫作为一种私力救济方式,在公民权益遭受侵害但又不能及时获得公力救济的情况下发挥着重要作用。近年来涉及正当防卫的案件明显增多,由于我国正当防卫的立法存在不足,学界对正当防卫的一些问题存在争议,司法实践中相关案件处理也存在问题。文章立足于正当防卫的基本理论,反思我国正当防卫制度存在的不足,并就此提出完善建议。  关键词:正当防卫;私力救济;权利保护  一、正当防卫的涵义  正当防卫是指当
期刊
摘 要:孔子的“命运观”分为天命观和个体命运观两个层次,天命观内在地包含知晓天命和敬畏天命两个方面的内容,命运观承认人前定命运的存在,以积极主动的态度来面对个人的命运。对孔子“命运观”的考察,对于我们重新解读孔子的天人关系,把握和挖掘其深刻的哲学意蕴和人文关怀,构建支撑人生的强大精神力量具有重要意义。  关键词:孔子;天命观;命运观  命运者,抽象神秘,这是中国一个古老的哲学命题之一,是对人类终极
期刊
摘 要:为了能够管理好煤矿企业的经营生产活动,让煤矿企业的业务流程能够变得更加规范,以及提升企业的成本控制力度,继而在煤矿内部必须要使用市场化的信息管理系统,这种系统相对而言较为智能,能够有效的让煤矿的内部信息化管理落到实处。基于此,本文主要讨论了在煤矿内部进行市场化管理系统的具体策略。  关键词:煤矿;内部市场化;管理系统设计  引言:  目前随着经济不断的发展,计算机网络也随之普及,煤炭行业的
期刊
摘 要:数字媒体技术是计算机与动漫设计相结合的一门专业课,随着课程专业的多样化,很多中职学校多开设了这门课程。中职学校教育是以培养技能性人才为目标,对学生进行专业化的培训,满足社会对人才的需求。现在中职学校数字媒体技术应用专业课教学过程中还存在很多的问题,导致无法充分认知这门课程,在思想上存在一定的偏差。基于此,本文简要分析了数字媒体技术应用专业的主要内容与现在课堂中存在的问题,随后从四个方面分析
期刊
摘 要:近年来,我国经济建设发展非常迅速,离不开各行业的大力支持和高度配合,才有今天的成就。作为新型服务产业的重要形式,旅游事业对于拉动我国区域经济发展有着重要作用。传统的旅游方式仅仅在于自然景点或者人文景点的开发,这种独立式的重点旅游在旅游层面上缺乏广度和深度,导致游客的旅游体验不佳。当前随着生态概念的掀起,旅游形式朝着生态方面发展,进而促进了生态旅游的发展,有效地实现了各个独立景点的关联,使得
期刊