INT201 决策,计算,语言 笔记

一个形式文法的中文统概PPT

文章目录

week1

介绍课程,如何描述并分析一种语言(自然语言natural languages和编程语言programming languages)

提到了编程中的编译Compilation的步骤:

  1. lexical analysis 词法分析
  2. parsing 解析
  3. code generation 代码生成
  4. code optimisation 代码优化

然后给了个用字母和符号分析语言的定义
在这里插入图片描述
假设A包含了一个语言的所有元素,A* 代表这个语言元素的任意排列组合,那么说由字母集A生成的形式语言是A* 的子集。

L1L2为对应子元素的两两组合的集
L* 为一个集里的元素的任意组合
在这里插入图片描述

Deterministic Finite Automata确定有限状态机:

用于词法分析,模型检测
从左到右扫描字符串,为字符串匹配模式,符合模式则就会被接受
(感觉就是状态转移,从一个状态转换到另外一个状态)
在这里插入图片描述

DFA适用的对象:

  1. 任意有限长的字符串
  2. 任意无限长的有限字符串组成的列表

DFA适用的匹配模式:
如:保证某个字符出现次数不多于几次;保证字符串长度不超过多少;保证字符b永远出现在字符a后

DFA不适用的匹配模式:
如:字符串列表中a开头的字符串数量多于b开头的字符串;字符串回文;有意义的算数表达式

DFA组成

  1. Q:自动机的状态,到目前为止读取过的字符串的前缀信息的状态表示
  2. A:所有可以输入到自动机里的字母表
  3. φ:状态转移方程(Q x A -> Q),通过输入的字母可以在根据状态转移方程转换状态
  4. i:Q的成员之一,称为初始状态initial state
  5. T:Q的非空子集,称为终端态(terminal)或接受态(accepting states),如果字符串扫描结束后来到这个状态,则字符串是相关语言的成员之一(符合模式)。

举个栗子,这里字母表为a1,a2…an,每行给出了状态间是如何变化的,从初始状态i开始,如果按照a1,a2…an的顺序输入,自动机最后将会是qn
在这里插入图片描述
以上是针对语言A而言的状态转移,如果想要扩展到对整个元素集A* 的定义(也就是满足传递闭包):

在这里插入图片描述

由DFA定义语言:

A word w ∈ A is said to be accepted or recognised by A if φ(i, w) ∈ T,
otherwise it is said to be rejected. The set of all words accepted by A is called the language accepted by A and will be denoted by L(A).
Thus L(A) = {w ∈ A: φ(i, w) ∈ T}.

转换图的例子:
右下角的出口箭头和同心圆(concentric circles)都表示终端态
这里110100为一个完整的字符串,我们的判断是扫描完整个字符串时自动机处在终端态说明符合模式,所以中间多次处于t状态而没有结束。
在这里插入图片描述
用符号表示(notation)来看上面这个转换图
在这里插入图片描述
这么来看自动机就是根据上一次的状态和这一次扫描的字符,来得到这一次的状态。

简化自动机

如果简化自动机,将不能达到最终态的途径状态去掉,只考虑根据当前状态和这一次扫描的字符能否达到最终态,如果不能就拒绝,这里描述为undefined未定义。
If φ is a partial function (not defined for some state/letter pairs), then the DFA rejects an input if it ever encounters such a pair.:

偏函数partial function:如果你想定义一个函数,而让它只接受和处理其参数定义域范围内的子集,对于这个参数范围外的参数则抛出异常,这样的函数就是偏函数(顾名思异就是这个函数只处理传入来的部分参数)
在这里插入图片描述
简化自动机的图形表示:
在这里插入图片描述

左:描述了所有可能情况的自动机,a DFA that uses a total transition function。
右:将所有未定义转换都返回拒绝的自动机,a DFA that any undefined transition leads to a rejection。
以上两者都可以互相转化

构建可识别特定字符串的DFA

