一、一个下推自动机为一个六元组:PDA M=(有穷状态集、输入字母表、栈字母表、转移函数、初始状态、接受状态集)。其中输入字母表含有episilon,所以后面所说的PDA实际上都是非确定性PDA。
二、PDA与CFG两者等价。通过两个方向来进行证明:
1、如果一个语言是CFL,则存在一个PDA能够识别它。
2、如果一个语言被PDA识别,则这个语言是CFL。
三、上下文无关语言的泵引理:设A是上下文无关语言, 则存在常数p(泵长度)使得, 若s∈A且|s|≥p, 则s=uvxyz, 满足下述条件: 1) 对任意i≥0, u vi x yi z∈A; 2) |vy|>0(即v串和y串至少有一个非空); 3) |vxy|≤p.
注意:泵引理证明的关键都是鸽巢原理(DFA的也是,在证明中会体现出来),即寻找一个长串从而找到两个相同的状态。CFG的泵引理是在一颗分析树上找这样的相同状态。
证明流程:设G中变元个数是|V|, 令p=b^|V|+2。 则长度不小于p的串的语法分析树高度至少是|V|+2。设s是长度不小于p的串, 则s的语法分析树高度不小于|V|+2. 设T是结点数最少的语法分析树。T中最长路径长度不小于|V|+2。由于树叶是终结符,这条路径上变元数不小于|V|+1.根据鸽巢原理, 必有某个变元R在这条路径上重复出现. 选择R为这条路径上在最下面的|V|+1个变元中重复出现的变元. 如图把s划分成uvxyz. 上面的R带有较大的子树, 产生vxy. 下面的R带有较小的子树, 产生x. 这两个子树可以互相替换, 因此对任意i≥0, uvixyiz∈A.
v和y不能都是空串, 否则用较小的子树替换较大的子树仍然得到s, 但是整个树的结点数减少, 这与T是结点数最少的语法分析树矛盾.所以|vy|>0.
R的选取使得R两次出现都是在最长路径最下面的|V|+1个变元中, 所以产生vxy的R的子树高度不超过|V|+2, 这个子树只能产生长度不超过b|V|+2=p的串, 所以|vxy|≤p.
四、泵引理证明的例子:
1、B={ a^nb^nc^n | n≥0 }非CFL。(选取s=a^pb^pc^p)由此可以退出CFL对交不封闭,因为ab相等和bc相等都是CFL,而他们的交正是B。
2、C = { aibjck | 0≤i≤j≤k }非CFL。(s选取同上,分v和y包含几种符号讨论)
3、D={ww|w∈{0,1}*}非CFL。(选取s=0^p1^p0^p1^p,注意如果选取0^p10^p1则不行)
五、CFG的封闭性:CFL对正则运算封闭(并、连接、星);CFL对交、补不封闭(上例中D的补是CFG)。