跳到主要内容

九州大学 システム情報科学府 情報理工学専攻 2020年12月実施 オートマトンと言語

Author​

祭音Myyura (co-authored with GPT 6 Astra)

Description​

【問1】​

状態数2の決定性有限オートマトンを考える。決定性有限オートマトン M=(K,Σ,δ,q0,F)M=(K,\Sigma,\delta,q_0,F) において、K={q0,q1}K=\{q_0,q_1\}、Σ={a,b}\Sigma=\{a,b\}、F={q0}F=\{q_0\} とする。ただし、K,Σ,δ,q0,FK,\Sigma,\delta,q_0,F はそれぞれ MM の状態集合、アルファベット、遷移関数、初期状態、最終状態の集合を表し、aa と bb は文字である。なお δ(p,x)=r\delta(p,x)=r(p,r∈Kp,r\in K、x∈Σx\in\Sigma)は、MM が文字 xx を読むことで状態 pp から状態 rr に移ることを表す。MM によって受理される言語を L(M)L(M) で表す。Σ\Sigma 上の正規表現 e(a,b)e(a,b) が表す言語を、∥e(a,b)∥\|e(a,b)\| で表す。次の各問いに答えよ。

図1:δ(q0,a)=q0、δ(q0,b)=q1である4種類のオートマトンM

(1) 図1は、δ(q0,a)=q0, δ(q0,b)=q1\delta(q_0,a)=q_0,\ \delta(q_0,b)=q_1 である4種類の δ\delta に対応する MM の状態遷移図である。図1の各 MM について L(M)L(M) に含まれる文字列を説明せよ。

(2) δ(q0,a)=δ(q0,b)=q1\delta(q_0,a)=\delta(q_0,b)=q_1 のとき、可能な MM の状態遷移図を図1にならって全て与えよ。さらに、各 MM について L(M)L(M) に含まれる文字列を説明せよ。

(3) 言語 L=∥e(a,b)∥L=\|e(a,b)\| について、∥e(b,a)∥\|e(b,a)\| を LL の交換言語と呼ぶ。たとえば、L0L_0 が文字 aa を偶数個含む文字列から構成される言語であるとき、L0L_0 の交換言語は文字 bb を偶数個含む文字列から構成される言語である。

 (1) と (2) とは異なる δ\delta に対応する各 MM に対し、(1) あるいは (2) の言語の交換言語とならない L(M)L(M) に含まれる文字列を説明せよ。

【問2】​

文脈自由文法を4つ組 (N,Σ,P,S)(N,\Sigma,P,S) で表す。ただし、N,Σ,P,SN,\Sigma,P,S をそれぞれ非終端記号の集合、終端記号の集合、生成規則の集合、開始記号とする。Σ\Sigma 上の文字列 ww と終端記号 x∈Σx\in\Sigma に対して、∣w∣x|w|_x を ww 中の xx の出現数とする。以下の各問に答えよ。

(A) 以下に示す言語 LiL_i(i=1,2,3i=1,2,3)を導出する文脈自由文法 (Ni,Σi,Pi,S)(N_i,\Sigma_i,P_i,S) の生成規則の集合 PiP_i を与えよ。

(1) L1={w∈{a,b}∗∣∣w∣a≥3}L_1=\{w\in\{a,b\}^*\mid |w|_a\ge3\}。ただし Σ1={a,b}\Sigma_1=\{a,b\} である。答えには N1={S,X}N_1=\{S,X\} を用いよ。

(2) L2={w∈{a,b}∗∣∣w∣a≥2∣w∣b}L_2=\{w\in\{a,b\}^*\mid |w|_a\ge2|w|_b\}。ただし Σ2={a,b}\Sigma_2=\{a,b\} である。答えには N2={S}N_2=\{S\} を用いよ。

(3) L3={aibjck∣i,j,k≥0 かつ (2i=j または 3j=k)}L_3=\{a^ib^jc^k\mid i,j,k\ge0\text{ かつ }(2i=j\text{ または }3j=k)\}。ただし Σ3={a,b,c}\Sigma_3=\{a,b,c\} である。答えには N3={S,V,X,Y,Z}N_3=\{S,V,X,Y,Z\} を用いよ。

(B) 以下に示す言語 L4,L5L_4,L_5 は文脈自由言語であるか否か、証明せよ。

(4) L4=∅L_4=\varnothing。

(5) 有限個の有限長文字列から構成される空でない任意の言語 L5L_5。

题目描述​

【问1】​

