공부한것들(주마다업뎃)/Computation theory

computation theory (7) - pumping lemma for CFL

개꾸리 2018. 9. 1. 16:12

    CFL을 위한 pumping lemma는 RL을 위한 pumping lemma와 유사하지만 약간 다른 점이 있다.



Language A가 context-free lanugage라면 pumping length p가 있으면 p보다 긴 string s를 s=uvwxyz로 다음을 만족하도록 나눌 수 있다.



1. for each i >= 0, u(v^i)x(y^i)z 는 language A에 포함된다.

2. |uv| > 0

3. |uxy| <= p


//사지방 컴퓨터가 flash 안되는 컴퓨터여서 나중에 추가


증명은 비둘기집의 원리(pigeonhole principle)로 증명한다.



CFL A를 recognize하는 CFG G의 rules중에 오른쪽 심볼의 개수가 가장 많은 rule의 오른쪽 심볼의 개수를 b라고 하면 parse tree의 깊이가 h일때 최대 children의 수는 b^h이다. variable의 개수를 |V|라 할때 pumping length를 b^(|V| + 1) = p로 설정하면 p보다 긴 string의 parse tree는 반드시 |V| + 1이상의 height를 가진다. 


가장 작은 parse tree는 |V| + 1의 height를 가질 때이므로 |V| + 2개의 node가 필요하고 그 중 한개가 terminal이면 |V| + 1개의 variable이 필요하다. 비둘기집의 원리로 어떤 variable은 두번 이상 나타난다.


이제 string s를 uvxyz로 나눠야하는데 parse tree를 생각해보면 두번 이상 나타나는 variable을 기준으로 자르면 Figure 1처럼 condition 1이 성립함을 알 수 있다. 


Figure 1. parse tree (출처 : https://en.wikipedia.org/wiki/Pumping_lemma_for_context-free_languages -위키피디아)


Node N은 비둘기집의 원리로 같은 자리에 있지 않으므로 |uv| > 0이 성립하며 |V| + 1의 높이를 가진 parse tree의 최대 children의 수는 b^(|V| + 1) = p이므로 |uxy| < p가 성립한다.


//사지방 컴퓨터가 flash 안되는 컴퓨터여서 나중에 추가


모든 CFG는 pumping lemma를 만족한다.