跳到主要内容

東京大学 情報理工学系研究科 コンピュータ科学専攻 2024年8月実施 専門科目 問題1

Author​

vv, 祭音Myyura (co-authored with GPT 5.2 extended thinking)

Description​

Σ={a,b,c}\Sigma = \{a, b, c\} とする.Σ\Sigma 上の言語 L⊆Σ∗L \subseteq \Sigma^* に対して,言語 H(L)⊆Σ∗\mathcal{H}(L)\subseteq \Sigma^* を以下によって定義する.

H(L)={w∈Σ∗∣ww∈L}\mathcal{H}(L) = \{ w \in \Sigma^* \mid ww \in L \}

例えば,L1={aa,abc,abab,baab,cca}L_1 = \{aa, abc, abab, baab, cca\} ならば,H(L1)={a,ab}\mathcal{H}(L_1) = \{a, ab\} である.以下の問いに答えよ.

(1) L2L_2 を正規表現 a(a+b)∗c(a+b)∗bca(a+b)^*c(a+b)^*bc で表される言語とする.H(L2)\mathcal{H}(L_2) を正規表現として表せ.

(2) 以下の有限オートマトンによって受理される言語を L3L_3 とする.ただし,初期状態は q0q_0 であり,受理状態の集合は {q1}\{q_1\} である.H(L3)\mathcal{H}(L_3) を受理する状態数最小の決定性有限オートマトンを構成せよ.

(3) 以下の命題 1 が真であるか否かを答え,真であればその証明を,そうでなければ簡単な説明とともに反例を示せ.

  • 命題 1: Σ\Sigma 上のすべての正規言語 L⊆Σ∗L \subseteq \Sigma^* について,H(L)\mathcal{H}(L) も正規言語である.

(4) 以下の命題 2 が真であるか否かを答え,真であればその証明を,そうでなければ簡単な説明とともに反例を示せ.

  • 命題 2: Σ\Sigma 上のすべての文脈自由言語 L⊆Σ∗L \subseteq \Sigma^* について,H(L)\mathcal{H}(L) も文脈自由言語である.

题目描述​

令 Σ={a,b,c}\Sigma=\{a,b,c\}。对语言 L⊆Σ∗L\subseteq\Sigma^*,定义其“平方根”语言

H(L)={w∈Σ∗∣ww∈L}.\mathcal H(L)=\{w\in\Sigma^*\mid ww\in L\}.

例如 L1={aa,abc,abab,baab,cca}L_1=\{aa,abc,abab,baab,cca\} 时, H(L1)={a,ab}\mathcal H(L_1)=\{a,ab\}。回答下列问题。

(1)语言 L2L_2 由正则表达式

a(a+b)∗c(a+b)∗bca(a+b)^*c(a+b)^*bc

表示。用正则表达式表示 H(L2)\mathcal H(L_2)。

(2)L3L_3 是题图有限自动机识别的语言,其中初始状态为 q0q_0,接受状态集为 {q1}\{q_1\}。构造识别 H(L3)\mathcal H(L_3) 的状态数最少的 DFA。

(3)判断命题 1 是否成立:对 Σ\Sigma 上每个正则语言 LL,H(L)\mathcal H(L) 也为正则语言。若成立则证明;否则给出反例并简要说明。

(4)判断命题 2 是否成立:对 Σ\Sigma 上每个上下文无关语言 LL,H(L)\mathcal H(L) 也为上下文无关语言。若成立则证明;否则给出反例并简要说明。

Kai​

(1)​

先把 L2L_2 的形状写清楚:任意 s∈L2s\in L_2 都可写成

s=axcybc,x,y∈{a,b}∗s = axcybc,\quad x,y\in\{a,b\}^*

因此 ss 中的字母 cc 恰好出现两次(中间一次、末尾一次)。

若 ww∈L2ww\in L_2,设 ww 中 cc 的个数为 #c(w)\#_c(w)。则

#c(ww)=2#c(w)=2\#_c(ww)=2\#_c(w)=2

