跳到主要内容

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

Author

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

Description

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

H(L)={wΣwwL}\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ΣwwL}.\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 上每个正则语言 LLH(L)\mathcal H(L) 也为正则语言。若成立则证明;否则给出反例并简要说明。

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

Kai

Kai

(1)

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

s=a,x,c,y,b,c,x,y{a,b}s = a,x,c,y,b,c,\quad x,y\in\{a,b\}^*

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

wwL2ww\in L_2,设 wwcc 的个数为 #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

另外 wwL2ww\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=aubcu(a+b)u\in(a+b)^*)都有

ww=a(ub)c(au)bca(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:在 q0q1q_0\leftrightarrow q_1 间切换(“翻转”)。

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

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

那么

wwL3    δ^(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 中出现过 aabb,最后一次出现的 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 含有 aabb,则 fwf_w 必为常量变换:要么把两状态都送到 q0q_0,要么都送到 q1q_1。只有当 fwf_w 是“常量 q1q_1”时,才有 fw(fw(q0))=q1f_w(f_w(q_0))=q_1

所以

wH(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,其后有 ttcc(即 w=sctw=\cdots s c^t 且之后不再有 a,ba,b)。

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

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

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

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

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

  • SScc 仍在 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
  • RRAA 一个拒绝一个接受,显然可区分。

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

(3) 结论:真

LL 是正则语言,被某个 DFA

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

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

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

那么

wH(L)    wwL    δ^(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 只是 QQQQ 的函数,而 QQ 有限,因此所有函数 QQQ\to Q 的集合

T=QQT = Q^Q

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

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

  • 状态集合:TT(所有函数 QQQ\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\}.

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

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

(4) 结论:假

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

L={anbnckn,k0}L1 {aibmcmi,m0}L2L=\underbrace{\{a^n b^n c^k \mid n,k\ge 0\}}_{L_1}\ \underbrace{\{a^i b^m c^m \mid i,m\ge 0\}}_{L_2}

也就是

L={anbnckaibmcmn,k,i,m0}L=\{a^n b^n c^k a^i b^m c^m \mid n,k,i,m\ge 0\}

说明 LL 是 CFL:

L1L_1 是 CFL(例如文法 S1aS1bT, TcTεS_1\to aS_1b\mid T,\ T\to cT\mid\varepsilon);

L2L_2 也是 CFL(例如 S2A,B, AaAε, BbBcεS_2\to A,B,\ A\to aA\mid\varepsilon,\ B\to bBc\mid\varepsilon);

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

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

R=abc.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。设 wRw\in R,则

w=apbqcr(p,q,r0).w=a^p b^q c^r \quad(p,q,r\ge 0).

那么

ww=apbqcrapbqcrww=a^p b^q c^r a^p b^q c^r

断言:对这类 ww,有

wwL    p=q=rww\in L \iff p=q=r

理由如下。

  • wwL=L1L2ww\in L=L_1L_2,则存在分割 ww=xyww=xy 使得 xL1=anbncx\in L_1=a^n b^n c^*yL2=abmcmy\in L_2=a^* b^m c^m。因为 xx 必须先读完一段 ana^n 再读 bnb^n。在 wwww 的开头,aa 是一整段 apa^p。若 n<pn<p,则在读完 ana^n 后下一个符号仍是 aa,不可能开始 bnb^n。所以必须 n=pn=p。同理,为了让 xxbnb^n 紧接在这 apa^p 之后,必须正好消耗掉开头的全部 bqb^q,因此还要 q=pq=p。否则 qpq\neq p 会导致 xx 进入 cc^* 前还残留或不足 bb,无法匹配。于是 p=qp=q,并且此时 xx 只能是 apbpcta^p b^p c^ttrt\le r)。若 t<rt<r,则 yy 将以 cc 开头,但 L2L_2 的串必须形如 abmcma^*b^m c^m,不能以 cc 开头,因此必须 t=rt=r。所以分割点被迫落在两个拷贝之间:x=apbpcrx=a^p b^p c^ry=apbpcry=a^p b^p c^r。现在 yL2y\in L_2 要求其后半部分 bpcrb^p c^r 满足 p=rp=r。结合 p=qp=q,得到 p=q=rp=q=r
  • 反过来,若 p=q=rp=q=r,则 ww=apbpcp apbpcpww=a^p b^p c^p\ a^p b^p c^p 显然可取 x=apbpcpL1x=a^p b^p c^p\in L_1y=apbpcpL2y=a^p b^p c^p\in L_2,所以 wwLww\in L

因此对于 wRw\in R

wH(L)    wwL    p=q=r    w{anbncnn0}\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\ge 0\} \end{aligned}

也就是说

H(L){anbncnn0}\mathcal{H}(L)\cap \{a^n b^n c^n\mid n\ge 0\}

{anbncnn0}\{a^n b^n c^n\mid n\ge 0\} 是经典的“非上下文无关语言”。于是 H(L)R\mathcal{H}(L)\cap R 不是 CFL,矛盾。

所以 H(L)\mathcal{H}(L) 不可能是 CFL。命题 2 为假。