880 likes | 1.12k Views
Lecture Notes for DB. Book : 计算理论引论 by Michel Sipser Chapter 0 概念与语言 , 第 1 章 确定自动机 Prof : 唐常杰 TangChangjie@cs.scu.edu.cn Http://teacher.scu.edu.cn/~chjtang Students : MS in CS . 2003, SCU Style : Lecture / Seminar. 第 0 章 概念与语言 , 第 1 章 确定自动机.
E N D
Lecture Notes for DB Book :计算理论引论 by Michel Sipser Chapter0 概念与语言, 第 1章 确定自动机 Prof : 唐常杰 TangChangjie@cs.scu.edu.cn Http://teacher.scu.edu.cn/~chjtang Students : MS in CS . 2003, SCU Style : Lecture / Seminar
第 0章 概念与语言, 第 1章 确定自动机 • Outline for today • Chapter 0: (中文1章) • set notation and languages • Chapter 1: (中文2章) • deterministic finite automata (DFA)确定自动机 • nondeterministic FA (NFA)不确定自动机 • 教学方法:以教材为基础,适当补充,调整次序 • 讲课 : 讲思想、方法,难易 ,想得正确,直观,理解 • 写文章:要正规,形式化,严格,说得明白,写得清楚 • 笔记:可以记下幻灯篇页数(sp1-15),书页数(ep15,cp15) • 再记录心得,可少记一些
绿星表示此页有补充内容 第 0章 概念与语言, 第 1章 确定自动机 课程背景 可计算理论把 程序或算法 作不同级别的简化和抽象,抓出其特征,根据忽略和抽象的等级依次得到:
Standard Set Theory:集合论 传统,已经学过 只复习要点, ep.3-7 , cp. • Conditional: A = { x | x N , f(x)=0 } • Union: AB • Intersection: AB • Complement: • Cartesian Product: AB • Power set: P(A) 或 2A • (介绍记号的来源 |P (A)| = 2|A|)
Some Examples ep6. L<6 = { x | x N , x<6 } L<6 Lprime = {2,3,5} = {0,1} 字母表 = {(0,0), (0,1), (1,0), (1,1)} Formal: AB = { x | xA and xB}
Power set 幂集 Formal: P (A) = { S | S A} 一切子集的集合 Example: A = {x,y} P (A) = { {} , {x} , {y} , {x,y} } A={x1, x2,…,Xn}, 子集 编码 0,0,0.,0,0 0,0,0.,0,1 0,0,0.,1,0 1,1,1… 1 共2n个 Note the different sizes: |P (A)| = 2|A| 个数是幂,名称的来源 |AA| = |A|2
悖论 (补充) 可计算理论中用了许多证明技巧,对角线方法,哥德尔定理等,有必要补充 推理的正确性和避免悖论 的 两个相互矛盾的命题之合乎逻辑的相互推出 称为悖论。 由真(命题)可以合乎逻辑地推出假(命题)。这意味着逻辑不可靠。 罗素(B.Russell)悖论”。 集合可分为两类:一类以自身为元素,另一类则不以自身为元素。所有不以自身为元素的集合构成一个集合 称为“罗素集”。 问题:该集合是否以自身为元素? 有: 如果罗素集以自身为元素,则有罗素集不以自身为元素; 如果罗素集不以自身为元素,又有罗素集以自身为元素。
悖论 (补充) 可计算理论中用了许多证明技巧,对角线方法,哥德尔定理等,有必要补充 推理的正确性和避免悖论 的 两个相互矛盾的命题之合乎逻辑的相互推出 称为悖论。 由真(命题)可以合乎逻辑地推出假(命题)。这意味着逻辑不可靠。 罗素(B.Russell)悖论”。 集合可分为两类:一类以自身为元素,另一类则不以自身为元素。所有不以自身为元素的集合构成一个集合 称为“罗素集”。 问题:该集合是否以自身为元素? 有: 如果罗素集以自身为元素,则有罗素集不以自身为元素; 如果罗素集不以自身为元素,又有罗素集以自身为元素。
悖论实例 补充 说谎者悖论 : “本语句为假” 如果“本语句为假”为真,则有“本语句为假”为假; 如果“本语句为假”为假,则有“本语句为假”为真。 爱匹门尼德(Epimenides)悖论”。爱匹门尼德是公元前六世纪时古希腊的一位先知,居住于克里特岛上,他说过这样一句话:“克里特岛人都是说谎者。” “爱匹门尼德悖论”“悖”得还不够彻底,只“悖”了一半, 避免句子自我相关的悖论 A:句子B是真的。 B:句子A是假的。 表明,避免句子的自我相关 不足以消解“悖论”。 自引用是证明哥德尔定理,图灵机停机 问题的重要技巧,不是悖论
悖论实例 补充 说谎者悖论 : “本语句为假” 如果“本语句为假”为真,则有“本语句为假”为假; 如果“本语句为假”为假,则有“本语句为假”为真。 爱匹门尼德(Epimenides)悖论”。爱匹门尼德是公元前六世纪时古希腊的一位先知,居住于克里特岛上,他说过这样一句话:“克里特岛人都是说谎者。” “爱匹门尼德悖论”“悖”得还不够彻底,只“悖”了一半, 避免句子自我相关的悖论 A:句子B是真的。1010 B:句子A是假的。 表明,避免句子的自我相关 不足以消解“悖论”。 自引用是证明哥德尔定理,图灵机停机 问题的重要技巧,不是悖论
悖论实例 补充 说谎者悖论 : “本语句为假” 如果“本语句为假”为真,则有“本语句为假”为假; 如果“本语句为假”为假,则有“本语句为假”为真。 爱匹门尼德(Epimenides)悖论”。爱匹门尼德是公元前六世纪时古希腊的一位先知,居住于克里特岛上,他说过这样一句话:“克里特岛人都是说谎者。” “爱匹门尼德悖论”“悖”得还不够彻底,只“悖”了一半, 避免句子自我相关的悖论 A:句子B是真的。 B:句子A是假的。 表明,避免句子的自我相关 不足以消解“悖论”。 自引用是证明哥德尔定理,图灵机停机 问题的重要技巧,不是悖论
“说谎者”之所言 不是命题 而是多义句 不妨假设“本语句为假”是命题。 此时便有,“本语句为假”要么为真要么为假;并且,“说谎者悖论”的推理也因此而合乎逻辑。 如果“本语句为假”为真,则有“本语句为假”为假;亦即“本语句为假”既真且假,矛盾。 由反证法即有,“本语句为假”为假。 如果“本语句为假”为假,则有“本语句为假”为真;亦即“本语句为假”既真且假,矛盾。 由反证法即有,“本语句为假”为真。 综合以上两个子证明的结果即有,“本语句为假”既真且假,因而 不是命题 而是多义句。证毕。 两个貌似相互矛盾命题的多义句的不合逻辑的相互推出,不是真正意义上的悖论。
“说谎者”之所言 不是命题 而是多义句 不妨假设“本语句为假”是命题。 此时便有,“本语句为假”要么为真要么为假;并且,“说谎者悖论”的推理也因此而合乎逻辑。 如果“本语句为假”为真,则有“本语句为假”为假;亦即“本语句为假”既真且假,矛盾。 由反证法即有,“本语句为假”为假。 如果“本语句为假”为假,则有“本语句为假”为真;亦即“本语句为假”既真且假,矛盾。 由反证法即有,“本语句为假”为真。 综合以上两个子证明的结果即有,“本语句为假”既真且假,因而 不是命题 而是多义句。证毕。 两个貌似相互矛盾命题的多义句的不合逻辑的相互推出,不是真正意义上的悖论。
“说谎者”之所言 不是命题 而是多义句 不妨假设“本语句为假”是命题。 此时便有,“本语句为假”要么为真要么为假;并且,“说谎者悖论”的推理也因此而合乎逻辑。 如果“本语句为假”为真,则有“本语句为假”为假;亦即“本语句为假”既真且假,矛盾。 由反证法即有,“本语句为假”为假。 如果“本语句为假”为假,则有“本语句为假”为真;亦即“本语句为假”既真且假,矛盾。 由反证法即有,“本语句为假”为真。 综合以上两个子证明的结果即有,“本语句为假”既真且假,因而 不是命题 而是多义句。证毕。 两个貌似相互矛盾命题的多义句的不合逻辑的相互推出,不是真正意义上的悖论。
理发匠定理 罗素悖论”有两个通俗化的“版本”——“理发匠悖论”和“目录悖论”, “理发匠悖论”是罗素本人为使“罗素悖论”更易于理解提出的,是后者的通俗版。萨尔维村有这样一位理发匠,他是本村的男人,并且给且只给该村所有不给自己刮胡子的男人刮胡子。现在的问题是,这位理发匠是否给自己刮胡子?显然,如果他给自己刮胡子,他就不给自己刮胡子;如果他不给自己刮胡子,他就给自己刮胡子。 “悖论”。
理发匠定理 罗素悖论”有两个通俗化的“版本”——“理发匠悖论”和“目录悖论”, “理发匠悖论”是罗素本人为使“罗素悖论”更易于理解提出的,是后者的通俗版。萨尔维村有这样一位理发匠,他是本村的男人,并且给且只给该村所有不给自己刮胡子的男人刮胡子。现在的问题是,这位理发匠是否给自己刮胡子?显然,如果他给自己刮胡子,他就不给自己刮胡子;如果他不给自己刮胡子,他就给自己刮胡子。 “悖论”。
目录悖论 目录悖论”是“罗素悖论”的另一变种,由瑞士数学家贡赛斯(Gonseth)提出。 所有可能的目录可分为两大类: 一类是未收入自身的目录,在这样的目录中查不到关于它自身的条目, 另一类则是收入自身的目录。所有未收入自身的目录有一个总目录,这个总目录既然也是目录,便有个是否收入自身的问题。显然,如果该总目录未收入自身,它便收入了自身;如果它收入了自身,则又未收入自身。 在推理中,要严格定义,严格推理,避免偷换概念,避免悖论。
目录悖论 目录悖论”是“罗素悖论”的另一变种,由瑞士数学家贡赛斯(Gonseth)提出。 所有可能的目录可分为两大类: 一类是未收入自身的目录,在这样的目录中查不到关于它自身的条目, 另一类则是收入自身的目录。所有未收入自身的目录有一个总目录,这个总目录既然也是目录,便有个是否收入自身的问题。显然,如果该总目录未收入自身,它便收入了自身;如果它收入了自身,则又未收入自身。 在推理中,要严格定义,严格推理,避免偷换概念,避免悖论。
Languages 语言,字词的集合 ep.42,cp.25 • Given an alphabet , we can make a word or string by concatenating the letters of . 字母表 • Concatenation of “x” and “y” is “xy” 字母的链接 • Typical example: ={0,1}, the possible words over are the finite bit strings. 01位串为单词 • A language is a set of words. 语言,字词的集合 • 定义: • 设 是字母表, 则称2的子集A为上的语言。
More about Languages • The empty string is the unique string with zero length. • Concatenation of two langauges: A•B = { xy | xA and yB } • 两个语言的链接 : 字集之链 = 链字之集 • Typical examples: L = { x | x is a bit string with two zeros } L = { anbn | n N } L = {1n | n is prime} 每个词是素数个1链成
A Word of Warning 注意 Do not confuse the concatenation of languages with the Cartesian product of sets. 语语连接 != 迪卡积 For example, let A = {0,00} then A•A = { 00, 000, 0000 } with |A•A|=3, 连接 一维 AA = { (0,0), (0,00), (00,0), (00,00) } 叉乘 二维 with |AA|=4
自动机的直观概念 火车车次表 207 208 189 190 成都 重庆 昆明 贵阳
自动机直观概念 电子手表 上4个键 {a,b,c,d}有若干个状态,用自动机表示操作过程,比较简单,比现行说明书好用。 可用自动机表达的日常设备:(作为练习题目) 录音机上的键和状态转换 , , . 菜单驱动的多层菜单 电视机遥控 实质:现状+输入 下一状态 书上 cp19, 用超市自动门说明,自学。
Recognizing Languages 识别语言 cp22 • Let L be a language S • 自动机识别语言的直观描述(后面有形式化定义)用有限描述无限。 • : 入语言, 出判定(Y:N) • a machine M recognizes L if “accept” if and only if xL xS M “reject” if and only if xL
Finite Automaton 有限自动机ep.55,cp.34 The most simple machine that is not just a finite list of words. 最简:有限个词的集合 “Read once”, “no write” procedure. 只读,不写,,无内存,无变量,无数组,无堆栈 ,无推理,无想象力 Typical is its limited memory. 内存有限, 只有寄存器,能记住状态(窍门:造自动机时遇到困难加状态,等于是加寄存器扩大了记忆力) Think cell-phone, elevator door, etc. 简单例子,火车线路图,电梯, 录音机, 电子表 状态和按扭
Finite Automaton 有限自动机ep.55,cp.34 The most simple machine that is not just a finite list of words. 最简:有限个词的集合 “Read once”, “no write” procedure. 只读,不写,,无内存,无变量,无数组,无堆栈 ,无推理,无想象力 Typical is its limited memory. 内存有限, 只有寄存器,能记住状态(窍门:造自动机时遇到困难加状态,等于是加寄存器扩大了记忆力),状态相当于标号,goto,增加标号相当与增加语句和转向语句 Think cell-phone, elevator door, etc. 简单例子,火车线路图,电梯, 录音机, 电子表 状态和按扭
Finite Automaton 有限自动机ep.55,cp.34 The most simple machine that is not just a finite list of words. 最简:有限个词的集合 “Read once”, “no write” procedure. 只读,不写,,无内存,无变量,无数组,无堆栈 ,无推理,无想象力 Typical is its limited memory. 内存有限, 只有寄存器,能记住状态(窍门:造自动机时遇到困难加状态,等于是加寄存器扩大了记忆力) Think cell-phone, elevator door, etc. 简单例子,火车线路图,电梯, 录音机, 电子表 状态和按扭
States状态 transition rules 变换规则 0 1 1 0 q1 q2 q3 0,1 始态starting state accepting state 受态,粗圈或双线圈 A Simple Automaton (0) ep34, cp20 cp22
0 1 1 0 q1 q2 q3 start 0,1 accept A Simple Automaton (1) cp22 非接受态 理解为依次按两个按按扭后电子表的状态错误 on input “0110”, the machine goes: q1 q1 q2 q2 q3 = “reject”
0 1 1 0 q1 q2 q3 start 0,1 accept A Simple Automaton (1) cp22 非接受态 理解为依次按两个按按扭后电子表的状态错误 on input “0110”, the machine goes: q1 q1 q2 q2 q3 = “reject”
0 1 1 0 q1 q2 q3 0,1 on input “101”, the machine goes: A Simple Automaton (2) ep34 cp22 q1 q2 q3 q2 = “accept”
0 1 1 0 q1 q2 q3 0,1 A Simple Automaton (3) cp22 010: reject 11: accept 010100100100100: accept 010000010010: reject : reject
0 1 1 0 q1 q2 q3 0,1 用C语言描述FA Char *input ,*pCurr //全局量 Bool FA_func( ) { start: q1:if (*pCurr==0) goto q1; else if (*pCurr==1) goto q2; q2: if (*pCurr==0) goto q3; else if (*pCurr==1) goto q2 q3: if (*pCurr==0 || *pCurr==1) goto q2; } 自动机对应于只有if,goto,无数组,无内部变量的程序, 程序不如图形直观,程序容易使用超标的资源(内存,栈,数组等)状态相当于goto 标号
0 1 1 0 q1 q2 q3 0,1 用C语言描述FA Char *input ,*pCurr //全局量 Bool FA_func( ) { start: q1:if (*pCurr==0) goto q1; else if (*pCurr==1) goto q2; q2: if (*pCurr==0) goto q3; else if (*pCurr==1) goto q2 q3: if (*pCurr==0 || *pCurr==1) goto q2; } 自动机对应于只有if,goto,无数组,无内部变量的程序, 程序不如图形直观,程序容易使用超标的资源(内存,栈,数组等)
A Simple Automaton (3) 用C语言描述 对不熟悉C语言的读者,FA更直观, 对熟悉C语言的读者,C语言解释自动机更简单(查旧则可知新,人们总是用熟悉的知识解释新的知识) 注意一点,不要超标用资源, 只能用 if goto 不能用数组,变量,只能用状态作记忆 在后面的推理中,SCU教案将广泛用C语言表示自动机、下推机、图灵机。
A Simple Automaton (3) 用C语言描述 对不熟悉C语言的读者,FA更直观, 对熟悉C语言的读者,C语言解释自动机更简单(查旧则可知新,人们总是用熟悉的知识解释新的知识) 注意一点,不要超标用资源, 只能用 if goto(状态) 不能用数组,变量,只能用状态作记忆 在后面的推理中,SCU教案将广泛用C语言表示自动机、下推机、图灵机。
自动机的背景 在词法分析中是如何用的 • 造一个C语言,Basic ,DOS解释器,HBASE解释器 • 语法分析器, • 先把拟实现的语句设计好,例如 • List Field A1,A1 for age>5 to printer • Display [All] field for …. To … • Index On Name to Name.NDX • 抽象 找规律 ,巴克斯范式,状态转换函数的变形 • 命令行=动词[user_str][介词短语]* • 动词=List|Display|Index • 介词短语=介词[表达式|UserStr] • 介词短语=for|on|to|field • UserStr=[a-z,A-Z,_][a-z,A-Z|0-9]*
自动机的背景 在词法分析中是如何用的 • 造一个C语言,Basic ,DOS解释器,HBASE解释器 • 语法分析器, • 先把拟实现的语句设计好,例如 • List Field A1,A1 for age>5 to printer • Display [All] field for …. To … • Index On Name to Name.NDX • 抽象 找规律 ,巴克斯范式,状态转换函数的变形 • 命令行=动词[user_str][介词短语]* • 动词=List|Display|Index • 介词短语=介词[表达式|UserStr] • 介词短语=for|on|to|field • UserStr=[a-z,A-Z,_][a-z,A-Z|0-9]*
自动机的背景 在词法分析中是如何用的 范式的每行对应一系列 状态转换 (自动机) 如 第一句 命令行=动词[user_str][介词短语]* 初始状态 —如首词不是动词进入出错状态 否则动词分析状态 动词分析状态如动词出错user_str分析状态 OK 介词短语分析状态 ….. 60年代,手工分析巴克斯范式,画出自动机,然后写成case, if goto语句, 能否让机器来做?能。 软件PaserGenerater 处理Alex.exe 词法分析器,AYacc.exe 词法分析器
用软件PaserGenerater 处理 • 含Alex.exe 词法分析器,AYacc.exe 词法分析器 • 先写一个说明巴克斯范式的文件 HbaseSyntax.Y • HbaseSyntax. YACC处理{HSyntax.Y,HSyntax.H, HSyntax.V} • 例子HSyntax.Y, • %{#include<ctype.h> • #include <stdio.h> • }% • %% • Lines: verv userstr {simle.cmd( ); } • | verb ‘\n’ {simle.cmd( ); } • | Verb Prop_phrase * {simle.cmd( ); } • · error ‘\n’ 命令行 响应函数的语义处理
例子HbaseSyntax.Y, Verb: List { do_list( );} |Display { do_display( );} |Index {do_index( ) ; } Prop_phase: Prop UserStr { Null} Prop: For {do_for( );} |to {null (); } |On {…..} %% …. 响应函数的语义处理
运行命令 Yacc.exe HSyntax.Y HSyntax.c HSyntax.H • 产生 HSyntax.c 如下 • #include <ctype.h> • ……. 不好理解,后面说 • 要说明 • List for HBase.EXE ---caxp查询结果或错误号 • 下面讲 HSyntax.V
HSyntax.V • 第一部分,重复巴克斯范式,称为与法规者 • 如 Lines: verv userstr {simle.cmd( ); },….. • 第二部分 状态转换(case ,标号 和 goto语句 自动机在这里) • State : 1 • $accept : ,lines $end • lines: .(3) • lines: goto 2 • State :1 • liness error • State:2 … • State:3 …. • 10 tokens, 5 nonterminal , 11| grammar rules 30 states • 更多的细节参考有关书籍 状态转换(自动机) 总结
Finite Automaton (def.) 有限自动机定义 cp21 • A deterministic finite automaton (DFA) M is defined by a 5-tuple M=(Q,,,q0,F) • Q: finite set of states 状态集 • : finite alphabet 字母表 • : transition function :QQ 转换函数 • q0Q: start state 始态 • FQ: set of accepting states 受态 • 介绍集中定义方法;元组式,递归式, • Let 式 Let, It is said to be …. If …….
Finite Automaton (def.) 有限自动机定义 cp21 • A deterministic finite automaton (DFA) M is defined by a 5-tuple M=(Q,,,q0,F) • Q: finite set of states 状态集 • : finite alphabet 字母表 • : transition function :QQ 转换函数 • q0Q: start state始态 • FQ: set of accepting states受态 • 介绍集中定义方法;元组式,递归式, • Let 式 Let, It is said to be …. If …….
0 1 1 0 q1 q2 q3 0,1 M = (Q,,,q,F) ep36 cp22 states Q = {q1,q2,q3} alphabet = {0,1} start state q1 accept states F={q2} transition function: 转换函数用矩阵
Recognizing Languages (def) 识别语言 cp21 FA的定义(元组式定义法) A Finite Automaton M = (Q,,,q,F)accepts a string/word w = w1…wn if and only if there is a sequence r0…rn of states in Q such that: 1) r0 = q0 起态 2) (ri,wi+1) = ri+1 for all i = 0,…,n–1 3) rn F 按图
Regular Languages 正规语言,3型语言 被FA接受的语言 cp24 The language recognized by a finiteautomaton M is denoted by L(M). A regular language is a language for which there exists a recognizing finite automaton.
Two DFA Questions 确定 有限 自动机 问题: 给机(图形,有限描述),找语(符号集合) : Given the description of a finite automaton M = (Q,,,q,F), what is the language L(M) that it recognizes? 问题 :给机,找语言族: In general, what kind of languages can be recognized by finite automata? (What are the regular languages?) 应用技巧1:语言L1找机 M1, 语言L2找机M2,两机合成 h(M1,M2)=M3, M3识别L3, 从而证明L3也是正规语言 合成可以是连接、并 、星运算 思想类似 xlog(x), ylog(y),log(x)+log(y)= log(x*y),然后求出 x*y 技巧2造自动机时,遇到困难加状态,等于是加寄存器 扩大了记忆力)
Two DFA Questions 确定 有限 自动机 问题: 给机(图形,有限描述),找语(符号集合) : Given the description of a finite automaton M = (Q,,,q,F), what is the language L(M) that it recognizes? 问题 :给机,找语言族: In general, what kind of languages can be recognized by finite automata? (What are the regular languages?) 应用技巧1:语言L1找机 M1, 语言L2找机M2,两机合成 h(M1,M2)=M3, M3识别L3, 从而证明L3也是正规语言 合成可以是连接、并 、星运算 思想类似 xlog(x), ylog(y),log(x)+log(y)= log(x*y),然后求出 x*y 技巧2造自动机时,遇到困难加状态,等于是加寄存器 扩大了记忆力)