1 / 32

程序设计语言理论

程序设计语言理论. 计算机科学技术系 陈意云. 课 程 简 介. 计算机科学的理论 数理逻辑:一阶逻辑、高阶逻辑、公理集合论、递归论、模型论和证明论等,它也是现代数学的基础。 计算理论:可计算性和计算复杂性、算法、形式语言理论、自动机理论等。 程序理论:形式语义、类型论、  演算、程序验证等。 数值计算. 课 程 简 介. 围绕程序设计语言的研究(课程涉及内容用 绿色 表示) 语法:形式语言和自动机理论,语法分析的实现技术。 语义: 公理语义、操作语义、指称语义 、属性文法。 形式描述技术还有: 代数规范 、范畴论。

maxine-day
Download Presentation

程序设计语言理论

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程序设计语言理论 计算机科学技术系 陈意云

  2. 课 程 简 介 计算机科学的理论 • 数理逻辑:一阶逻辑、高阶逻辑、公理集合论、递归论、模型论和证明论等,它也是现代数学的基础。 • 计算理论:可计算性和计算复杂性、算法、形式语言理论、自动机理论等。 • 程序理论:形式语义、类型论、演算、程序验证等。 • 数值计算

  3. 课 程 简 介 围绕程序设计语言的研究(课程涉及内容用绿色表示) • 语法:形式语言和自动机理论,语法分析的实现技术。 • 语义:公理语义、操作语义、指称语义、属性文法。 形式描述技术还有:代数规范、范畴论。 • 程序设计的范型:命令式语言、函数式语言、逻辑程序设计语言、面向对象程序设计语言、并行程序设计语言。

  4. 课 程 简 介 围绕程序设计语言的研究(课程涉及内容用绿色表示) • 类型论与类型系统:多态类型、子类型、存在类型。 • 程序验证:程序正确性证明。 • 程序分析技术:数据流分析、控制流分析、模型检查、抽象解释。 • 程序的自动生成技术:程序变换。

  5. 课 程 简 介 学习的意义 • 掌握和程序设计语言有关的理论,为从事有关的研究起一个奠基的作用。 • 应用1:程序设计语言的设计和实现 • 应用2:程序正确性证明 • 应用3:程序的自动生成 • 应用4:自动定理证明 • 应用5:软件安全 • 应用6:协议的形式化描述和验证

  6. 课 程 简 介 教材和参考书 • 教学资源网页:http://staff.ustc.edu.cn/~yiyun • John C. Mitchell, Foundations For Programming Languages, The MIT Press,1996. • Banjamin C. Pierce, Types and Programming Laungages, The MIT Press, 2002. • Robert Harper, Programming Languages: Theory and Practice • 陈意云,形式语义学基础,中国科学技术大学出版社,1994.

  7. 课 程 简 介 课程要求 • 讲课进展较快,平时不复习不加深理解,后面将听不懂。 • 作业较多,要求独立完成。 • 没有上机实验。 • 考试开卷。 • 成绩 = 考试成绩占80%,作业占20% 。

  8. 第1章 引 言 • 本章介绍一个非常简单的,以自然数和布尔值作为基本类型的,基于类型化演算的语言,介绍该语言的语法、操作语义和它在程序设计中的能力。 • 主要议题如下: • 表示法和演算系统概述; • 类型和类型系统的扼要讨论; • 基于表达式的归纳、基于证明的归纳和良基归纳。

  9. 1.1 基本概念 1.1.1 模型语言 • 对程序设计语言进行数学分析通常是从设计模型语言开始 突出感兴趣的程序构造,忽略一些无关的细节 • 程序设计语言形式化为两部分 • 能抓住该语言本质机制的一个非常小的核心演算:演算 • 可通过翻译成核心演算来理解导出部分 • 用类型化演算的框架来研究程序设计语言的各种概念

  10. 1.1 基本概念 1.1.2 表示法 • 表示法的主要特征 • 抽象:用于定义函数 • 应用:使用定义的函数 • 表示法写出的表达式叫做表达式或项 • 例(自然数类型上的几个例子) • 恒等函数:x : nat.x (Id(x : nat) = x ) • 后继函数:x : nat.x 1 • 常函数:x : nat.10 • x : nat.x true不是合式表达式

  11. 1.1 基本概念 • 项x : .M 和谓词演算公式x : A. • 是一个约束算子 • x是一个占位符,可以重新命名而不改变含义 • 在x:.x+y中,x的出现是约束的, y的出现是自由的 • 不含自由变元的表达式称为闭表达式 • 用项的并置来表示函数应用 • (x : nat.x) 5 • (x : nat.x) 5  5

  12. 1.1 基本概念 • 表示法中有两个约定 • 函数应用是左结合的 MNP 应看成 (MN)P • 每个的约束范围尽可能地大,一直到表达式的结束或碰到不能配对的右括号为止 • 例 • x:.MN解释为x:.(MN),而不是(x:.M)N • x:.y:. MN是x:.(y:.(MN))的简写 • (((x:.(y:.(z:.M)))N)P)Q可以简写为 (x:.y:.z:.M)NPQ

  13. 1.2 等式、归约和语义 • 表示法是演算的一部分,演算是关于表达式的一个推理系统。 • 除了语法外,这个形式系统有三个主要部分 • 公理语义:推导表达式之间等式的一个形式系统 • 操作语义:基于一个方向的等式推理(归约、符号计算) 两者都称为证明系统 • 指称语义:形式系统的模型

  14. 1.2 等式、归约和语义 1.2.1 公理语义 一个等式公理系统 • 约束变元改名公理(公理) • x:.M  y:.yxM,M中无自由出现的y • NxM表示M中的x用表达式N代换的结果 • 例如x:.x  y:.y • 函数应用公理(公理) • (x:.M)N  [N/x]M • 例如 (x:nat.x+4) 4 [4/x](x+4)  4 + 4

  15. M1 = M2, N1 = N2 M1 N1 = M2 N2 1.2 等式、归约和语义 • 自反公理 • 对称性规则、传递性规则 • 同余规则 • 相等的函数作用于相等的变元产生相等的结果 • 等式证明规则允许推导任何一组等式前提的逻辑推论

  16. 1.2 等式、归约和语义 1.2.2操作语义 语言的操作语义可用不同的方式给出 • 定义一个抽象机,通过一系列的机器状态变换来计算程序 • 演绎出最终结果的证明系统 • 前面所列的等式公理的单向形式给出了归约规则 • 最核心的归约规则是()的单向形式 (x:.M)N  [N/x]M • 通常没有 归约规则x:.M  y:.yxM

  17. 1.2 等式、归约和语义 1.2.3 指称语义 • 先确定指称物,然后给出语言成分到指称物的语义映射,这个映射要满足: • 每个成分都有对应的指称物 • 复合成分的指称只依赖于它的子成分的指称 • 类型化演算的指称语义 • 每个类型表达式对应到一个集合 • 类型 的项解释为其值集上的一个元素 • 类型的值集是函数集合,项x:.M解释为一个数学函数

  18. 1.3 类型和类型系统 • 类型提供了所有可能值的全体的一种分类:一个类型是一群有某些公共性质的值 • 对于不同的类型系统,类型的多少和值所属的类型可能不同

  19. 1.3 类型和类型系统 1.3.1类型和类型系统 • 类型语言:变量都被给定类型 • 未类型化的语言:不限制变量值的范围 • 类型系统 • 语言的一个组成部分 • 由一组定型规则构成 • 类型系统的研究有两个分支 • 类型系统在程序设计语言中的应用 • “纯类型化演算”和不同逻辑之间的对应关系

  20. 1.3 类型和类型系统 设计类型系统的目的 • 用来证明程序不会出现不良行为 • 类型可靠的语言(安全语言) • 所有程序运行时都没有不良行为出现 • 类型系统的研究也需要形式化的方法 • 许多语言定义被发现不是类型可靠的,甚至经过类型检查后接受的程序也会崩溃 • 显式类型化的语言:类型是语法的一部分 • 隐式类型化的语言

  21. 1.3 类型和类型系统 1.3.2类型语言的优点 • 开发时的实惠 • 可以较早发现错误 • 类型信息具有文档作用(比程序注解精确,比形式规范容易理解 ) • 编译时的实惠 • 程序模块可以相互独立地编译 • 运行时的实惠 • 更有效的空间安排和访问方式,提高了目标代码的运行效率

  22. 1.3 类型和类型系统 类型系统的其他应用 • 计算机和网络安全 • 许多程序分析工具使用类型检查或类型推断算法 • 类型系统用来表示逻辑命题和证明

  23. 1.4 归纳法 1.4.1表达式上的归纳 • 表达式文法 e ::= 0 | 1 | v | e + e | e  e • 表达式都有一棵分析树 • 如果P是表达式的性质, Q是自然数的性质 • Q(n)=def 树t.如果height(t) = n 并且t是e的分析树,那么P(e)为真 • 首先必须为高度是0的分析树直接证明P • 然后,对于高度至少为1的树,假定对于分析树的高度较小的表达式,P都成立。

  24. 1.4 归纳法 • 结构归纳(形式1) • 对每个原子表达式e,证明P(e) • 对直接子表达式为e1,…, ek的任何复合表达式e,证明,如果P(ei)(i=1,…, k)都为真,那么P(e) 也为真。 • 结构归纳(形式2) • 证明: 对任何表达式e,如果P(e)对e的任何子表达式e都成立,那么P(e)也成立。 • 形式2的归纳假设包含了所有的子表达式,并非只是直接子表达式。

  25. 1.4 归纳法 1.4.2 证明上的归纳 • 证明系统由公理和推理规则组成 • 证明是一个公式序列,该序列中的每个公式都是公理或者是由前面的公式通过一个推理规则得到的结论 • 基于证明的长度,用自然数归纳法来讨论证明的性质 • 另一种观点把证明看成是某种形式的树

  26. A2 A1 - - - B 证明树示意图 1.4 归纳法 • 证明上的结构归纳 • 对该证明系统中的每个公理,证明P成立 • 假定对证明1, …, k,P成立,证明P()也为真。是这样的证明,它结束于用一个推理规则,并且是从证明1, …, k延伸出来的一个证明。

  27. 1.4 归纳法 1.4.3 良基归纳 • 集合A的良基关系是A上的一个二元关系,它具有这样的性质:A上不存在无穷递减序列a0 a1 a2  … 。 • 例:在自然数上,如果j  i +1,则i  j,则这个关系是一个良基关系。 • 良基关系的一些特点 • 良基关系不一定有传递性 • 良基关系都是非自反的,即对任何aA,a a不成立;否则会出现无穷递减序列aa a  …。

  28. 1.4 归纳法 • 引理1.1如果是集合A上的二元关系,那么是良基的当且仅当A的每个非空子集都有一个极小元。 • 证明令BA是任意非空子集。用反证法证明B有极小元。 • 如果B无极小元,那么对每个aB,可以找到某个aB使得aa。这样,可以从任意的a0B开始,构造一个无穷递减序列a0 a1 a2  …。 • 反过来,假定每个子集有一个极小元,那么不可能存在a0 a1 a2  …,因为该序列给出了无极小元的集合{a0, a1, a2, …}。

  29. 1.4 归纳法 • 命题1.2(良基归纳)令是集合A上的一个良基关系,令P是A上的某个性质。若每当所有的P(b) (b a)为真则P(a)为真(a. (b.( b a  P(b))  P(a)) ),那么,对所有的aA,P(a)为真。 • 证明 如果存在某个xA使得P(x)成立,那么集合 B  { aA |  P(a)} 非空。由引理1.1,B一定有极小元aB。 但是,对所有的b a,P(b)一定成立(否则a不是B的极小元),这就和假定b.(b a  P(b))  P(a)矛盾。

  30. 1.4 归纳法 表1.1 常用归纳形式的良基关系

  31. 1.4 归纳法 • 自然数归纳(形式1):为证明对所有自然数n,P(n)为真,只需证明P(0)以及证明对任何自然数m, 如果P(m)为真则P(m+1)必定为真。 • 自然数归纳(形式2):为证明对所有自然数n,P(n)为真,只需证明对任何自然数m,如果所有的P(i) (i  m)为真则P(m)必定为真。 • 字典序(以自然数序列为例 ) n1, n2,…, nk  m1, m2,…, ml iff k < l 或者k  l并且存在一个i  k,使得对所有的j < i有nj mj并且ni< mi。

  32. 习 题 1.2,1.4,1.6(a)

More Related