• 1.99 MB
  • 2022-04-29 14:41:22 发布

最新1-1-1走进细胞课件PPT.ppt

  • 76页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'1-1-1走进细胞 病毒、原核细胞和真核细胞显微镜的使用1.多种多样的细胞揭密必考点2.显微镜操作技能及相关知识第1讲走近细胞辨析疑点突破难点备选素材展台 病毒、原核细胞和真核细胞辨析疑点 突破难点高倍显微镜的使用高倍显微镜的使用 突破难点找移转调在低倍镜下找到观察目标并调节至清晰在低倍镜下将目标移到视野中央转动转换器,换上高倍镜调节光圈或反光镜及细准焦螺旋闪记:高倍镜的使用“四字诀”高倍显微镜的使用 生物的五界分类系统细胞的多样性和统一性典例1训练1多种多样的细胞揭秘高考必考点闪记:常见的原核生物和真核生物(1)原核生物:一藻(蓝藻);二菌(细菌、放线菌);三体(支原体、衣原体、立克次氏体)。(2)难辨别的真核生物:一(衣藻)团(藻)酵母(菌)发霉(菌)了。(3)原核生物≠细菌,细菌只是原核生物界的一类! 生物的五界分类系统细胞的多样性和统一性典例1训练1揭秘高考必考点多种多样的细胞细胞的多样性表现在:(1)不同真核细胞的形态、结构的差异。(2)不同原核细胞的形态、结构的差异。(3)真、原核细胞结构上的区别细胞的统一性表现在:(1)化学组成:组成元素基本一致。(2)结构:都有细胞膜、细胞质、细胞核(3)增殖方式:通过细胞分裂进行细胞的增殖(4)遗传物质:都是DNA(5)能源物质:都以ATP作为直接能源物质 生物的五界分类系统细胞的多样性和统一性典例1训练1【典例1】►(2012·上海单科,5)微生物的种类繁多,下列微生物中属于原核生物的是()。①黏菌②酵母菌③蓝细菌④大肠杆菌⑤乳酸杆菌A.①②③B.②③④C.③④⑤D.①④⑤揭秘高考必考点C命题揭秘思维导图拓展归纳命题方式:命题多侧重原核细胞与真核细胞的比较与判定考查形式:多为选择题规律总结:(1)(1)正确识别带“藻”字的生物类别:颤藻、念珠藻、蓝球藻、发菜、鱼腥藻属于蓝藻(原核生物),衣藻、轮藻、小球藻、黑藻、水绵属于真核生物。(2)正确识别带有菌字的生物:凡是“菌”字前面有“杆”字、“球”字、“螺旋”及“弧”字的都是细菌,酵母菌、霉菌属于真核生物。答案展示多种多样的细胞原核生物细菌蓝藻球菌、杆菌、螺旋菌蓝细菌 生物的五界分类系统细胞的多样性和统一性典例1训练1【训练1】►下列关于图示①②③④四个框图内所包括生物的共同特征的叙述,正确的是()。A.框图①内都是原核生物,且都能发生突变B.框图②内的生物都不含叶绿素,且都是分解者C.框图③内的生物都具有细胞结构,且都有细胞壁D.框图④内都是异养生物,且都能进行有丝分裂C揭秘高考必考点解析答案烟草花叶病毒无细胞结构,不属于原核生物;硝化细菌能进行化能合成作用,是生产者。多种多样的细胞 放大倍数及污点位置判断高倍镜和低倍镜观察的比较典例2训练21.显微镜的放大倍数(1)显微镜的放大倍数是指物像长度或宽度的放大倍数。(2)总的放大倍数是目镜放大倍数与物镜放大倍数的乘积。2.目镜与物镜长短与放大倍数之间的关系揭秘高考必考点显微镜操作技能及相关知识10×15×4×40×目镜物镜目镜长、物镜短、距离大,放大倍数就小;目镜短、物镜长、距离小,放大倍数就大。3.污点位置判断 放大倍数及污点位置判断高倍镜和低倍镜观察的比较典例2训练2揭秘高考必考点显微镜操作技能及相关知识物象大小细胞数目视野亮度物镜到装片的距离视野大小高倍镜低倍镜大小大小少多暗亮远近 【典例2】如图所示:甲图中①②表示目镜,③④表示物镜,⑤⑥表示物镜与载玻片之间的距离,乙和丙分别表示不同物镜下观察到的图像。下面描述正确的是()A.①比②的放大倍数大,③比④放大倍数小B.把视野里的标本从图中的乙换为丙时,应选用③,同时提升镜筒C.从图中的乙转为丙,正确调节顺序:转动转换器→调节光圈→移动标本→转动细准焦螺旋D.若使物像放大倍数最大,甲图中的组合一般是②③⑤放大倍数及污点位置判断高倍镜和低倍镜观察的比较典例2训练2D揭秘高考必考点显微镜操作技能及相关知识小黑板命题揭秘思维导图拓展归纳本考点在单科试卷中多次考查,但理综试卷5年内未单独命题,为冷考点。答案展示视野中细胞数目的相关计算若视野中细胞成单行,则计算时只考虑长度或宽度,可根据放大倍数与实物范围成反比的规律计算。若视野中充满细胞,计算时应考虑面积的变化,可根据看到的实物范围与放大倍数的平方成反比的规律计算。由甲图由乙丙图目物镜长短与放大倍数的关系显微镜由低倍镜换高倍镜的方法D项正确 放大倍数及污点位置判断高倍镜和低倍镜观察的比较典例2训练2揭秘高考必考点【训练2】►(2011·上海生命科学卷)如图为测量保卫细胞长度的局部视野,下列表述错误的是()。A.要测量该细胞的长度,需旋转目镜B.物镜从10换为40,图示测微尺每小格所代表的长度变小C.在不同放大倍数下,图示测微尺每小格的实际长度不同D.若视野中物像不清晰,会造成测量误差C解析答案测微尺在目镜上,在不同的放大倍数下,图示测微尺每小格的实际长度相同,故C错误。显微镜操作技能及相关知识 高考真题集训第1题第2题第3题第4题(2012·北京理综,2)从生命活动的角度理解,人体的结构层次为()。A.原子、分子、细胞器、细胞B.细胞、组织、器官、系统C.元素、无机物、有机物、细胞D.个体、种群、群落、生态系统解析答案解析:本题主要考查生命系统,从生命活动的角度来看,人体最基本的结构层次是细胞,然后依次为组织、器官、系统。元素、化合物、分子、细胞器等不属于生命系统的结构层次。B 高考真题集训第1题第2题第3题第4题(2012·重庆理综,1)下列细胞亚显微结构示意图,正确的是()。解析答案解析:细菌细胞和蓝藻细胞都是原核细胞,有核糖体和拟核,但不应该有线粒体和叶绿体,水稻叶肉细胞不应该有中心体。D 高考真题集训第1题第2题第3题第4题(2009·广东生物,28)关于甲型H1N1流感病毒与H5N1禽流感病毒的有关比较,正确的是(多选)()。A.均使感染者发烧,因此两者抗原相同B.感染不同的人后所引起的患病程度可能不同C.感染正常人体后均能引发特异性免疫反应D.均可能发生基因突变而改变传染性解析答案解析:虽然感染者所表现的发烧症状相同,但不一定两者的抗原就相同,故A错。由于不同人的免疫能力不同,故患病程度可能不同,故B正确。RNA是单链结构,基因突变频率高。BCD 高考真题集训第1题第2题第3题第4题(2011·江苏单科,10)将有关生物材料直接制成临时装片,在普通光学显微镜下可以观察到的现象是()。A.菠菜叶片下表皮保卫细胞中具有多个叶绿体B.花生子叶细胞中存在多个橘黄色脂肪颗粒C.人口腔上皮细胞中线粒体数目较多D.紫色洋葱鳞片叶外表皮细胞中细胞核清晰可见解析答案解析:当用光学显微镜观察时,可从菠菜叶片下表皮保卫细胞中直接观察到叶绿体,且呈绿色;细胞中的脂肪颗粒、线粒体和细胞核,本身不具有颜色,需经特殊染色处理后,才能够观察到。A 第四章程序语言的性质21 语言的形式化模型BNF为描述程序设计语言的属性提供了一种很好的手段,但并不是充分的手段。BNF回答了程序看起来象什么,但没有回答程序是做什么的。形式化模型采用精确的数学模型来刻画研究对象,为研究、分析和操纵研究对象提供严谨的数学工具和手段。本章将介绍下列形式化模型:形式文法:乔姆斯基文法分级语言的语义:属性文法、指称语义程序的验证22 4.1语言的形式化性质乔姆斯基分级文法语言的能力23 乔姆斯基分级文法文法由非终结符、终结符、开始(非终结)符、及产生式构成文法的类别3型文法:正则文法,定义词法的模型2型文法:BNF文法,上下文无关文法1型文法:上下文有关文法0型文法:24 3型文法:正则文法为词法分析器提供模型。这类文法的大多数性质都是可判定的如,能产生什么样的串、给定串是否属于文法规定的语言、语言中的串是否有限等正则文法可以产生形如an的串,其中a为有限字符序列正则文法只能计数有限数常用于关键字或单词扫描25 2型文法—上下文无关文法产生式的形式为:X,其中可以是终结符和非终结符的任意序列同样,这类文法的大多数性质都是可判定的如,能产生什么样的串、给定串是否属于文法规定的语言、语言是否为空等可用来计数和比较两个项,产生形如ancbn的串可以用堆栈来实现可用来自动产生程序的语法分析树2型和3型文法的相关问题都已基本上得到解决26 1型文法—上下文有关文法产生式的形式为:,其中任意非终结符串,是终结符和非终结符的任意序列,但中的符号个数应不多于的符号个数从开始符开始导出的串的长度是递增的在生成串时,需要使用固定数量的存储空间,例如识别上下文无关文法无法识别的串ancnbn上下文有关文法太复杂,很难用于程序设计语言人们对上下文有关文法的很多特征还不太清楚27 0型文法—非限定型文法对产生式的形式没有任何限制可用来识别任意可计算的函数其大多数性质都是不可判定的返回28 不可判定性不同类型的文法越来越复杂,产生的语言也越来越复杂,但是否说明计算机解决问题的能力可以越来越强,没有限制?例如:能否编写一个C语言程序来判断另一个C语言程序能否结束?但这基本上是不可能的,这不是编程人员的问题,而是因为计算机所基于的数学模型本身的局限性而导致的。29 图灵机一般来说,用一种语言编写的程序也可以用其他另一种语言来实现。那么是否存在某个程序,只能用某种语言来实现,而用其他语言就无法实现?如果没有,那么有哪些程序是其它程序设计语言无法表示的,为什么还需要那么多种不同的语言?如果我们将能够表示所有计算的语言都称为通用语言,那么是不是所有语言都是通用语言?如果是,是否存在更简单的通用语言?30 图灵机的结构图灵机是一种用来定义可计算函数的抽象计算机图灵机只有一个单一的数据结构,即一个称为“带子”的可变长线性数组带子被分为很多格,每格上只包含一个字符图灵机还有一个指针变量,称为“读出头”,它总是指向带子上的某个格。31 图灵机的操作图灵机只提供几个简单的操作:读出头所指定位置的字符可以被读出或被修改。程序可以根据读出的值进行转移。读出头可以左右移动。如果读出头移动到带子的最末端,则自动在带子上加上一格,并赋予一个空字符作为初始值。32 图灵机的运行图灵机开始运行时,带子上存放输入数据,读出头指向输入数据的最左端的字符;图灵机根据预先编好的操作序列读写带子上的数据、或移动读出头;如果最终能够停机,则带子上的内容就是最后的输出结果。33 图灵机的能力任意可计算函数都可以用图灵机计算出来(Church论题)图灵机等价于0型文法确定型图灵机等价于非确定型图灵机。34 停机问题是否存在某个通用的算法,它能够断定任意给定的图灵机在任意的输入下能否停机?停机问题是不可判断的,即不存在这样的通用算法。任意一个不可判断的问题,都等价于停机问题。结论:任何一种程序设计语言都可能代替其它语言程序设计语言不存在质的区别,只有量的区别,如是否优美、易用、高效等任何一种程序设计语言都有它存在的理由返回35 4.2语言的语义程序设计语言基本上都是以上下文无关文法(特别是LR(k)文法)的核心设计的。但语法分析已经不再是人们感兴趣的研究问题了。现在的问题是如何确定程序的含义(即语义)。36 语言的语义语言的手册必须定义语言中每个结构的含义,包括单独结构的含义以及和其他结构组合时的含义。语言提供了不同结构,用户(为了写正确的程序,预测语句的执行效果)和实现者(正确地实现语言)需要这些结构的精确定义。大多数语言中,形式文法用于定义语法,一段文字或例子用于定义语义,但定义是不精确的,有二义性,不同作者可能有不同理解。语义定义问题还是理论研究的目标,但至今没有令人满意的解答。已有各种形式方法用于语义定义。37 语义建模(1)—文法模型对定义语言的BNF文法进行扩展,给出程序的语法分析树,从树中抽取出附加信息。属性文法便是抽取附加信息的一种方式。38 语义建模(2)—命令或操作模型定义程序如何在某虚拟机上执行。通常描述为一自动机,但比语法用的简单自动机远为复杂。自动机有内部状态——对应程序执行时的内部状态,包括所有变量的值、执行程序本身、以及各种系统定义的数据结构。39 语义建模(2)—命令或操作模型一组形式定义的操作用于刻划自动机内部状态如何改变。此外还需定义程序文本如何翻译成自动机的初始状态。语言的操作定义对语言如何实际执行给出了相当直接的抽象。也可能提出一个更抽象的模型,作为语言的软件解释的基础。70年代的VDL(ViennaDefinitionLanguage)是一个操作方法。它扩展语法分析树已包含机器解释器。计算的状态是程序树加上描述机器中所有数据的树。每条语句的执行使树的状态发生变化。40 语义建模(3)—作用型模型试图直接构造每个程序的函数的定义,采用层次式的构造方式。程序中每个基本的或程序员定义的操作代表一个数学函数。语言的程序控制结构用于将这些函数复合为更大的序列,代表表达式和语言。语句序列和条件分叉表示为个体函数构造而成的函数。循环通常表示为递归函数。最终,为整个程序导出一个完整的函数模型,指称语义归于此类。41 语义建模(4)—公理模型使用谓词演算,每个语法结构的语义被描述为公理或推导规则,用于导出结构的执行效果。从一个初始假设开始,假设输入变量满足一定的约束,在程序语句执行后,使用公理和推导规则来推导其他变量值需满足的限制,最终,程序的结果被证明满足希望的约束(描述了它们的值和输入值的关系)。如Hoare的公理语义。42 语义建模(5)—规约模型描述实现程序的各个函数的关系,只要我们可以证明一个实现符合了所有的函数间的关系,则称实现相对于规约是正确的。代数数据类型是形式规约的一种形式。例如:实现栈的程序,S表示栈,则有公理,pop(push(S,x))=S任何一个实现如果能保持这种关系,则称是栈的正确实现。43 语义模型—小结上述各种形式语义模型各有优点,但均不能称为完全实用的和适用的,各有其适合范围。操作语义为语言的实现提供了一种形式模型,但对用户来说太细节公理语义易于理解,但很难用来定义复杂的程序设计语言,且缺乏对语言实现的支持返回44 语义建模—属性文法这是最早的开发语义模型的工作之一。其思想是对分析树中的每个结点关联一个函数,从而给出结点的语义内容。属性文法的创建过程是为文法中的每一条规则都定义相关的语义函数。继承属性是一个函数,它将树中非终结符值和树中更高层的非终结符值相关联。换言之,任何规则右端的非终结符的函数值是左端非终结符的函数。综合属性是一个函数,它将左端非终结符和右端非终结符的值相关联,这些属性在树中向上传递信息,即从树中下层信息进行“综合”。45 属性文法例:考虑算术表达式的简单文法。E→T|E+TT→P|T×PP→I|(E)其语义通过文法中非终结符间的关系集合定义。如:下面函数生成该文法生成的任意表达式的值:产生式属性E→E+TValue(E1)=V(E2)+V(T)E→TV(E)=V(T)T→T×PV(T1)=V(T2)×V(P)T→PV(T)=V(P)P→IV(P)=数I的值P→(E)V(P)=V(E)46 属性文法下图是一个属性树,它给出了表达式2+4×(1+2)值47 属性文法属性文法可用于在语法树中传递语义信息。例如,声明信息可以通过语言的声明产生式收集。沿树向下传的符号表信息可用于生成表达式代码。下面属性可加到非终结符来创建一个程序中声明的名字集合。产生式属性::=decl_set(declaration1)=declaname(decl)∪decl_set(declaration2)::=decl_set(declaration)=decl-name(decl)::=declarexdecl-name(decl)=x(decl)::=declareydecl-name(decl)=y(decl)::=declarezdecl-name(decl)=z这是综合属性,包含程序中声明的名字集合。该属性可以沿树向下传递,成为继承属性,用于正确地生成数据的代码。48 属性文法的使用首先创建语法分析树。属性文法假设你已经知道表达式是如何推导出来的,它并不关心是如何分析推导出来的。定义属性的函数可以是任意给定的,因此定义属性的过程完全是手工完成的。如果只有综合属性,并且文法是LR(k),那么,属性文法可以用来在语法分析时自动产程中间代码。这就是YACC如何工作的,它利用属性文法来计算所有非终结符的值。在构造分析树时,非终结符的信息逐层向上传递给分析树上层的非终结符。语法分析完毕,所有属性的值将计算出来。返回49 指称语义指称语义是一种用来描述程序设计语言的语义的作用型语义模型指称语义基于-演算50 -演算-演算是一种和图灵机的计算能力相当的理论计算模型-演算可以作为程序设计语言的函数调用的模型Algol和Lisp都采用来-演算的函数调用语义指称语义是对-演算的扩充,它将-演算扩充为一种通用的数据类型理论51 -演算的表达式-表达式可以递归地定义如下:变量名为-表达式如果M为一个-表达式,则x.M也是一个-表达式如果F和A都是-表达式,则(FA)也是-表达式,其中F为操作符,A为操作数。形式语法:-expr::=id|id.-expr|(-expr-expr)x相当于申明参数变量x,没有申明的变量为自由变量,否则为约束变量。x.M相当于函数申明,其中x相当于M的参数。例如:xx.xx.(xy)x.y(x.xy.y)52 -表达式的操作-表达式只有一种操作:约简(FA)约简相当于将A作为实际参数,替换F的形式参数的所有出现(x.MA)M’,相当于用A替换M中x的所有自由出现。例如:(x.xy)y(x.(xy)x.x)x.xyy注意:约简并不一定能简化原来的表达式(x.(xx)x.(xx))(x.(xx)x.(xx))……53 指称语义指称语义的基本思想是定义一个语义函数(指称函数),把程序的意义映射到某种意义清晰的数学对象(就像用中文解释英文)作为被指的数学对象可以根据需要选择对于简单的程序语言,一种很自然的选择是把程序的语义定义为(指称为)从状态到状态的函数。定义语义就是定义好每个程序对应的函数。程序的状态由标识符到值的映射集合构成S={id|value,…}54 指称语义表达式的语义[e]Sval语句的语义[s]SS程序的语义[m]valval55 指称语义设为程序的当前状态表达式的语义常数:[n]=n变量:[x]=(x)算术表达式:[e1+e2]=[e1]+[e2]语句的语义赋值语句:[x=e]={x|[e]}复合语句:[s1;s2]=[s2]([s1])条件语句:[ifbthens1elses2]=if[b]then[s1]else[s2]程序的语义[m]valval返回56 程序验证在编程时,人们越来越关心程序的正确性和可靠性。人们在设计程序设计语言时,也希望通过增加新的特征来增强程序的正确性和可靠性。我们可以用程序语义,按以下方式来探讨程序的正确性问题:给定程序P,其含义是什么?即,它的规范描述S是什么?给定规范描述S,开发实现了该规范描述的程序P规范描述S和程序P是否完成了相同的功能(执行了相同的函数)?相当于语义建模问题软件工程的核心问题程序验证的核心问题57 程序验证测试不能保证程序的正确性如果能找到不依赖于测试的保证程序正确性的方法,产生的程序就能更加可靠:程序计算了一个函数如果能给出该函数的规范描述,并且能够根据程序知道它到底计算了一个什么样的函数,那么,如果能够证明程序所计算的函数与给定的函数等价或相同,就能证明程序的正确性,而不需再测试。58 形式化的规范描述任一程序都可以表示成流程图基调:函数名:定义域值域fun1:S1andP1S3fun2:S1andnot(P1)S3fun3:S3andnot(P3)S4fun4:S3andP3S4S2andP2=S4S2andnot(P2)=S3P1P2P3Fcn1Fcn4Fcn3Fcn2S1S2S3S459 形式化的规范描述(续)这样,程序可以看成是一个定义在其基本成分上的复杂函数:C(fun1,fun2,fun3,fun4,p1,p2,p3):S1S4如果我们能够形式化地推导出上述关系,那么我们就能够从数学上证明,给定S1,程序将终止于状态S4。但是:证明非常困难。另外,在证明时,我们总是想证明程序和某个给定的形式化规范等价,但问题是,如果没有给出规范描述,“程序是否正确?”可能就没有了意义。60 公理化验证用谓词逻辑公式来刻画程序的语义、用谓词演算来验证程序的正确性。TonyHoare在1969年提出的。每个程序都遵循某种形式化的公理定义。实证(Validation):通过一系列测试数据的测试,展示程序满足了其规范描述。验证(Verification):根据程序结构,通过形式化的讨论,展示程序满足了其规范描述。Validation一般认为需要执行程序,而verification不需要。61 谓词逻辑公理{P1}S{P2}表示如果P1为真,则在S执行并终止后,P2将为真。如果A为真,则B也为真。逻辑公理:组合顺序1顺序2{P}S1{Q},{Q}S2{R}[组合语句]{P}S1;S2{R}{P}S{R},RQ[增加后置条件]{P}S{Q}PR,{R}S{Q}[增加前置条件]{P}S{Q}62 语句类型的公理条件语句1条件语句2While循环语句赋值语句{P^B}S{Q},P^not(B)Q{P}ifBthenS{Q}{P^B}S1{Q},{P^not(B)}S2{Q}{P}ifBthenS1elseS2{Q}{P^B}S{P}{P}whileBdoS{P^not(B)},其中P为不变式{P(e)}x:=e{P(x)},P(x)为x的谓词。63 公理化的程序证明给定程序:s1;s2;s3;s4;…sn及其规约:P和QP为前置条件Q为后置条件通过证明下列的谓词来证明{P}s1;…sn{Q}:{P}s1{p1}{p1}s2{p2}…{pn-1}sn{Q}反复运用组合公理,产生:{P}s1;…;sn{Q}64 例子{B>=0}1X:=B2Y:=03whileX>0do4begin5Y:=Y+A6X:=X-17end{Y=AB}即,给定非负的B,证明当程序终止时,Y=A*B.65 证明过程概要一般通过回溯来进行。首先,找到循环的不变式:Y为乘积的一部分,X为剩下的乘数因此,Y和X*A必须是所需的乘机,即不变式Y+X*A=A*B就是建议的不变式可以试着用(Y+X*A=A*BandX>=0)作为不变式66 证明赋值语句公理(6):{(Y+(X-1)A=A*BandX-1>=0)}X:=X-1{(Y+X*A=A*BandX>=0)}赋值语句公理(5):{((Y+A)+(X-1)A=A*BandX-1>=0)}Y:=Y+A{(Y+(X-1)*A=A*BandX-1>=0)}组合公理(5,6):{(Y+A)+(X-1)*A=A*BandX-1>=0)}Y:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)}数学定理:Y+X*A=A*BandX>0((Y+A)+(X-1)*A=A*BandX-1>=0)顺序语句公理:{Y+X*A=A*BandX>0}Y:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)}数学定理:(Y+X*A=A*BandX>=0)and(X>0)Y+X*A=A*BandX>0顺序语句公理:{(Y+X*A=A*BandX>=0)and(X>0)}Y:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)}[用**来代替]While循环语句公理:**{Y+X*A=A*BandX>=0}whileX>0doY:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)andnot(X>0)}67 证明(续)数学定理:(Y+X*A=A*BandX>=0)andnot(X>0)(Y+X*A=A*BandX=0)Y=AB顺序语句公理:{Y+X*A=A*BandX>=0}whileX>0doY:=Y+A;X:=X-1{Y+A*B}赋值语句公理:{0+X*A=A*BandX>=0}Y:=0{Y+X*A=A*BandX>=0}赋值语句公理:{0+B*A=A*BandB>=0}X:=B{0+X*A=A*BandX>=0)}组合公理:{0+B*A=A*BandB>=0}X:=B;Y:=0{Y+X*A=A*BandX>=0)}数学定理:(B>=0)0+B*A=A*BandB>=0顺序语句公理:{B>=0}X:=B;Y:=0{Y+X*A=A*BandX>=0)}组合公理:{B>=0}program{Y=A*B}68 公理化验证—小结需要为语言的所有特征建立公理,能否也为简单数组、过程调用、参数等建立公理?即使是要证明小程序也很困难,要证明大型程序就更困难了。还不能很好地处理非数学方面的问题,处理起来极端困难。很难自动化,而手工又会导致大量错误。但是准确,能够清楚地区别“程序是什么”以及“程序是如何解决问题”它是大多数其他验证方法的基础,包括半形式化的规范表示法。对于关键应用,付出的代价还是值得的。69 程序验证只有程序正确性的验证过程能够自动化,程序验证才有实际意义但要证明那些没有结构化的程序、以及那些具有复杂结构的程序的正确性,非常困难,基本上是不可能的。程序验证工作的研究成果通常用来指导程序设计语言的设计例如,在C++中加断言等。70 ML概述ML(元语言)是一种函数式语言,其程序的形式与C或Pascal相似。ML由RobinMilner于1970年代中期开发,是一种机器辅助形式化证明的机制。ML也可以作为一种通用符号操纵语言。1983,该语言中加入了模块等概念,并经过重新设计,形成了现在的标准ML。ML是一种具有静态类型、强类型、和函数式执行的语言,但类型不必由程序员来指定。ML程序由若干个函数定义构成。每个函数的类型是静态的,函数可以返回任意类型的值。因为是函数型的语言,变量的存储与C或Fortran语言的很不相同。ML可以通过其类型系统支持多态,还支持数据抽象。71 ML程序例子1fundigit(c:string):int=ord(c)-ord("0");2(*Storevaluesasalistofcharacters*)3funSumNext(V)=ifV=[]then(print("nSum=");0)4else(print(hd(V));5SumNext(tl(V))+digit(hd(V)));6funSumValues(x:string):int=SumNext(explode(x));7funProcessData()=8(letvalinfile=open_in("data.sml");9valcount=digit(input(infile,1))10in11print(SumValues(input(infile,count)))12end;13print("n"));72 把一个列表颠倒过来的函数datatypelist[a,b,c,d,e]hd(x):列表的头,或第一个元素tl(x):列表的尾,或除第一个元素外的元素x::y表示头为x,尾为y的列表x@y表示连接列表x和yfunreverse(L)=ifL=nilthennilelsereverse(tl(L))@[hd(L)];目标:将颠倒列表变成一个更简单的函数:列表要么是空的,否则,对表头和表尾进行处理将表尾颠倒,然后把表头连到后头。73 ML模式匹配上面的函数也可以写成:funreverse(x::y)=reverse(y)@[x]|reverse([])=[];在这个格式中,模式匹配就是寻找可以运用的函数定义:如果列表不为空,则匹配x::y;否则,匹配[]。74 ML的类型列表Lists:[a,b,c,d,e]所有的元素具有相同的类型元组Tuples:(“a”,1,2.3)简化的静态记录记录Records:{1=“a”,2=1,3=2.3}给出了选择子的名字构造动态的任意结构:datatypemoney=penny|nickel|dime;valx=penny;为常量设定值零钱的记录:datatypechange=coinsofmoney*int;coins(penny,3)类型为change的对象构造函数处理零钱:funNumPennies(coins(penny,x))=x;valx=coins(penny,5);NumPennies(x);valit=5:int;75 ML的结构硬币袋(Bagsofcoins):datatypecoinbag=bagofcoinbag*coinbag|itemofchange|empty;funValuechange(coins(penny,X))=X|Valuechange(coins(nickel,X))=5*X|Valuechange(coins(dime,X))=10*X;funCountchange(bag(X,Y))=Countchange(X)+Countchange(Y)|Countchange(item(X))=Valuechange(X)|Countchange(Empty)=0;函数的使用:valx=bag(item(coins(dime,3)),item(coins(nickel,7)));Countchange(x);valit=65:int76'