考虑一个具有两个状态的确定性有限自动机 M=(K,Σ,δ,q0,F)M=(K,\Sigma,\delta,q_0,F),其中 K={q0,q1}K=\{q_0,q_1\}、Σ={a,b}\Sigma=\{a,b\}、F={q0}F=\{q_0\}。K,Σ,δ,q0,FK,\Sigma,\delta,q_0,F 分别表示状态集合、字母表、转移函数、初始状态和接受状态集合,a,ba,b 为字符。δ(p,x)=r\delta(p,x)=r(p,r∈Kp,r\in K、x∈Σx\in\Sigma)表示自动机读入字符 xx 后从状态 pp 转移到状态 rr。用 L(M)L(M) 表示自动机接受的语言,用 ∥e(a,b)∥\|e(a,b)\| 表示字母表 Σ\Sigma 上的正则表达式 e(a,b)e(a,b) 所表示的语言。回答下列问题。

(1) 上方图1给出了满足 δ(q0,a)=q0, δ(q0,b)=q1\delta(q_0,a)=q_0,\ \delta(q_0,b)=q_1 的全部四种转移函数对应的状态转移图。分别说明这些自动机接受的字符串。

(2) 当 δ(q0,a)=δ(q0,b)=q1\delta(q_0,a)=\delta(q_0,b)=q_1 时,仿照图1,给出所有可能的状态转移图,并分别说明它们接受的字符串。

(3) 对于语言 L=∥e(a,b)∥L=\|e(a,b)\|,称 ∥e(b,a)∥\|e(b,a)\| 为 LL 的交换语言。例如,“包含偶数个 aa 的字符串”所组成的语言,其交换语言是“包含偶数个 bb 的字符串”所组成的语言。

对于转移函数不同于 (1)、(2) 的各个自动机,说明其中不属于 (1) 或 (2) 所得语言的交换语言的 L(M)L(M) 包含哪些字符串。

【问2】​

用四元组 (N,Σ,P,S)(N,\Sigma,P,S) 表示上下文无关文法,其中 N,Σ,P,SN,\Sigma,P,S 分别为非终结符集合、终结符集合、产生式集合和开始符号。对于 Σ\Sigma 上的字符串 ww 与终结符 x∈Σx\in\Sigma,用 ∣w∣x|w|_x 表示 xx 在 ww 中出现的次数。回答下列问题。

(A)​

给出生成下列语言 LiL_i(i=1,2,3i=1,2,3)的上下文无关文法 (Ni,Σi,Pi,S)(N_i,\Sigma_i,P_i,S) 的产生式集合 PiP_i。

(1) L1={w∈{a,b}∗∣∣w∣a≥3}L_1=\{w\in\{a,b\}^*\mid |w|_a\ge3\}。终结符集合为 Σ1={a,b}\Sigma_1=\{a,b\},必须使用非终结符集合 N1={S,X}N_1=\{S,X\}。

(2) L2={w∈{a,b}∗∣∣w∣a≥2∣w∣b}L_2=\{w\in\{a,b\}^*\mid |w|_a\ge2|w|_b\}。终结符集合为 Σ2={a,b}\Sigma_2=\{a,b\},必须使用非终结符集合 N2={S}N_2=\{S\}。

(3) L3={aibjck∣i,j,k≥0 且 (2i=j 或 3j=k)}L_3=\{a^ib^jc^k\mid i,j,k\ge0\text{ 且 }(2i=j\text{ 或 }3j=k)\}。终结符集合为 Σ3={a,b,c}\Sigma_3=\{a,b,c\},必须使用非终结符集合 N3={S,V,X,Y,Z}N_3=\{S,V,X,Y,Z\}。

(B)​

证明下列语言是否为上下文无关语言。

(4) L4=∅L_4=\varnothing。

(5) 任意非空语言 L5L_5,其中包含有限个有限长度的字符串。

Kai​

【問1】​

以下では ε\varepsilon を空文字列、++ を正規表現の和とする。初期状態 q0q_0 が受理状態なので、どの MM も ε\varepsilon を受理する。

(1)​

図1を左から (i)、(ii)、(iii)、(iv) と呼ぶ。

