跳到主要内容

東北大学 工学研究科 電気・情報系 2017年8月実施 専門科目 問題5 計算機2

Author

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

Description

日本語版

nn は非負整数を表すとする。以下の言語を考える。

S::=f(x;y)=EE::=nxyD(E)A(E;E)B(E;E;E)f(E;E)\begin{aligned} S&::=\mathrm f(\mathrm x;\mathrm y)=E\\ E&::=n\mid\mathrm x\mid\mathrm y\mid\mathrm D(E)\mid\mathrm A(E;E)\mid\mathrm B(E;E;E)\mid\mathrm f(E;E) \end{aligned}

ここで、SS および EE はそれぞれ関数定義および式を表す非終端記号であり、また n, f, x, y, A, D, B, (, ;, ) および = は終端記号である。

EE は関数定義 SS の下で評価される。S=f(x;y)=E0S=\mathrm f(\mathrm x;\mathrm y)=E_0 の下での EE の評価は、EE を以下の規則に従って書き換えることによって行う。

規則 1 EED(n)\mathrm D(n)(ただし n>0n>0)という形の部分式が含まれているとき、その部分式 D(n)\mathrm D(n)nn から 1 を引いた整数で置き換える。

規則 2 EEA(n1;n2)\mathrm A(n_1;n_2) という形の部分式が含まれているとき、その部分式 A(n1;n2)\mathrm A(n_1;n_2)n1n_1n2n_2 の和に等しい整数で置き換える。

規則 3 EEB(n;E1;E2)\mathrm B(n;E_1;E_2) という形の部分式が含まれているとき、その部分式 B(n;E1;E2)\mathrm B(n;E_1;E_2) を、n=0n=0 ならば E1E_1 に、そうでなければ E2E_2 に置き換える。

規則 4 EEf(n1;n2)\mathrm f(n_1;n_2) という形の部分式が含まれているとき、その部分式 f(n1;n2)\mathrm f(n_1;n_2) を、E0E_0 に現れる全ての x\mathrm xn1n_1 に、全ての y\mathrm yn2n_2 に置き換えた式で置き換える。

EE に含まれる部分式のひとつに対して SS の下で上記規則のひとつを適用すると EEEE' になることを S,ES,E\langle S,E\rangle\longrightarrow\langle S,E'\rangle と書く。また、\longrightarrow の 0 回以上の繰り返しを \xrightarrow{*} と書く。例えば

S,A(D(5);D(4))S,A(4;D(4))S,A(4;3)S,7\langle S,\mathrm A(\mathrm D(5);\mathrm D(4))\rangle\longrightarrow\langle S,\mathrm A(4;\mathrm D(4))\rangle\longrightarrow\langle S,\mathrm A(4;3)\rangle\longrightarrow\langle S,7\rangle

であり、従って、S,A(D(5);D(4))S,7\langle S,\mathrm A(\mathrm D(5);\mathrm D(4))\rangle\xrightarrow{*}\langle S,7\rangle である。

PPQQ を以下のように定義する。

P=f(x;y)=B(y;x;f(A(x;x);D(y)))Q=f(x;y)=B(y;x;A(f(x;D(y));f(x;D(y))))\begin{aligned} P&=\mathrm f(\mathrm x;\mathrm y)=\mathrm B(\mathrm y;\mathrm x;\mathrm f(\mathrm A(\mathrm x;\mathrm x);\mathrm D(\mathrm y)))\\ Q&=\mathrm f(\mathrm x;\mathrm y)=\mathrm B(\mathrm y;\mathrm x;\mathrm A(\mathrm f(\mathrm x;\mathrm D(\mathrm y));\mathrm f(\mathrm x;\mathrm D(\mathrm y)))) \end{aligned}

次の問に答えよ。

(1) PP の構文木を、終端記号を葉とする木構造として図示せよ。

(2) P,f(3;1)P,n\langle P,\mathrm f(3;1)\rangle\xrightarrow{*}\langle P,n\rangle なる nn を求めよ。

(3) 任意の非負整数 n1,n2n_1,n_2 について、ある nn が存在し、P,f(n1;n2)P,n\langle P,\mathrm f(n_1;n_2)\rangle\xrightarrow{*}\langle P,n\rangle かつ Q,f(n1;n2)Q,n\langle Q,\mathrm f(n_1;n_2)\rangle\xrightarrow{*}\langle Q,n\rangle であることを証明せよ。