所以 #c(w)=1\#_c(w)=1。又因为 wwww 以 “bcbc” 结尾,所以第二个 ww 也以 “bcbc” 结尾,从而 ww 必须以 “bcbc” 结尾。结合 #c(w)=1\#_c(w)=1,可知 ww 唯一的 cc 就是在末尾,于是

w∈{a,b}∗bcw \in \{a,b\}^*bc

另外 ww∈L2ww\in L_2 还要求整个串以 aa 开头,所以 ww 也必须以 aa 开头。

再看 L2L_2 中“中间那次 cc”的位置:在 wwww 中第一处 cc 必然出现在第一个 ww 的末尾(因为 ww 唯一的 cc 在末尾),所以该 cc 正好落在两个 ww 的拼接边界处。于是第一个 ww 必须形如

w=axcw = axc

并且为了末尾是 bcbc,这里的 xx 必须以 bb 结尾,即 x∈(a+b)∗bx\in (a+b)^*b。令 x=ubx=u b(其中 u∈(a+b)∗u\in(a+b)^*),则

w=aubcw = aubc

反过来,任意 w=aubcw=aubc(u∈(a+b)∗u\in(a+b)^*)都有

ww=a(ub)c(au)bc∈a(a+b)∗c(a+b)∗bc=L2ww = a(ub)c(a u)bc \in a(a+b)^*c(a+b)^*bc = L_2

所以都属于 H(L2)\mathcal{H}(L_2)。

因此

H(L2)={a(a+b)∗bc}\mathcal{H}(L_2)=\{a(a+b)^*bc\}

用正则表达式表示为

a(a+b)∗bc\boxed{a(a+b)^*bc}

(2)​

先总结原 DFA 的关键性质(从图直接读出):

  • 读到 aa:无论在 q0q_0 还是 q1q_1,都会到 q0q_0(相当于“重置到 q0q_0”)。
  • 读到 bb:无论在 q0q_0 还是 q1q_1,都会到 q1q_1(“重置到 q1q_1”)。
  • 读到 cc:在 q0↔q1q_0\leftrightarrow q_1 间切换(“翻转”)。

对任意串 ww,令它在状态集合 {q0,q1}\{q_0,q_1\} 上诱导的状态变换为

fw(q)=δ^(q,w)f_w(q)=\hat\delta(q,w)

那么

ww∈L3  ⟺  δ^(q0,ww)=q1  ⟺  fw(fw(q0))=q1ww\in L_3 \iff \hat\delta(q_0,ww)=q_1 \iff f_w(f_w(q_0))=q_1

注意:一旦 ww 中出现过 aa 或 bb,最后一次出现的 a/ba/b 会把状态“重置”为常量(全映到 q0q_0 或全映到 q1q_1),之后末尾若干个 cc 只会在这两个常量间来回翻转。因此:

  • 若 ww 不含 a,ba,b,即 w=ckw=c^k,则 fwf_w 是“恒等”(k 偶)或“交换”(k 奇),都满足 fw2(q0)=q0f_w^2(q_0)=q_0,所以不在 H(L3)\mathcal{H}(L_3)。
  • 若 ww 含有 aa 或 bb,则 fwf_w 必为常量变换:要么把两状态都送到 q0q_0,要么都送到 q1q_1。只有当 fwf_w 是“常量 q1q_1”时,才有 fw(fw(q0))=q1f_w(f_w(q_0))=q_1。

所以

w∈H(L3)  ⟺  读完 w 后,无论从 q0 还是 q1 出发都到 q1.w\in\mathcal{H}(L_3)\iff \text{读完 }w\text{ 后,无论从 }q_0\text{ 还是 }q_1\text{ 出发都到 }q_1.

把它翻译成“末尾结构”的条件:设 ww 的最后一个属于 {a,b}\{a,b\} 的字母为 ss,其后有 tt 个 cc(即 w=⋯sctw=\cdots s c^t 且之后不再有 a,ba,b)。

  • 若 s=bs=b,读到 bb 重置到 q1q_1,再读 tt 个 cc 翻转 tt 次;要最终在 q1q_1,需 tt 为偶数。
  • 若 s=as=a,读到 aa 重置到 q0q_0,再读 tt 个 cc;要最终在 q1q_1,需 tt 为奇数。