図δ(q1,a)\delta(q_1,a)δ(q1,b)\delta(q_1,b)受理する言語の正規表現
(i)q1q_1q1q_1a∗a^*
(ii)q1q_1q0q_0a∗(ba∗ba∗)∗a^*(ba^*ba^*)^*
(iii)q0q_0q1q_1ε+(a+b)∗a\varepsilon+(a+b)^*a
(iv)q0q_0q0q_0(a+b(a+b))∗(a+b(a+b))^*
  • (i) bb を一度も含まない文字列である。bb を読むと q1q_1 に移り、その後は q0q_0 に戻れない。
  • (ii) bb の出現数が偶数である文字列である。aa は状態を変えず、bb を読むたびに二つの状態を交互に移る。
  • (iii) 空文字列、または末尾が aa である文字列である。どちらの状態からも、aa を読めば q0q_0、bb を読めば q1q_1 になる。
  • (iv) ブロック aa、baba、bbbb の有限回の連結として表せる文字列である。q0q_0 では aa だけで1回の閉路となり、bb で q1q_1 へ移った場合は、その次の1文字が a,ba,b のどちらでも q0q_0 に戻る。したがって、左からこの規則で読み進めたとき、最後に未処理の bb が残らないことが受理条件となる。

(2)​

q0q_0 からの二つの遷移が固定されているので、δ(q1,a)\delta(q_1,a) と δ(q1,b)\delta(q_1,b) の選び方は 22=42^2=4 通りである。全ての状態遷移図を以下に示す。二重丸が受理状態、外からの矢印が初期状態を示す。

問1(2):全4通りの状態遷移図。作図:祭音Myyura

図δ(q1,a)\delta(q_1,a)δ(q1,b)\delta(q_1,b)受理する言語の正規表現
(i)q1q_1q1q_1ε\varepsilon
(ii)q0q_0q1q_1((a+b)b∗a)∗((a+b)b^*a)^*
(iii)q1q_1q0q_0((a+b)a∗b)∗((a+b)a^*b)^*
(iv)q0q_0q0q_0((a+b)(a+b))∗((a+b)(a+b))^*
  • (i) 空文字列だけである。1文字でも読むと q1q_1 に移り、以後戻れない。言語は {ε}\{\varepsilon\} であり、空言語 ∅\varnothing ではない。
  • (ii) 「任意の1文字、続いて0個以上の bb、最後に aa」というブロックを0回以上連結した文字列である。各ブロックが q0q_0 から出て初めて q0q_0 に戻る経路に対応する。
  • (iii) 「任意の1文字、続いて0個以上の aa、最後に bb」というブロックを0回以上連結した文字列である。
  • (iv) 長さが偶数である文字列である。文字の種類によらず、1文字読むたびに状態が切り替わる。

(3)​

遷移関数は全体で 24=162^4=16 通りある。(1)、(2) で扱っていないものは、q0q_0 からの遷移によって次の二つに分かれる。

δ(q0,a)=q1, δ(q0,b)=q0\delta(q_0,a)=q_1,\ \delta(q_0,b)=q_0 の場合: a,ba,b を交換すると (1) の場合になる。q1q_1 からの遷移も同時に交換されるため、この場合の全4通りの受理言語は (1) のいずれかの交換言語であり、求める対象ではない。

δ(q0,a)=δ(q0,b)=q0\delta(q_0,a)=\delta(q_0,b)=q_0 の場合: どの文字を読んでも q0q_0 にとどまるため、q1q_1 は到達不能である。したがって、δ(q1,a),δ(q1,b)\delta(q_1,a),\delta(q_1,b) の選び方4通りの全てについて、

L(M)=Σ∗={a,b}∗=∥(a+b)∗∥.\boxed{L(M)=\Sigma^*=\{a,b\}^*=\|(a+b)^*\|}.

すなわち、空文字列を含む a,ba,b 上の全ての文字列を受理する。(1) では bb、(2) では aa のように、各場合に少なくとも一つ不受理の文字列がある。文字の交換は全単射なので、それらの交換言語も Σ∗\Sigma^* にはならない。よって上記が求める言語であり、該当する遷移関数は4通りある。状態集合は指定どおり {q0,q1}\{q_0,q_1\} のままでよい。

【問2】​

(A)(1)​

次の生成規則を与える。

S→XaXaXaX,X→aX∣bX∣ε.\boxed{\begin{aligned} S&\to XaXaXaX,\\ X&\to aX\mid bX\mid\varepsilon. \end{aligned}}

XX は {a,b}∗\{a,b\}^* の任意の文字列を生成する。SS の規則には3個の aa が明示されているので、生成される文字列の aa は3個以上となる。逆に、aa を3個以上含む文字列から3個の aa を選ぶと、その前後と間を四つの XX で生成できる。よって生成言語はちょうど L1L_1 である。

(A)(2)​

非終端記号を SS だけとして、次の生成規則を与える。

S→SaS∣SaSaSbS∣SaSbSaS∣SbSaSaS∣ε.\boxed{\begin{aligned} S\to{}&SaS\\ \mid{}&SaSaSbS\\ \mid{}&SaSbSaS\\ \mid{}&SbSaSaS\\ \mid{}&\varepsilon. \end{aligned}}

