跳到主要内容

大阪大学 情報科学研究科 情報工学 2019年度 計算理論

Author

祭音Myyura (co-authored with GPT 5.6 SOL)

Description

(1) 回文

アルファベットを {a,b}\{a,b\} とし、空語も回文とする。

  • (1-1),(1-2) 長さ2、長さ3の回文をそれぞれ認識するDFAを示せ。
  • (1-3) 全ての回文の言語が正規でないことを、次の反復補題を用いた背理法で示せ。

正規言語 LL に対し正整数 nn が存在し、任意の vLv\in L, vn|v|\ge nv=xyzv=xyz, xyn|xy|\le n, y1|y|\ge1 と分解でき、すべての整数 k0k\ge0 について xykzLxy^kz\in L となる。

  • (1-4) 開始状態 q0q_0、初期スタック記号 ZZ のPDAで、q0q_0 の自己遷移は (a,s)/0s,(b,s)/1s(a,s)/0s,(b,s)/1ss{Z,0,1}s\in\{Z,0,1\})である。q1q_1(a,0)/ε,(b,1)/ε(a,0)/\varepsilon,(b,1)/\varepsilon により取り出し、(ε,Z)/Z(\varepsilon,Z)/Z で最終状態 q2q_2 へ移る。中央位置を推測する q0q1q_0\to q_1 の遷移をすべて示せ。スタック記号は Z,0,1Z,0,1 とする。遷移 (r,s)/t(r,s)/t は入力 rr を読み、スタック先頭 ss を列 tt で置き換えることを表す。tt の左端を新しいスタック先頭とし、t=εt=\varepsilon なら取り出すだけ、r=εr=\varepsilon なら入力を消費しない。解答もこの形式を用いよ。

(2) 文脈自由文法

AaAbAbAaAεA\to aAbA\mid bAaA\mid\varepsilon

を生成規則、AA を開始記号とする言語 LL を考える。

w|w| は語長、wa,wb|w|_a,|w|_b はそれぞれ a,ba,b の個数、αβ\alpha\Rightarrow\beta は生成規則を1回適用する導出を表す。

  • (2-1) 次の空欄[ア]を埋め、wLw\in L なら wa=wb|w|_a=|w|_b を示せ。規則適用回数 kk について帰納法を用いる。k=1k=1 なら AεA\Rightarrow\varepsilon なので両者0である。k>1k>1 とし、k1k-1 回以下の適用で得られる任意の語は両者の個数が等しいと仮定する。kk 回で得られる語も両者の個数が等しい理由は[ア]である。
  • (2-2) 次の空欄[イ]~[エ]を埋め、wa=wb|w|_a=|w|_b なら wLw\in L を示せ。w|w| は0以上の偶数である。基底 w=0|w|=0 で成立する理由は[イ]である。w>0|w|>0 では、それより短い、a,ba,b の個数が等しい語はすべて LL に属すると仮定する。先頭が aa なら、より短い v1,v2Lv_1,v_2\in L によって w=av1bv2w=av_1bv_2 と分解できることを用いてよい。このとき A[]av1bv2=wA\Rightarrow[ウ]\Rightarrow\cdots\Rightarrow av_1bv_2=w。先頭が bb なら同様に w=bv1av2w=bv_1av_2 と分解でき、A[]bv1av2=wA\Rightarrow[エ]\Rightarrow\cdots\Rightarrow bv_1av_2=w

Kai

(1)

(1-1) 未記載の遷移は全て非受理の死状態へ移り、死状態は全入力で自己遷移する。

(1-2) 同じく未記載の遷移は死状態へ移る。

(1-3) 正規と仮定し、反復長を nn とする。回文 anbana^nba^nxyzxyzxyn|xy|\le n, y1|y|\ge1 と分割すると y=aky=a^kk1k\ge1)。yy を0回反復した xz=ankbanxz=a^{n-k}ba^n は回文でなく、反復補題に矛盾する。

(1-4) T{Z,0,1}T\in\{Z,0,1\} のそれぞれについて

(ε,T)/T,(a,T)/T,(b,T)/T\boxed{(\varepsilon,T)/T,\quad(a,T)/T,\quad(b,T)/T}

の計9個。最初は偶数長の中央、残りは奇数長の中央の1文字を読み飛ばす遷移である。

(2)

(2-1) [ア]:1回の導出では AεA\Rightarrow\varepsilon で両者0個。非空語は最初の規則により av1bv2av_1bv_2 または bv1av2bv_1av_2 となる。v1,v2v_1,v_2 には帰納法の仮定を適用でき、そこに a,ba,b を各1個加えるので個数は等しい。

(2-2) [イ]:空語は AεA\Rightarrow\varepsilon で生成できる。[ウ]は aAbAaAbA、[エ]は bAaAbAaA である。非空語の先頭が aa のとき、先頭から数えた aabb の個数差が初めて0となる位置を選ぶ。この位置の文字は bb であり、w=av1bv2w=av_1bv_2 と書け、v1,v2v_1,v_2 はともに a,ba,b を同数含む。帰納法により

AaAbAav1bv2=w.A\Rightarrow aAbA\Rightarrow^*av_1bv_2=w.

先頭が bb の場合も w=bv1av2w=bv_1av_2 と分解し

AbAaAbv1av2=w.A\Rightarrow bAaA\Rightarrow^*bv_1av_2=w.

したがって所要の言語をちょうど生成する。