并且必须“出现过 aa 或 bb”(排除纯 ckc^k)。

接下来构造最小 DFA。只需要记住三种情况:

  • SS:至今还没见过 aa 或 bb(只读到若干个 cc)。这是初态,非接受。
  • RR:已经见过 a/ba/b,但当前处于“拒绝型”(对应“末尾情况不满足”)。
  • AA:已经见过 a/ba/b,且当前处于“接受型”(对应“末尾情况满足”)。这是唯一接受态。

转移规则由上面的“重置/翻转”直接给出:

  • 从 SS: cc 仍在 SS;读到 aa 进入拒绝型 RR;读到 bb 进入接受型 AA。
  • 从 RR: 读 aa 重置回 RR;读 bb 重置到 AA;读 cc 会翻转到 AA。
  • 从 AA: 读 aa 重置到 RR;读 bb 留在 AA;读 cc 翻转到 RR。

用转移表表示(字母表 {a,b,c}\{a,b,c\}):

状态aabbcc
SS(初态)RRAASS
RRRRAAAA
AA(接受态)RRAARR

这台 DFA 的接受态集合为 {A}\{A\}。

最小性说明:三状态不可再合并。因为

  • ε\varepsilon(停在 SS)不被接受,但串 bb(停在 AA)被接受,故 S≁AS\not\sim A。
  • 串 aa(停在 RR)不被接受,但 acac 被接受,且 εc=c\varepsilon c=c 不被接受,故 S≁RS\not\sim R。
  • RR 与 AA 一个拒绝一个接受,显然可区分。

因此最少需要 3 个状态,上述构造即为最小 DFA。

(3) 结论:真​

设 LL 是正则语言,被某个 DFA

M=(Q,Σ,δ,q0,F)M=(Q,\Sigma,\delta,q_0,F)

识别。对任意串 w∈Σ∗w\in\Sigma^*,定义它在状态集合上的“整体迁移函数”

τw:Q→Q,τw(q)=δ^(q,w)\tau_w:Q\to Q,\qquad \tau_w(q)=\hat\delta(q,w)

那么

w∈H(L)  ⟺  ww∈L  ⟺  δ^(q0,ww)∈F  ⟺  δ^(δ^(q0,w),w)∈F  ⟺  τw(τw(q0))∈F\begin{aligned} w\in \mathcal{H}(L) &\iff ww\in L\\ &\iff \hat\delta(q_0,ww)\in F\\ &\iff \hat\delta(\hat\delta(q_0,w),w)\in F\\ &\iff \tau_w(\tau_w(q_0))\in F \end{aligned}

关键点:τw\tau_w 只是 QQ 到 QQ 的函数,而 QQ 有限,因此所有函数 Q→QQ\to Q 的集合

T=QQT = Q^Q

是有限集合(大小为 ∣Q∣∣Q∣|Q|^{|Q|})。

据此构造一个新的 DFA M′M' 来识别 H(L)\mathcal{H}(L):

  • 状态集合:TT(所有函数 Q→QQ\to Q)。
  • 初态:恒等函数 idQ\mathrm{id}_Q(对应空串的迁移)。
  • 读入一个字母 x∈Σx\in\Sigma 时的更新:令 τx(q)=δ(q,x)\tau_x(q)=\delta(q,x)(单字母的迁移),则 δ′(φ,x)=τx∘φ\delta'(\varphi,x)=\tau_x\circ \varphi. 这样读完 ww 后,φ\varphi 恰为 τw\tau_w。
  • 接受态集合:F′={φ∈T∣φ(φ(q0))∈F}F'=\{\varphi\in T\mid \varphi(\varphi(q_0))\in F\}.

