第一讲引言一、课程内容·数理逻辑:是计算机科学的基础,应熟练掌握将现实生活中的条件化成逻辑公式,并能做适当的推理,这对程序设计等课程是极有用处的。
·集合论:数学的基础,对于学习程序设计、数据结构、编译原理等几乎所有计算机专业课程和数学课程都很有用处。
熟练掌握有关集合、函数、关系等基本概念。
·代数结构:对于抽象数据类型、形式语义的研究很有用处。
培养数学思维,将以前学过的知识系统化、形式化和抽象化。
熟练掌握有关代数系统的基本概念,以及群、环、域等代数结构的基本知识。
·图论:对于解决许多实际问题很有用处,对于学习数据结构、编译原理课程也很有帮助。
要求掌握有关图、树的基本概念,以及如何将图论用于实际问题的解决,并培养其使用数学工具建立模型的思维方式。
·讲课时间为两个学期,第一学期讲授数理逻辑与集合论,第二学期讲授代数结构和图论。
考试内容限于书中的内容和难度,但讲课内容不限于书中的内容和难度。
二、数理逻辑发展史1. 目的·了解有关的背景,加深对计算机学科的全面了解,特别是理论方面的了解,而不限于将计算机看成是一门技术或工程性的学科。
·通过重要的历史事件,了解计算机科学中的一些基本思维方式和一些基本问题。
2. 数理逻辑的发展前期·前史时期——古典形式逻辑时期:亚里斯多德的直言三段论理论·初创时期——逻辑代数时期(17世纪末)·资本主义生产力大发展,自然科学取得了长足的进步,数学在认识自然、发展技术方面起到了相当重要的作用。
·人们希望使用数学的方法来研究思维,把思维过程转换为数学的计算。
·莱布尼兹(Leibniz, 1646~1716)完善三段论,提出了建立数理逻辑或者说理性演算的思想:·提出将推理的正确性化归于计算,这种演算能使人们的推理不依赖于对推理过程中的命题的含义内容的思考,将推理的规则变为演算的规则。
·使用一种符号语言来代替自然语言对演算进行描述,将符号的形式和其含义分开。
使得演算从很大程度上取决与符号的组合规律,而与其含义无关。
·布尔(G. Boole, 1815~1864)代数:将有关数学运算的研究的代数系统推广到逻辑领域,布尔代数既是一种代数系统,也是一种逻辑演算。
3. 数理逻辑的奠基时期·弗雷格(G. Frege, 1848~1925):《概念语言——一种按算术的公式语言构成的纯思维公式语言》(1879)的出版标志着数理逻辑的基础部分——命题演算和谓词演算的正式建立。
·皮亚诺(Giuseppe Peano, 1858~1932):《用一种新的方法陈述的算术原理》(1889)提出了自然数算术的一个公理系统。
·罗素(Bertrand Russell, 1872~1970):《数学原理》(与怀特黑合著,1910, 1912, 1913)从命题演算和谓词演算开始,然后通过一元和二元命题函项定义了类和关系的概念,建立了抽象的类演算和关系演算。
由此出发,在类型论的基础上用连续定义和证明的方式引出了数学(主要是算术)中的主要概念和定理。
·逻辑演算的发展:甘岑(G. Gentzen)的自然推理系统(Natural Deduction System),逻辑演算的元理论:公理的独立性、一致性、完全性等。
·各种各样的非经典逻辑的发展:路易斯(Lewis, 1883~1964)的模态逻辑,实质蕴涵怪论和严格蕴涵、相干逻辑等,卢卡西维茨的多值逻辑等。
4. 集合论的发展·看待无穷集合的两种观点:实无穷与潜无穷·康托尔(G. Cantor, 1845~1918):以实无穷的思想为指导,建立了朴素集合论·外延原则(集合由它的元素决定)和概括原则(每一性质产生一集合)。
·可数集和不可数集,确定无穷集合的本质在于集合本身能与其子集一一对应。
能与正整数集合对应的集合是可数的,否则是不可数的。
证明了有理数集是可数的,使用对角线法证明了实数集合是不可数的。
·超穷基数和超穷序数·朴素集合论的悖论:罗素悖论·公理集合论的建立:ZFC系统6. 第三次数学危机与逻辑主义、直觉主义与形式主义·集合论的悖论使得人们觉得数学产生了第三次危机,提出了数学的基础到底是什么这样的问题。
·罗素等的逻辑主义:数学的基础是逻辑,倡导一切数学可从逻辑符号推出,《数学原理》一书是他们这一思想的体现。
为解决悖论产生了逻辑类型论。
·布劳维尔(Brouwer, 1881~1966)的直觉主义:数学是心灵的构造,只承认可构造的数学,强调构造的能行性,与计算机科学有重要的联系。
坚持潜无穷,强调排中律不能用于无穷集合。
海丁(Heyting)的直觉主义逻辑。
·希尔伯特(D. Hilbert)的形式主义:公理化方法与形式化方法,元数学和证明论,提倡将逻辑演算和数学证明本身形式化,把用普通的语言传达的内容上的数学科学变为用数学符号和逻辑符号按一定法则排列的一堆公式。
为了消除悖论,要数学建立在公理化基础上,将各门数学形式化,构成形式系统,并证明其一致性,这是希尔伯特的数学纲领。
7. 数理逻辑的发展初期·哥德尔(Godel, 1906~1978)不完全性定理:一个足够强大的形式系统,如果是一致的则不是完全的,即有的判断在其中是不可证的,既不能断定其为假,也不能证明其为真。
·各种计算模型:哥德尔的递归函数理论,邱吉尔的 演算,图灵机模型·这些计算模型是计算机科学的理论基础,是计算机的理论模型。
三、预备知识1. 集合的基本概念·集合(set):集合是数学中最基本的概念之一,不能以更简单的概念来定义(define),只能给出它的描述(description)。
一些对象的整体就称为一个集合,这个整体的每个对象称为该集合的一个元素(member或element)。
·用大写字母A, B, C等表示集合,用小写字母a, b, c等表示集合的元素·a∈A表示:a是集合A的元素,或说a属于集合A·a∉A表示:a不是集合A的元素,或说a不属于集合A·集合中的元素是无序的,不重复的。
通常使用两种方法来给出一个集合:·列元素法:列出某集合的所有元素,如:·A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}表示所有小于10的自然数所构成的集合·B = {a, b, …, z} 表示所有小写英文字母所构成的集合·性质概括法:使用某个性质来概括集合中的元素,如:·A = { n | n 是小于10的自然数}·C = { n | n 是质数} 表示所有质数所构成的集合·集合由它的元素所决定,换句话说,两个集合A和B相等,记为A = B,如果A和B具有相同的元素,即a属于集合A当且仅当a属于集合B。
·子集(subset):说集合A是集合B的子集,记为A⊆B,如果a属于集合A则a也属于集合B。
因此A=B当且仅当A⊆B且B⊆A。
说集合A是集合B的真子集(proper subset),如果A⊆B且A不等于B(A ≠ B)。
·空集(empty set):约定存在一个没有任何元素的集合,称为空集,记为φ,有时也用{}来表示。
按子集的定义,空集是任何集合的子集(为什么?)。
·幂集(power set):集合A的幂集,记为P(A),是A的所有子集所构成的集合,即:·P(A) = { B | B ⊆ A }·例如,A = {0, 1},则P(A) = { {}, {0}, {1}, {0, 1} }·显然,对任意集合A,有φ∈ P(A)和A∈P(A)·补集(complement set):集合A的补集,记为A,是那些不属于集合A的元素所构成的集合,即A ={x| x∉A}。
通常来说,是在存在一个全集U的情况下讨论集合的补集。
全集U是所讨论的问题域中所有元素所构成的集合。
·集合的并(union):集合A和B的并A⋃B定义为:A⋃B = {x | x∈A或者x∈B},集合的并可推广到多个集合,设A1, A2, …, A n都是集合,它们的并定义为:A1⋃A2…⋃A n = {x | 存在某个i,使得x∈A i}·集合的交(intersection):集合A和B的并A⋂B定义为:A⋂B = {x | x∈A而且x∈B},集合的交也可推广到多个集合,设A1, A2, …, A n都是集合,它们的交定义为:A1⋃A2…⋃A n = {x | 对所有的i,都有x∈A i}·集合的差(difference):集合A和B的差A-B定义为:A-B = {x | x∈A而且x∉B}。
2. 关系和函数的基本概念·有序对(ordered pair):设A和B是两个集合,a∈A, b∈B是两个元素,a和b的有序对,记为<a, b>,定义为集合{{a}, {a, b}}。
·设<a1, b1>和<a2, b2>是两个有序对,可以证明<a1, b1> = <a2, b2>当且仅当a1 = a2且b1 = b2。
(如何证?)·有序对可推广到n个元素,设A1, A2, …, A n是集合,a1∈A1, a2∈A2, …, a n∈A n是元素,定义有序n元组(ordered n-tuple)<a1, a2, …, a n>为<<a1, a2, …, a n-1>, a n>,注意这是一个归纳(inductive)定义,将有序n元组的定义归结为有序n-1元组的定义。
·显然有<a1, a2, …, a n> = <b1, b2, …, b n>当且仅当a1 = b1且a2 = b2且…且a n = b n。
·集合的笛卡尔积(cartesian product):两个集合A和B的笛卡尔积A⨯B定义为:A⨯B = {<a, b> | a∈A且b∈B}·例如,设A = {a, b, c},B = {1, 2},则:A⨯B = {<a, 1>, <a, 2>, <b, 1>, <b, 2>, <c, 1>, <c, 2>}·笛卡尔积可推广到多个集合的情况,集合A1, A2, …, A n的笛卡尔积定义为:A1⨯A2⨯…⨯A n = {<a1, a2, …, a n> | a1∈A1且a2∈A2且…且a n∈A n}·集合之间的关系(relation):定义n个集合A1, A2, …, A n之间的一个n元关系R为集合A1, A2, …, A n的笛卡尔积A1⨯A2⨯…⨯A n的一个子集。