(有点像dp
在这里插入图片描述
练习:
在这里插入图片描述
L1:
在这里插入图片描述

L2:

在这里插入图片描述

L3:
在这里插入图片描述

week2

Nondeterministic Finite Automata (NFA)非确定有限状态机

不同于DFA对于同一个输入和同一个状态只有一个转移,NFA对于同一输入和同一状态可以有多个或零个转移,使得结构更紧凑。

NFA组成

  1. Q:自动机的状态,有限非空集
  2. A:所有可以输入到自动机里的字母表(alphabet),有限非空集
  3. φ:状态转移方程(Q x A ->P(Q) ),通过输入的字母可以根据状态转移方程转换到一种状态
  4. i:Q的成员之一,称为初始状态initial state
  5. T:Q的非空子集,称为终端态(terminal)或接受态(accepting states)。

扩展到A*:
在这里插入图片描述
符号表示:
在DFA中,状态转移是一对一的:
在这里插入图片描述
NFA中,状态转移以集合的形式体现(有点像BFS,只要字符串扫描结束后的状态集合中有接受态,则字符串被接受
与DFA图表示的不是同一转换
在这里插入图片描述

NFA状态转移的例子:
在这里插入图片描述
DFA是一种NFA的约束形式,DFA进行转换的结果集的大小被约束为1或0,因此,DFA接受的语言都被NFA接受

如何证明NFA接受的语言都被DFA接受:
在这里插入图片描述
NFA的优点:
相对于等价的DFA,NFA需要更少的状态(尽管它需要更多的时间去检索…,时间换空间了属于是
例子:
A: alphabet={0,1,2,3…9}
L代表所有未包含任一数字或未包含更多数字的整数

使用NFA表示:
在这里插入图片描述
如果使用DFA表示,那么则需要210个状态:
在这里插入图片描述

NFA转DFA:
子集构造法
NFA的状态经过了压缩,所以所有NFA状态的排列组合包含了等价的DFA的所有可能状态,由初始态开始,随着接受输入之后状态的变化,逐渐可推导至等价的DFA的所有状态
在这里插入图片描述

week3

Regular Expressions 正则表达式

三个操作符:Union,concatenation,closure

  1. Union 并集
    将两个集合的元素放进一个集合中,每个元素只出现一次
    {ε, cat, dog, mouse} ∪ {cat, cats} → {ε, cat, cats, dog, mouse}
  2. Concatenation 组合
    将第一个集合的元素后缀添加与第二个集合的元素组合
    {over, under}{cooked, state, rate}→{overcooked, undercooked, overstate, understate, overrate, underrate}
  3. Closure 闭包
    将集合内的元素任意顺序组合后的集合,从0次开始,所以包含ε空集
    ({cat, dog})→{cat, dog}*→ {ε, cat, dog, catcat, catdog, dogcat, dogdog, catcatcat, catcatdog, catdogcat, …}
    a({cat, dog})→a{cat, dog}*→ {a, acat, adog, acatcat, acatdog, adogcat, adogdog, acatcatcat, acatcatdog, acatdogcat, …}

更多衍生表达:
假设E为一个RE表达式

  1. (E)n表示符合E的n个元素自由组合
  2. (E)+表示将符合E的元素按照任意顺序组合,从1次开始,不包含ε

由正则表达的语言叫做Regular Language

正则相比DFA更加适用语言表达的情况:

Alphabet A = {0, 1, 2, . . . , 9}
将L定义为由数字集合A组成至少一个阿拉伯数字出现了偶数次 的字符串,(未出现的数字记为0次,所以0123456789是最短的不符合L的数字)
现要使用正则表达不在L之内的数字字符串的集合,
{ {1, 2, . . . , 9}0{1, 2, . . . , 9}0{1, 2, . . . , 9} } ∪ {1, 2, . . . , 9} 定义了所有偶数个0的字符串
以此类推可以定义所有偶数个1,2,3…9的字符串,将他们求并集取反即可。

如果使用DFA表达,则需要210个状态去记录每个阿拉伯数字的奇偶出现次数

DFA相比正则更加适用语言表达的情况:

Alphabet A = {0, 1, 2, . . . , 9}
将L定义为 由数字集合A组成各位相加为十的倍数
部分转移,基本上就是mod10后的十种状态互相转移
在这里插入图片描述
Tips:

  1. any formal language is a well-defined set of words over some given alphabet.
  2. A regular language is one that is given by some regular expression or accepted by some DFA (or NFA)
  3. A regular language will have many different but equivalent DFAs or reg exprs that represent it.

性质:
在这里插入图片描述

证明: (R * ) * =R * :

  1. suppose w∈(R * ) *,then w=w1,w2…wn , for wi∈R *
    再将wi展开,wi = wi,1wi,2 . . . wi,n(i) ,for wi,j ∈ R
    Hence,w is a concatenation of words that belong to R, so w∈ R *

  2. suppose w∈R * ,由于闭包(R * ) * 包含所有由R * 组成的语言,所以 w∈(R * ) *

Tips:
关于+号的说明,貌似{a+b}={a,b}
课上的例子:
在这里插入图片描述
在这里插入图片描述

week4

Chomsky hierarchy乔姆斯基分层:
在这里插入图片描述

正则语言的两个特性

Kleene’s theorem:Regular languages are those languages that can be accepted by finite automata.

之前已经见过了任意NFA会有一个等价的DFA,所以当我们谈论可被有限自动机处理的语言时,不需要再区分DFA和NFA。因此:证明Kleene定理只需证明NFA转正则和正则转NFA

这篇先证正则转NFA

回顾RE正则的定义,为了证明RE拥有等价NFA:

  1. 构建只接受一个字母的NFA
  2. 由两个NFA表示concatenation的组合
  3. 由两个NFA表示union集合
  4. 由一个单独的NFA表示它的closure闭包

证明之前回顾下符号意义
在这里插入图片描述

Claim 1:

让L1,L2为字母集A上的语言,如果有一有限自动机能够接受L1,L2,那么就有一个有限自动机L1L2
例子:
在这里插入图片描述
证明:

在这里插入图片描述

Claim 2:

让L1,L2为字母集A上的语言,如果有有限自动机接受L1和L2,那么则有有限自动机接受L1 ∪ L2

例子: 继续用上面那个实例化例子:
如何求{aa,aaa}和b{a*)的并集表示,将前者和后者的所有状态进行组合

  1. 找初始状态,前者的初始点和后者的初始点的组合记为并集的初始状态
  2. 找接受态,前者的接受态和后者的接受态的组合记为并集的接受态
  3. 找中间态的转移,从初始态开始遍历各个字符输入后的状态转移(图片中为部分例子
    在这里插入图片描述

证明:
在这里插入图片描述

现在已经能够用这两个方法构建一个接受任意有限语言的有限自动机

Claim 3:

如果语言L被一些有限自动机接受,那么语言L*也被接受
在这里插入图片描述

Tips:

  1. 并集的结构可以修改,从而变成交集的表示(二者并改成二者交)
  2. 还可以对称差分symmetric difference或复杂的多种语言的布尔组合(eg: given 4 languages L1, L2, L3, L4, define a new language Lnew as w ∈ Lnew iff w ∈ exactly 2 of L1, L2, L3, L4.)

下一步就是从有限状态机转等价RE

week5

目标 :

Given a DFA M = (Q,A, φ, i, T). Construct a regular expression for L(M)

继续证明从DFA可以转RE M→L(M)

  1. 最简单的情况,M没有状态转换 (图像表示就是边) 可以到达接受态accepting state
    此时等价RE为空
    在这里插入图片描述

  2. M存在状态转换到接受态

    1. M可以到多个接受态 q1,q2…qk
      那么L(M)就是将每个接受态分离后 L(Mk) 取并集
    2. 接下来讨论M只有一个接受态 t
      1. 初始态与接受态相同
        解决初始态和接受态所在状态的闭包:将初始态和接受态分离,原本一个状态圆圈分成两个,初始态只出不进
        在这里插入图片描述
      2. 接下来讨论M初始态与接受态不同 i, t
        1. 存在状态转移转移到初始态
          M‘ 解决初始态所在状态的闭包:将原本的接受态变更为普通状态,将原本的初始态追加接受态
          M’‘ 用于表示仅一次 i→t 的RE:将指向初始态的转移们删除
          在这里插入图片描述
        2. 不存在状态转移转移到初始态
          此时初始态有多个转移i→j1, j2 …将这些转移分离为多个子DFA取RE然后取并集
          每个子DFA以 j? 为初始态,此时 i 被分离出了DFA,称为RE的前缀
          在这里插入图片描述

通过以上算法,可以将一个DFA以递归的形式简化成多个更简化的DFA的组合,通过并集的方式变成RE表达式

为了使算法有结果,我们需要确认:

  1. L(M)与递归后DFA的组合表达的语言相同
  2. 算法最终会终止,而不是无限下去

第一点显然,下面证第二点
如何定义算法中的更简simpler,4 rules:

  1. If M1 and M2 have differing numbers of transitions, the one with the smaller number is simpler.
  2. Failing that, the one with the smaller number of accepting states is simpler.
  3. Failing that, If one (but not both) of M1, M2 has no transitions to initial state(没有指向初始态的变换), that one is simpler.
  4. If one (but not both) of M1, M2 has initial state accepting(初始态为接受态), the other one is simpler.

知道定义以后,需要证明当 DFA简化过程 为 M1→M2→M3…( Mi is simpler than Mi−1) 时,这个序列长度有穷的,即可证明算法递归深度有穷

证明如下 ( 在Mi-1到Mi的转换中,rule1次数被状态转移数量限制,rule2次数被状态数量限制,rule3和rule4次数最多一次)
Proof. Let N be the number of transitions in M1.
Going from Mi to Mi+1, rule 1 can only be used ≤ N times.
Let Mk be the machine we reach after the final usage of rule 1 in the sequence.
Let N ’ be the number of states of Mk .
Now rule 2 can only be used ≤ N ’ times. In between each usage of rule 2, rules 3 and 4 can only be used once.
Conclude the sequence is indeed finite.

使用更少的状态表示同一个DFA

有时候RE转DFA之后过于巨大,这时候就需要简化simplify DFA了,也就是删除,改变一些没法到达的或多余的状态。

If a DFA has no inaccessible states, and no indistinguishable states, then it has a minimal number of states

删除没法到达的状态

如图,下图左侧DFA与右侧DFA等价,但左侧有个状态无法访问 inaccessible。
在这里插入图片描述
从初始状态开始,通过BFS即可知道所有可以到达的状态,除此之外的状态就是不可到达的
在这里插入图片描述
证明这个方法找到的都是可到达的,以及可到达的都能被这个算法找到
在这里插入图片描述

改变多余的状态

如图,上面DFA和下面DFA表达相同,但下面将两个等价的状态合并了
在这里插入图片描述

什么是 Indistinguishable states不可区分状态, 等价状态
Two states are indistinguishable if the set of words labelling accepting paths from one state is the same as the set of words labelling accepting paths from the other state.
如果某两个状态到接受态的接受字符集相同,则这两个状态等价。

When we have two indistinguishable states, you can remove one and direct its arcs to/from the other.
如果有两个状态distinguish,则可将其中之一移除,将指向它的转移指向与之等价的状态。

  • 下面证明:If a DFA has no inaccessible states, and no indistinguishable states, then it has a minimal number of states
    M‘状态减少,那么必有原先M中分散的状态a,b在M’中合并在了一起c,由于M的状态间不等价,那么a和b之后可接受的字符集肯定是不一样的。而M‘中的状态c只有一种可接受字符集,无法区分这种差异,所以不存在M’
    在这里插入图片描述

如何找这些不可区分状态
“Heuristic” analysis启发式分析
圆圈为状态,L10在左下角
在这里插入图片描述

用RE表达状态之后的可接受字符集(拼接),可发现有些状态的可接受字符集是一样的,这些状态等价。

一般方法

Start with two equivalence classes, (T and Q \ T)
划分簇:
Repeatedly subdivide as follows:
··For each equivalence class, separate any pair of states for which some letter of the alphabet labels transitions to distinct equivalence classes.
We may stop when this process gives no more subdivisions.

依旧是启发式分析里面的例子,先分成两组(非接受态组和接受态组),然后分析经过a,b,c转移后移向哪一组,把与组内别的转换结果不同的切割。
直到最后所有组内的转移结果都是相同的,组之间都是可以区分的。

在这里插入图片描述
最后发现快乐一家里面3和4等价,6和7等价
在这里插入图片描述

week6

对于DFA而言,是无法接受形如“anbn中字符a出现的次数和字符b出现的次数一样”的语言的。
其原因是DFA的状态是有限的,意味着DFA只能缓存有限的计数,面对可能的无限长的输入,没法列出全部的状态。

The Pumping Lemma泵引理

给出了DFA可以识别的语言的属性,这同证明了这种语言属于regular language。顺便还可得知DFA不能识别的语言

理解前需要注意一点:初始态也是个状态,一个有N个状态的DFA,如果不包含循环的话,最多可接受长度为N-1的单词,当单词长度≥N,意味着出现状态重复,下面引理的前提条件是|z|≥N,意味着泵引理讨论的自动机都是含有重复状态(有循环部分的),那些无循环的自动机, 例如接受单词“abc”的DFA,加上初始态其实是有4个状态,单词长度3小于状态数4 不作讨论。

Let L be a language which is accepted by some Deterministic Finite Automaton with N states. Then every word z ∈ L with |z| ≥ N can be written in the form z = uvw for some u, v, w ∈ A with

  1. v ≠ ε
  2. |uv|≤N
  3. uvnw∈L for n=1,2,3…

以上,任意一个被N个状态的DFA接受的长度大于等于N的单词都可以划分为三个部分,v部分长度大于0,uv部分长度小于等于N,v代表可循环部分。

大概证明:将一个长度大于N的单词输入,那么必有几个状态被经过了多次(鸽巢原理),且每次循环结束都会回到同一状态。既然这些状态可以经过多次,那么这些状态就可以被重复任意多次并且能保持单词仍被接受,(这部分被称为v部分

将字符串从左到右转移过的状态按顺序连接起来得到接受路径:
在这里插入图片描述
In particular a word w is accepted by an automaton if and only if there is a path from the initial state to a terminal state with label w (which we call an accepting path接受路径)

泵引理的证明

在这里插入图片描述
利用这个引理证明的过程都是反证,
下面证明DFA不能接受字符数≥2的回文字符串:主要是通过前提设置字符串长度大于2N+3(泵引理要求可以接受任意长度≥N的字符串),uv部分长度小于N的约束,得到uv部分只能是重复的a,进而约束得知v部分只有重复的a,单侧的a不断重复使得不是回文来违背第三点。
在这里插入图片描述

全是例子:
在这里插入图片描述
在这里插入图片描述
有时候光靠泵原理并不能找出所有不被DFA接受的语言:
在这里插入图片描述

正则语言的闭包 Closure Properties of Regular languages

Closure properties express the idea that when one (several) languages are regular, then certain language obtained by some operation is also regular. Then we say, regular languages are closed under the operation.

To prove a language L, is not regular, we can find a regular language L’ and operate it using (Union, difference, etc…) with L, if the resulted language is not regular, then L is not regular.

正则语言的判断
  1. Is the language described (by DFA, NFA, R.E) empty?
  2. Is a particular string w in the described (by DFA, NFA, R.E) language?
  3. Do two descriptions of a language actually describe the same language? This question is often called “equivalence” of languages.

week8 上下文无关文法 和 正则文法

  • 文法(grammer): 通过文法可以规范化的表达某种语言
  • 正则文法(Regular grammar): 可以表示一种正则语言(等同于可以表达正则表达式和自动机)
  • 上下文无关文法(context-free grammar)
    A context-free grammar (CFG)is a very important concept;
    languages representable using CFGs are called context-free languages (CFLs).
    All regular languages are CFLs, and so also are various other languages such as palindromes.
    对于任意的 A ∈ V,如果有产生式 A→B,无论 A 出现在什么位置,都可以通过将 A 替换成 B,而无需考虑 A 的上下文
    “context-free”: rules allow symbols to be replaced no matter where those symbols occur in a string.
    “context-sensitive”: rules allow replacement to occur in certain “contexts” of surrounding symbols

Tips:上下文敏感文法(Context-sensitive grammar)和无约束文法(Unrestricted grammar)可以表示比CFLs更多的语言,但是辨认一个单词是否属于该语言会变得困难

正如正则语言可以用有限自动机表示一样,CFLs可以用下推自动机(pushdown automata)表示

什么是Parsing(语法解析):
Parsing is the process of of checking that a sequence of symbols is generated by a context-free grammar

Context-free Grammars

CFG包括:

  1. 字符集alphabet A
  2. 终结符variables集合 V (V ∩ A = ∅)
  3. 开始标志start symbol S∈ V
  4. 产生式 rules集合 P

通过从起始符号开始,通过产生式将终结符替换成{单词,终结符},可以得推导所有被接受的单词
举个栗子:回文字符串

在这里插入图片描述
Tips(PPT里原话)符号的使用:

  • lower case letters used to denote elements of A (on my slides, usually in blue)
  • capital letters (or else words enclosed in h and i) used to denote elements of V
  • greek letters α, β, γ, . . . used to denote strings of letters and variable symbols
  • Derivations: α ⇒ β means that one application of a production gets from α to β. α ⇒ β means that a sequence of applications of productions gets from α to β.
  • A rule in a grammar is written using a single arrow → as opposed to a double arrow ⇒
  • L(G) denotes language generated by G
正则语言是CFLs

在这里插入图片描述

Regular Grammars正则文法

两种等价的定义方式
在这里插入图片描述
左边的为严格形式“restricted” form,每个新变量应该之间及与之前的变量互相分离。可以通过转换变成严格形式:
X → abaY : X → aU1, U1 → bU2, U2 → aY
在下面的正则文法转NFA中需要将文法里的新变量如上分离

正则文法转NFA

Each variable becomes a state
Start symbol becomes initial state
Rules become transitions

X接受a后转移到Y
if X → aY becomes Y ∈ φ(X, a)
if X → ε ,makes X an accepting state
if X →a, makes acceoting state T, φ(X, a) = T

PPT末尾有许多例子:链接

Parsing解析

What is parsing:
given a grammar and a string, find a derivation of the string using the grammar
We prefer unambiguous CFGs (ones where all derivations of a string are “essentially the same”)

What is derivation:
S → bS | Sb | a
S ⇒ Sb ⇒ bSb ⇒ bbSb ⇒ bbab
像这样子从开始标志按产生式生成一个被语言接受的字符串的过程既是derivation

What is ambiguity:
S ⇒ bS ⇒ bbS ⇒ bbSb ⇒ bbab
这样子生成的也是bbab, 不过这个步骤与上面的步骤有差别。明明是同一个字符串,却有两种生成过程,这个造成的就是ambiguity

What is Parse Trees:
A derivation tree is a rooted tree with a node for each symbol introduced during the derivation.
The root is the start symbol.
A node corresponding to a constant is a leaf of the tree.
A node corresponding to a variable has as children the sequence of symbols on RHS of the rule used to replace it.
在这里插入图片描述

  1. Any derivation has a corresponding tree. But, a parse tree may have more than one corresponding derivation
  2. Given any derivation, its derivation tree can be used to construct a unique leftmost (or alternatively a unique rightmost) derivation.
  3. We see that this is equivalent to defining an ambiguous grammar to be one in which there is more than one leftmost (alternatively, rightmost) derivation for some string.

leftmost/rightmost derivation: 每次生成过程中将目前最左/最右的终结符按照产生式进行转换

解决ambiguity的问题,依旧是上面的例子:
在这里插入图片描述

What is Parser:
A parser for a grammar G takes as input a word w ∈ L(G) and finds a derivation of w.
基于广度优先搜索
在这里插入图片描述
在这里插入图片描述

week9

Chomsky normal form 乔姆斯基范式

将上下文无关文法规定为以下形式:
S → ε (S is start symbol)
X → a
X → YZ
“S is the only variable that can be replaced by empty string;
RHS of all rules is of length at most 2;
in particular a variable can be replaced by either a letter or 2 consecutive variables“

用处:Chomsky normal form is used for a version of the pumping lemma for CFLs.

任意CFG可以被转换为以上范式之一

本文一些符号约定:symbol=‘变量’=‘标志’=大写英文字母 letter=‘字符’=小写英文字母 转换式右边为ε=‘至空转换’
将CFG转为乔姆斯基范式

  1. get rid of empty productions 去除所有至空的转换,如果涉及至空转换的symbol在其他转换里,则新添至空的转换结果
  2. get rid of variable changes 去除变量间的等价转换,如A→B A和B称为单元对(unit pairs),如果涉及变量转换的symbol在其他转换里,则新添至该变量的转换结果
  3. Find and eliminate all useless symbols 从开始标志遍历,去除所有无用symbol (不可到达)
  4. get rid of consant together with symbols 去除至{字符和变量symbol}的组合的转换,创建一个新的symbol替换其中的一个字符(如果现有symbol只有一个转换至这个字符的转换式,不妨使用这个现存的symbol),这个symbol只有一个转换至该字符的转换式。然后变成了只有{变量}的组合,创建一个新的symbol替换组合末尾的两个symbols,这个symbol只有一个转换至这俩symbols的转换式直至该组合长度等于2.

在这里插入图片描述

week10

The Pumping Lemma for CFLs

Given a CFL L, there exists a number N such that any string α ∈ L with |α| ≥ N can be written as:
α = sxtyu

  1. |xty| ≤ N
  2. |xy| > 0
  3. sxityiu∈L, i>=0

如何寻找被泵的块(x,y)?:
使用派生树(derivation tree), 在生成足够长的字符串的过程中,必有一个symbol被转换了多次。
If the grammar is in Chomsky normal form and has v variables, any string of length > 2 v will necessarily have such a derivation tree.
在这里插入图片描述

使用泵引理判断是不是CFL

在这里插入图片描述

Greibach normal form 格雷巴赫范式

将上下文无关文法规定为以下形式:
S → ε
X → a
X → aX1X2 . . . Xr
“You can replace a variable with a single constant followed by a possibly empty sequence of variables.
As before start symbol only may be replaced by empty string.”

用处:Greibach normal form is used in proof of equivalence of CFGs and pushdown automata (analogous to equivalence of regular grammars and finite automata)

将乔姆斯基范式Chomsky NF转换为格雷巴赫范式Greibach NF

将至字符变换代入至变量变换的左变量
在这里插入图片描述
整个生成过程是从开始符号到字符串的过程,注意到部分变量首次出现在RHS(箭头右侧),然后出现在LHS,按照生成过程中出现变量的顺序生成一个变量序列sequence

通过挨个代换消除序列中的变量以转变成 Greibach NF,同时处理代换中出现的新式子以使其符合Greibach NF的形式

额外注意两种情况

Directly Left Recursive Productions 直接左递归:
形为A→Aa A→b的产生式,该产生式可整合为A →* baaa…aa
转换为符合GNF的形式:A→b|bX X→a|aX
如果A有多个类似产生式,如A→Aa|An A→b|m,
可转换为A→b|m|bX|mX X→a|n|aX|nX

Right-hand variable 至字符转换
形为X→aYb Y→r1r2r3…rn
可转换为: X→ar1b|ar2b|ar3b|…|arnb

在这里插入图片描述

Pushdown Automata下推自动机

可以直接看这个使用例,有个别错别字不影响阅读
PDA可以用于表示或推断一种语言是不是上下文无关语言CFL,并且它具有比DFA,NFA更强大的匹配能力。

PDA与NFA相比,多了一个堆栈。NFA只需要注重一个扫描输入字符串的时候的状态的改变,而PDA在扫描字符串的时候需要根据当前被扫描字符和栈顶元素一起改变当前状态,同时看情况操纵堆栈栈顶的元素。

堆栈有什么作用:
正是因为堆栈的存在,让PDA拥有了“缓存”的能力,使得它可以进行先后字符间的数量比较,例如匹配{ anb2n| n≥1 } 这样的语言,这是NFA做不到的。

先看定义
P = (Q, A, M, δ, i, T)

基本上与DFA类似,多了一个M作为堆栈

  1. Q:自动机的状态,到目前为止读取过的字符串的前缀信息的状态表示
  2. A:所有可以输入到自动机里的字母表
  3. M:栈里面的符号集,栈只是作为计数用,栈的符号集可以与输入字符串的字符集不同
  4. δ:状态转移方程,通过当前状态和目前扫描的字母结合当前栈顶元素,可以根据状态转移方程转换状态,同时可以对栈进行一些操作
  5. i:Q的成员之一,称为初始状态initial state
  6. T:Q的非空子集,称为终端态(terminal)或接受态(accepting states),如果字符串扫描结束后来到这个状态,则字符串被接受。

上下两种符号标记等价:
在这里插入图片描述

状态转移方程:
δ : Q × (A ∪ {ε}) × (M ∪ {ε}) → P(Q × (M ∪ {ε}))
根据每个转移前组合 { 当前状态Q,正在被扫描的字母A和pop出数个栈顶元素(topmost stack) M },可以给出多个可选的转移后的组合 { 新状态Q,push进新的数个栈顶元素 }

Tips: A为空代表字符串被扫描结束,ε代表字符串的终止符标识
转换前M为空代表栈中已无元素可以抛出,转换后M为空代表不往栈里push内容
在这里插入图片描述
回文字符串的例子:
只要有一种转移路径能到接受态,则字符串被接受
在这里插入图片描述

Deterministic PDA确定性下推自动机

所有不在转换方程里的情况都会被拒绝
依旧是回文字符串的例子:
在这里插入图片描述

证明PDA 可以表示 CFG

分两步:

  1. 证明给定CFL,可以构建一个接受这个CFL的PDA
  2. 给定PDA,可以构建一个CFG来描述被PDA接受的语言

这边CFG使用GNF格雷巴赫范式表示

定义一个extended PDA,作为PDA的泛化,实际作用没差别,只是转换方程右边可以往栈里面一次写入数个符号
e.g. δ(s, a, X) = {(t, UVW)}
meaning: in state s, with input a and X on top of stack, change to state t, replace the X with UVW.

  1. CFL to PDA
    在这里插入图片描述
    例子可见PPT 12-18页
  2. PDA to CFL
    PPT 最后几页

week11 Turing Machines

什么是Turing Machines:
Like a PDA, a TM has access to an infinite memory. But TM’s memory
is a “tape” not a stack, and TM is free to scan the tape taking actions
determined by its state and tape symbol(s) being scanned.
简单来说,图灵机是自动机的最高形式,使用向右无限长的磁带表示缓存(磁带最初存储输入字符串,在推导过程中逐渐被替换成符号),单词halt表示图灵机计算结束,很难找出一个不被图灵机表示的语言
顺便推一下关于图灵的电影《模仿游戏》

TM构成:
空白符通常为b拔
最后一行转换式右边的的L,R表示磁带向左还是向右移动
**瞬像(ID)**表示为:a1qa2,代表当前图灵机以及磁带的状态,其中,q表示图灵机当前状态,a1a2表示磁带上读写头两侧的所有有效字符串(不含空白符),磁带读写头正注视着a2的首字符。
在这里插入图片描述
什么时候接受,什么时候不接受字符串:

  1. 图灵机有一时刻处于接受状态,图灵机停机halt,接受
  2. 图灵机遇到未定义的推导,图灵机停机halt,不接受
  3. 图灵机未处于接受态,一直在死循环,不接受

直接看示例:
例题:用TM表示二进制的回文字符串

States: {i, p0, p1, q0, q1, r, t}

  • i – initial state 初始态
  • p0 – look for 0 at RHS
  • p1 – look for 1 at RHS
  • q0 – found RHS; check it’s 0
  • q1 – found RHS; check it’s 1
  • r – return to beginning 回到开始
  • t – accepting 接受态

Transitions

  • δ(i, b) = (t, b, R) accept if tape is blank
  • δ(i, 0) = (p0, b, R) delete 0; look for 0 at RHS
  • δ(i, 1) = (p1, b, R) delete 1; look for 0 at RHS
  • δ(p0, 0) = (p0, 0, R) move right to RHS
  • δ(p0, 1) = (p0, 1, R) “”
  • δ(p1, 0) = (p1, 0, R) “”
  • δ(p1, 1) = (p1, 1, R) “”
  • δ(p0, b) = (q0, b, L) found RHS; now check
  • δ(p1, b) = (q1, b, L) whether 0 or 1
  • δ(q0, 0) = (r, b, L) check RHS is 0; delete it
  • δ(q1, 1) = (r, b, L) check RHS is 1 and delete
  • δ(q0, b) = (t, b, R) accept if all tape is blank
  • δ(q1, b) = (t, b, R) accept if all tape is blank
  • δ(r, 0) = (r, 0, L) return to LHS
  • δ(r, 1) = (r, 1, L) “”
  • δ(r, b) = (i, b, R) found LHS; goto state 1
Recursively Enumerable Languages递归枚举语言

被TM机接受的语言叫做递归枚举语言,
被TM机接受并保证halt的语言称为递归语言

  1. 递归:计算过程可层层递归
  2. 枚举:生成一种语言的成员(枚举单词)

Extended TM:
δ : Q × A −→ Q × A × {L, R, S}
S代表磁头不动
证明被Extended TM接受的语言也被standard TM接受
在这里插入图片描述

doubly infinite tape TM
磁带两端都可无限延伸
在这里插入图片描述

Context-sensitive grammars

αXβ → αγβ
where X is a variable; RHS is at least as long as LHS (|αXβ| ≤ |αγβ|), which makes it possible to check whether a given word belongs to the language…

Unrestricted grammar无限制文法

α → β
α and β can be any string of symbols.
…Problem: given a word, how to check that it is derivable? There is no obvious limit on how long the intermediate words in the derivation may be.
Unrestricted grammars are equivalent to Turing machines

表示{anbncn | n≥1}

在这里插入图片描述

证明上下文敏感文法比无限制文法更受限制

上下文敏感文法Context-sensitive grammars 对应 线性有界图灵机linearly bounded Turing machines,是一种非确定的TM机nondeterministic TM,计算过程中可使用的磁带块的数量是有界限的。
也就是说对于给定的输入长度n,假设k*n是可以使用的磁带块的上限,那么在计算过程中的缓存使用configurations是有限的,因此接受问题可以被判定。

week12

(说实话这周内容咱其实没怎么理明白
在这里插入图片描述

Recursively Enumerable Languages递归可枚举语言

图灵机所识别的语言–其中包含不可判定问题
在这里插入图片描述

Recursive Languages递归语言

保证停机的图灵机所识别的语言–对应的问题称为可判定问题
在这里插入图片描述

Decidability and Undecidability 可判定性与不可判定性

问题:可判定的decidability->它的语言:递归的recursive
问题:不可判定->它的语言:不可递归的 ->不存在TM能接受这个语言或保持halt and reject所有不属于这个语言的字符串

接下来讨论一种不可判定问题:
将某一图灵机P通过某种编码方式编成01字符串(既程序),将其作为输入字符串,传给“通用图灵机U”(既计算机),使其能够执行(模仿成)这些被编码的图灵机。

Universal Turing Machines 通用图灵机

通用图灵机U也就是用于执行被编码的图灵机P的图灵机。

Lhalt代表能被图灵机停机的输入字符串/编码后的TM
一个通用图灵机U能接受所有Lhalt成员,但会在非Lhalt成员时死循环(loop for ever)

通过通用图灵机,我们将会讨论Lhalt被一图灵机接受,接下来,我们讨论Lhalt不会被{总是拒绝非语言成员的图灵机}所接受。这两者展现了{保证停机的图灵机}和{不能保证停机的图灵机}的差别。最后,构建一种形式语言,使得没有任何TM能识别它。

何种编码方式

Lhalt的编码方式:假设被编码的图灵机字符集为{0,1,b) (b就是空),经过如下编码:
状态:{0,1}k (2k+1 应该>总状态数量)
初始状态:0k
接受状态:1k
空字符b变成B
磁头移动方向 0为Left 1为Right
这样,状态转移式δ(p, x) = (q, y, D)可被看成pxqyD五个有序部分,转移式之间使用 ∗ 号分割

状态转移式的编码如下< M >,其中状态编码后的长度k=2,下文< M >都代表被编码后的图灵机
在这里插入图片描述
TM机的编码如下 $ 0k+1 ∗ < M > $ # w
声明状态长度–声明状态转移式们–声明输入字符串w

上面那个TM的如果输入1011,那么整个TM和输入的编码如下:
$000*0000001*0010011*00B01B0*0111101*0100110$#1011

何种执行/模拟方式

不看Mc输入,只看被编码后的TM内容 既编码串的最左边 $ 到最右边的 $ 之间
通用图灵机MU使用多个循环,每次循环模拟Mc的一步

  1. 读取Mc扫描到的symbol
  2. 找到Mc中的相应转换式
  3. 取得新状态和新symbol
  4. 写入新的symbol
  5. 移动磁头
    在这里插入图片描述
    Countable Set
    如果在无限集S和正整数集之间存在一对一的映射,则称为可数集。
    换句话说,S中的元素可以由1、2、3这样的下标索引。

Fact:如果S是一个Infinite countable set,那么它的幂集2S={L | L is subset of S}是不可数的。

The set of all Turing machines over an alphabet is countable

The Halting Problem

问题描述如下:给定一个图灵机和输入,如何知道计算是否会停机
问题等同于:是否有一编码后的01字符串(代表TM和一个输入)可以被停机
也就是说存在某些TM能够识别下面这个并停机。
Lhalt = {$ < N > $u : u ∈ {0, 1} ∗ and N is a TM which halts on input u}

用计算机和程序的思想来理解,既是现在有一个可接受任一字符串的输入的程序,对于这些输入,程序会终止或死循环,如何知道哪些输入是死循环(不能通过一个一个输入运行程序来判断)
就是说,对于不同的输入,不同的程序给出的结果分别是Y/N,如何定义一个目标程序,这个目标程序接受一个数字n当且仅当第n个程序不接受第n个输入。
在这里插入图片描述
if we could solve the Halting problem we could in fact use the solution to construct such a program as follows:

  • Use HP solver to decide whether program n halts on input n
  • If not, accept number n.
  • If so, simulate program n on input n, and reverse the answer given.

可以证明不存在这样的目标程序(识别Lhalt的TM)

Reductions

我们可以使用halting problem的不可判定性来证明更多的问题是不可判定的

定义个从L1到L2TM-computable function f:
在这里插入图片描述

Unifrom Halting Problem一致停机问题

给定一图灵机,它对于所有输入,是否都会停机。
Luhalt = {< M >: M halts on all inputs}
找到使Lhalt到Luhalt的方程。
在这里插入图片描述

Acceptance Problem接受问题

定义一语言,其内包含图灵机何被接受的输入组合。
Laccept = {< M >$w : M accepts input w}
找到使Lhalt到Laccept的方程。
在这里插入图片描述
24页之后还有一些证明,开摆

  • 20
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值