跳到主要内容

東京工業大学 情報理工学院 数理・計算科学系 2016年8月実施 午前 問7

Author

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

Description

アルファベット

Σ={(00),(01),(10),(11)}\Sigma=\left\{\binom00,\binom01,\binom10,\binom11\right\}

上の言語を考える。

(1) 上段の文字列が回文である文字列全体を AA とする。回文とは前から読んでも後ろから読んでも同じになる文字列であり、空列 ε\varepsilonAA に含める。たとえば、(01)(11)(00)(00)(10)(00)A\binom01\binom11\binom00\binom00\binom10\binom00\in A である。ポンピング補題を用いて AA が正規言語でないことを示せ。

(2) AA を生成する文脈自由文法を与えよ。

(3) 各行を左端が最上位ビットである二進数とみなし、下段の数が上段の 3 倍となる文字列全体を BB とする。空列も BB に含める。たとえば、(00)(01)(11)(00)B\binom00\binom01\binom11\binom00\in B である。

BR={wRwB}B^R=\{w^R\mid w\in B\}

wRw^Rww を逆から読んだ文字列)を認識する、4 状態の決定性有限オートマトンの状態遷移図を与えよ。

注 1:ポンピング補題

言語 LL が正規言語であるとき、次を満たす数 pp(ポンピング長)が存在する。sLs\in Lsp|s|\geq p を満たすなら、s=xyzs=xyz と分割でき、

  • (a) 各 i0i\geq0 に対して xyizLxy^iz\in L
  • (b) y>0|y|>0
  • (c) xyp|xy|\leq p

が成り立つ。s|s| は文字列の長さ、yiy^iyyii 個連結した文字列を表し、y0=εy^0=\varepsilon は空列である。

注 2:決定性有限オートマトンの状態遷移図

アルファベット {a,b}\{\mathtt a,\mathtt b\} 上で、abb\mathtt{abb} で終わる文字列全体を認識する状態遷移図の例を示す。開始状態は q1q_1、受理状態は二重丸の q4q_4 である。

题目描述

令字母表

Σ={(00),(01),(10),(11)}.\Sigma=\left\{ \binom00,\binom01,\binom10,\binom11 \right\}.

这里每个字符串可看成上下两行等长的二进制串。

  1. AA 为所有“上方一行是回文串”的字符串组成的语言,并约定空串 εA\varepsilon\in A。使用抽引引理证明 AA 不是正则语言。

  2. 给出一个生成 AA 的上下文无关文法。

  3. 把每一行都视为最高位在最左侧的二进制数,令 BB 为满足“下方一行表示的数是上方一行的三倍”的字符串集合,并约定 εB\varepsilon\in B。定义反转语言

    BR={wRwB}.B^R=\{w^R\mid w\in B\}.

    画出一个恰有四个状态、能够识别 BRB^R 的确定有限自动机的状态转移图。

题面中的两个示例分别为 (01)(11)(00)(00)(10)(00)A\binom01\binom11\binom00\binom00\binom10\binom00\in A(00)(01)(11)(00)B\binom00\binom01\binom11\binom00\in B。回文串是指正读和倒读相同的字符串。

注 1(抽引引理):若 LL 正则,则存在抽引长度 pp,使每个满足 sp|s|\geq psLs\in L 都可分解为 s=xyzs=xyz,且对每个 i0i\geq0xyizLxy^iz\in Ly>0|y|>0xyp|xy|\leq p。其中 s|s| 是串长,yiy^i 表示串 yy 重复连接 ii 次,y0=εy^0=\varepsilon

注 2(状态转移图示例):上面的题面示例图识别字母表 {a,b}\{\mathtt a,\mathtt b\} 上以 abb\mathtt{abb} 结尾的字符串;q1q_1 是初态,双圆状态 q4q_4 是接受态。

Kai

以下では列記号 (xy)\binom{x}{y} を単に xyxy と書く。第 1 ビットが上段、第 2 ビットが下段である。

(1)

AA が正則で、ポンピング長が pp であると仮定する。文字列

w=(00)p(10)(00)pw=(00)^p(10)(00)^p

を取る。これは上段が 0p10p0^p10^p なので AA に属する。任意の分解 w=xyzw=xyzxyp|xy|\leq p, y>0|y|>0 を満たすものを考えると、y=(00)ry=(00)^r (r1)(r\geq1) である。

i=0i=0 として yy を除くと、上段は 0pr10p0^{p-r}10^p となり回文ではない。したがって xy0zAxy^0z\notin A であり、ポンピング補題に矛盾する。よって

A は正則言語ではない.\boxed{A\text{ は正則言語ではない}}.

(2)

非終端記号を S,Z,OS,Z,O、開始記号を SS とし、次の生成規則を取る。

SεZOZSZOSO,Z0001,O1011.\begin{aligned} S&\to\varepsilon\mid Z\mid O\mid ZSZ\mid OSO,\\ Z&\to00\mid01,\\ O&\to10\mid11. \end{aligned}

ZZ は上段ビット 0、OO は上段ビット 1 の任意の列を生成する。ZSZZSZOSOOSO は同じ上段ビットを両端に付け、下段ビットは左右で独立に選べる。したがってこの文法は、上段が回文で下段が任意の文字列をちょうど生成する。

(3)

BRB^R では最下位ビットから順に読むことになる。3 倍算の現在の桁への繰上がりを cc、入力列を xyxy とすると、遷移条件は

y3x+c(mod2),c=3x+c2.y\equiv3x+c\pmod2, \qquad c'=\left\lfloor\frac{3x+c}{2}\right\rfloor.

到達し得る繰上がりは 0,1,20,1,2 であり、これらに不正入力用のデッド状態を加えれば 4 状態になる。qcq_c を繰上がり cc の状態、qdq_d をデッド状態とする。

初期状態かつ唯一の受理状態は q0q_0 である。入力を読み終えたとき繰上がりが 0 であることが、同じ桁数の下段が上段のちょうど 3 倍であることに対応する。q0q_0 を受理状態にすることで空文字列も受理される。