于是对任意 ww,M′M' 读完 ww 后所在状态为 τw\tau_w,而接受条件正是 τw(τw(q0))∈F\tau_w(\tau_w(q_0))\in F,等价于 ww∈Lww\in L。因此 L(M′)=H(L)L(M')=\mathcal{H}(L)。

由于 M′M' 是有限自动机(状态数有限),H(L)\mathcal{H}(L) 是正则语言。命题 1 成立。

(4) 结论:假​

给出一个上下文无关语言 LL,使得 H(L)\mathcal H(L) 不是上下文无关语言。

取

L=L1L2,L1={anbnck∣n,k≥0},L2={aibmcm∣i,m≥0}.L=L_1L_2, \qquad L_1=\{a^n b^n c^k\mid n,k\ge0\}, \qquad L_2=\{a^i b^m c^m\mid i,m\ge0\}.

也就是

L={anbnckaibmcm∣n,k,i,m≥0}.L=\{a^n b^n c^k a^i b^m c^m\mid n,k,i,m\ge0\}.

说明 LL 是 CFL:

  • L1L_1 是 CFL,例如可由 S1→UT, U→aUb∣ε, T→cT∣εS_1\to UT,\ U\to aUb\mid\varepsilon,\ T\to cT\mid\varepsilon 生成;
  • L2L_2 也是 CFL,例如可由 S2→AB, A→aA∣ε, B→bBc∣εS_2\to AB,\ A\to aA\mid\varepsilon,\ B\to bBc\mid\varepsilon 生成。

CFL 对连接封闭,所以 L=L1L2L=L_1L_2 是 CFL。

接下来证明 H(L)\mathcal H(L) 不是 CFL。考虑正则语言

R=a+b+c+.R=a^+b^+c^+.

若 H(L)\mathcal H(L) 是 CFL,则由于 CFL 与正则语言的交仍为 CFL, H(L)∩R\mathcal H(L)\cap R 也应是 CFL。

计算 H(L)∩R\mathcal H(L)\cap R。设 w∈Rw\in R,则

w=apbqcr(p,q,r≥1),w=a^p b^q c^r\qquad(p,q,r\ge1),

从而

ww=apbqcrapbqcr.ww=a^p b^q c^r a^p b^q c^r.

断言

ww∈L  ⟺  p=q=r.ww\in L\iff p=q=r.

理由如下。

  • 若 ww∈L=L1L2ww\in L=L_1L_2,则存在分割 ww=xyww=xy,使得 x∈L1⊆a∗b∗c∗x\in L_1\subseteq a^*b^*c^*,y∈L2⊆a∗b∗c∗y\in L_2\subseteq a^*b^*c^*。 串 ww=apbqcrapbqcrww=a^pb^qc^ra^pb^qc^r 中,两个拷贝的交界处出现因子 caca。 因为 xx 不可能越过该因子,而 yy 若从该因子之前开始就会包含它, 分割点只能恰在两个 ww 之间。因此 x=y=wx=y=w。 由 x∈L1x\in L_1 得 p=qp=q,由 y∈L2y\in L_2 得 q=rq=r,故 p=q=rp=q=r。
  • 反过来,若 p=q=rp=q=r,则 ww=(apbpcp)(apbpcp)ww=(a^p b^p c^p)(a^p b^p c^p)。前一项属于 L1L_1,后一项属于 L2L_2,所以 ww∈Lww\in L。

因此,对于 w∈Rw\in R,

w∈H(L)  ⟺  ww∈L  ⟺  p=q=r  ⟺  w∈{anbncn∣n≥1}.\begin{aligned} w\in\mathcal H(L) &\iff ww\in L\\ &\iff p=q=r\\ &\iff w\in\{a^n b^n c^n\mid n\ge1\}. \end{aligned}

也就是说

H(L)∩R={anbncn∣n≥1}.\mathcal H(L)\cap R =\{a^n b^n c^n\mid n\ge1\}.

右侧是经典的非上下文无关语言,矛盾。因此 H(L)\mathcal H(L) 不是 CFL, 命题 2 为假。