生成される文字列が条件を満たすこと。 d(w)=∣w∣a−2∣w∣bd(w)=|w|_a-2|w|_b と置く。SaSSaS は dd を1増やし、他の三つの非空規則は aa を2個、bb を1個加えるので dd を変えない。S→εS\to\varepsilon の値は0である。導出木について帰納すれば、生成される全ての文字列で d(w)≥0d(w)\ge0 となる。

条件を満たす全ての文字列を生成できること。 d(w)≥0d(w)\ge0 で bb を含む文字列は、連続部分文字列 aab,aba,baaaab,aba,baa のいずれかを含む。実際、これらを全て含まないと仮定すると、aa は連続できず、二つの aa の間には少なくとも2個の bb が必要になる。A=∣w∣a,B=∣w∣bA=|w|_a,B=|w|_b とすると、B≥1B\ge1 および A≥2BA\ge2B から A≥2A\ge2 である一方、

B≥2(A−1),A≥2B⟹3A≤4B\ge2(A-1),\qquad A\ge2B \quad\Longrightarrow\quad 3A\le4

となり矛盾する。

そこで aab,aba,baaaab,aba,baa のいずれかを削除する。この操作は d(w)d(w) を変えず、bb を1個減らすので、繰り返すと aa だけの文字列になる。その aa も1個ずつ削除して空文字列にできる。

これを逆にたどれば、空文字列から任意の位置へ aa、aabaab、abaaba、baabaa を挿入して元の文字列を復元できる。上の文法では、挿入した文字の前後と各文字間に SS を残せるため、これら全ての挿入を実現できる。最後に残った SS を ε\varepsilon にすればよい。よって生成言語はちょうど L2L_2 である。特に aaaa も S⇒SaS⇒SaSaS⇒aaS\Rightarrow SaS\Rightarrow SaSaS\Rightarrow aa と生成できる。

(A)(3)​

条件の「または」に従って二つの言語の和に分ける。

L3={aib2ick∣i,k≥0}∪{aibjc3j∣i,j≥0}.\begin{aligned} L_3={}&\{a^ib^{2i}c^k\mid i,k\ge0\}\\ &\cup\{a^ib^jc^{3j}\mid i,j\ge0\}. \end{aligned}

指定された N3={S,V,X,Y,Z}N_3=\{S,V,X,Y,Z\} を用いて、

S→VZ∣XY,V→aVbb∣ε,Z→cZ∣ε,X→aX∣ε,Y→bYccc∣ε\boxed{\begin{aligned} S&\to VZ\mid XY,\\ V&\to aVbb\mid\varepsilon,\\ Z&\to cZ\mid\varepsilon,\\ X&\to aX\mid\varepsilon,\\ Y&\to bYccc\mid\varepsilon \end{aligned}}

とする。VV は aib2ia^ib^{2i}、ZZ は任意の ckc^k を生成するので、VZVZ は第1の言語を生成する。XX は任意の aia^i、YY は bjc3jb^jc^{3j} を生成するので、XYXY は第2の言語を生成する。いずれも文字の順序 a∗b∗c∗a^*b^*c^* が保たれ、i,j,k=0i,j,k=0 の場合も含まれる。したがって生成言語は L3L_3 と一致する。

(B)(4)​

L4=∅L_4=\varnothing は文脈自由言語である。 例えば、

G4=({S},{a},{S→S},S)G_4=(\{S\},\{a\},\{S\to S\},S)

という文脈自由文法を考える。SS からの導出では常に非終端記号 SS が残り、終端記号だけからなる文字列は一つも得られない。したがって L(G4)=∅L(G_4)=\varnothing である。ε\varepsilon も生成されないので、∅\varnothing と {ε}\{\varepsilon\} を混同していない。

(B)(5)​

任意の有限言語 L5L_5 は文脈自由言語である。 L5={w1,…,wm}L_5=\{w_1,\ldots,w_m\}(m≥1m\ge1)と書き、その終端記号の集合を Σ\Sigma とする。生成規則を

P5={S→wi∣1≤i≤m}P_5=\{S\to w_i\mid1\le i\le m\}

とすれば、文法 ({S},Σ,P5,S)(\{S\},\Sigma,P_5,S) が生成する文字列はちょうど w1,…,wmw_1,\ldots,w_m である。wi=εw_i=\varepsilon なら S→εS\to\varepsilon を含めればよい。生成規則は有限個で、各右辺も有限長であるため、有効な文脈自由文法となる。なお、有限言語は正規言語でもある。

Reference​