(4) 評価 Q,f(n1;n2)Q,n\langle Q,\mathrm f(n_1;n_2)\rangle\xrightarrow{*}\langle Q,n\rangle において規則 2 が使われた回数を n2n_2 を用いた式で表せ。

题目描述

给定语言

S::=f(x;y)=E,E::=nxyD(E)A(E;E)B(E;E;E)f(E;E),S::=\mathrm f(\mathrm x;\mathrm y)=E,\qquad E::=n\mid\mathrm x\mid\mathrm y\mid\mathrm D(E)\mid\mathrm A(E;E)\mid\mathrm B(E;E;E)\mid\mathrm f(E;E),

其中 nn 是非负整数。函数定义 S=f(x;y)=E0S=\mathrm f(\mathrm x;\mathrm y)=E_0 下可在任一子表达式使用以下重写规则:

  1. D(n)n1\mathrm D(n)\to n-1,仅当 n>0n>0
  2. A(n1;n2)n1+n2\mathrm A(n_1;n_2)\to n_1+n_2
  3. B(0;E1;E2)E1\mathrm B(0;E_1;E_2)\to E_1n0n\ne0B(n;E1;E2)E2\mathrm B(n;E_1;E_2)\to E_2
  4. f(n1;n2)\mathrm f(n_1;n_2) 替换为 E0E_0,其中所有 x,y\mathrm x,\mathrm y 分别替换为 n1,n2n_1,n_2

P:f(x;y)=B(y;x;f(A(x;x);D(y))),P:\quad\mathrm f(\mathrm x;\mathrm y)=\mathrm B(\mathrm y;\mathrm x;\mathrm f(\mathrm A(\mathrm x;\mathrm x);\mathrm D(\mathrm y))),
Q:f(x;y)=B(y;x;A(f(x;D(y));f(x;D(y)))).Q:\quad\mathrm f(\mathrm x;\mathrm y)=\mathrm B(\mathrm y;\mathrm x;\mathrm A(\mathrm f(\mathrm x;\mathrm D(\mathrm y));\mathrm f(\mathrm x;\mathrm D(\mathrm y)))).
  1. PP 的语法树,每个叶子必须为终结符。
  2. PPf(3;1)\mathrm f(3;1) 的求值结果。
  3. 证明对任意非负整数 n1,n2n_1,n_2P,QP,Qf(n1;n2)\mathrm f(n_1;n_2) 均可重写至相同整数 nn
  4. QQ 下上述求值使用规则 2 的次数,以 n2n_2 表示。

Kai

(1)

以下为具体语法树,括号、分号与等号也列为终结叶。

(2)

f(3;1)B(1;3;f(A(3;3);D(1)))f(A(3;3);D(1))f(6;0)B(0;6;f(A(6;6);D(0)))6.\begin{aligned} \mathrm f(3;1)&\to\mathrm B(1;3;\mathrm f(\mathrm A(3;3);\mathrm D(1)))\\ &\to\mathrm f(\mathrm A(3;3);\mathrm D(1)) \to^*\mathrm f(6;0)\\ &\to\mathrm B(0;6;\mathrm f(\mathrm A(6;6);\mathrm D(0)))\to6. \end{aligned}

所以 n=6\boxed{n=6}

(3)

两者均计算 n=2n2n1\boxed{n=2^{n_2}n_1}。对 n2n_2 归纳:n2=0n_2=0 时规则 3 直接给出 n1n_1。若结论对 kk 成立,则

P(n1,k+1)=P(2n1,k)=2k+1n1,P(n_1,k+1)=P(2n_1,k)=2^{k+1}n_1,
Q(n1,k+1)=Q(n1,k)+Q(n1,k)=2k+1n1.Q(n_1,k+1)=Q(n_1,k)+Q(n_1,k)=2^{k+1}n_1.

递归的第二参数严格减小;到零时选取首分支,不求值 D(0)\mathrm D(0),所以以上求值均可终止。

(4)

按先选定条件分支、再求所选分支的求值顺序,设规则 2 的次数为 T(k)T(k),则

T(0)=0,T(k+1)=2T(k)+1.T(0)=0,\qquad T(k+1)=2T(k)+1.

解得 T(n2)=2n21\boxed{T(n_2)=2^{n_2}-1}