東京工業大学 情報理工学院 数理・計算科学系 2017年8月実施 午前 問7
Author
祭音Myyura (co-authored with GPT 5.6 SOL)
Description
整数定数 1、二項演算 +、単項演算 − からなる算術式の後置記法を定める、次の文脈自由文法 G を考える。ただし、開始記号は E である。
E→1∣EE+∣E−
例えば、111++ および 11+− は G が生成する文字列である。以下の問いに答えよ。
- アルファベット {1,+,−} 上の文字列 w に含まれる 1 の個数を #1(w)、+ の個数を #+(w) とし、#(w)=#1(w)−#+(w) と定める。例えば、#1(111++)=3、#+(111++)=2、#(111++)=1 である。G が生成する任意の文字列 w について #(w)=1 となることを示せ。
- G が生成する言語が正規言語でないことを、正規言語の反復補題を用いて示せ。
- 言語 L(G′)={w′∣w′=ε ∧ ∃w(w′w∈L(G))} を生成する文脈自由文法 G′ を示せ。ここで ε は空列である。
- G が生成する任意の文字列 w と、空でない文字列 w′ に対して、w′w は G が生成する文字列ではないことを示せ。
注:ポンピング補題
言語 L が正規言語であるとき、次のような数 p(ポンピング長)が存在する。s が ∣s∣≥p を満たす L の任意の文字列であるとき、s は次の条件を満たすように三つの部分 s=xyz に分割できる。
- 各々の i≥0 に対して xyiz∈L。
- ∣y∣>0。
- ∣xy∣≤p。
ただし、∣s∣ は文字列 s の長さを表し、yi は y を i 個連結したものを表す。y0 は空列となる。
题目描述
考虑用整数常量 1、二元运算 + 和一元运算 − 表示后缀算术表达式的上下文无关文法 G,其开始符号为 E:
E→1∣EE+∣E−.
例如,111++ 与 11+− 都是 G 生成的字符串。回答:
-
对字母表 {1,+,−} 上的字符串 w,分别以 #1(w)、#+(w) 表示其中字符 1、+ 的个数,并定义
#(w)=#1(w)−#+(w).
例如,#1(111++)=3、#+(111++)=2、#(111++)=1。证明 G 生成的每个字符串 w 都满足 #(w)=1。
-
使用正则语言的抽引引理,证明 G 生成的语言不是正则语言。
-
给出一个上下文无关文法 G′,其语言为 L(G′)={w′∣w′=ε ∧ ∃w(w′w∈L(G))},即所有能扩展成 G 所生成字符串的非空前缀组成的语言。这里 ε 表示空串。
-
证明:对任意由 G 生成的字符串 w 和任意非空字符串 w′,拼接串 w′w 都不可能由 G 生成。
注:抽引引理
若语言 L 是正则语言,则存在一个数 p(抽引长度),使任意满足 s∈L 且 ∣s∣≥p 的字符串都可以分解为 s=xyz,并满足:
- 对每个 i≥0,均有 xyiz∈L。
- ∣y∣>0。
- ∣xy∣≤p。
这里 ∣s∣ 表示字符串 s 的长度,yi 表示将 y 连续拼接 i 次,y0 为空串。
Kai
(1)
生成規則に関する構造帰納法で示す。
-
E⇒1 のとき、#(1)=1 である。
-
E⇒E− のとき、− は #1 と #+ のどちらにも影響しないため、値は変わらない。
-
E⇒EE+ のとき、二つの部分式を u,v とすれば、帰納法の仮定から
#(uv+)=#(u)+#(v)−1=1+1−1=1.
したがって、G が生成するすべての文字列 w について #(w)=1 である。
(2)
L(G) が正規言語であると仮定し、その反復長を p とする。文字列
s=1p+p−1
は、p 個の式 1 を + で順に結合した後置記法の式なので s∈L(G) である。
反復補題によって s=xyz、∣xy∣≤p、∣y∣>0 と分解できる。このとき最初の p 文字はすべて 1 なので、ある r≥1 に対して y=1r である。y を 0 回反復すると
#(xz)=(p−r)−(p−1)=1−r=1.
(1) より xz∈/L(G) であり、反復補題に矛盾する。ゆえに L(G) は正規言語ではない。
(3)
次の文法を用いればよい。開始記号は S とする。
SE→E∣ES,→1∣EE+∣E−.
この文法は、一つ以上の完全な式を並べた文字列 E1E2⋯Ed を生成する。
後置記法を左から読んだとき、正しい式の空でない接頭辞を読み終えたスタックには、未結合の完全な式が d≥1 個残っている。したがって、その接頭辞は E1E2⋯Ed と表せる。逆に、このような文字列の末尾に +d−1 を付ければ一つの式に結合できるので、生成された文字列は必ず L(G) のある文字列の接頭辞である。
(4)
w′w∈L(G) と仮定する。w′ は正しい後置式の空でない接頭辞なので、(3) の議論から
#(w′)≥1
である。一方、w∈L(G) なので (1) より #(w)=1 である。したがって
#(w′w)=#(w′)+#(w)≥2,
となり、(1) の必要条件 #(w′w)=1 に矛盾する。よって w′w∈/L(G) である。