跳到主要内容

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

Author​

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

Description​

日本語版​

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

S::=f(x;y)=EE::=n∣x∣y∣D(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 EE に D(n)\mathrm D(n)(ただし n>0n>0)という形の部分式が含まれているとき、その部分式 D(n)\mathrm D(n) を nn から 1 を引いた整数で置き換える。

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

規則 3 EE に B(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 EE に f(n1;n2)\mathrm f(n_1;n_2) という形の部分式が含まれているとき、その部分式 f(n1;n2)\mathrm f(n_1;n_2) を、E0E_0 に現れる全ての x\mathrm x を n1n_1 に、全ての y\mathrm y を n2n_2 に置き換えた式で置き換える。

EE に含まれる部分式のひとつに対して SS の下で上記規則のひとつを適用すると EE が E′E' になることを ⟨S,E⟩⟶⟨S,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 である。

PP と QQ を以下のように定義する。

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::=n∣x∣y∣D(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)→n−1\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_1;n≠0n\ne0 时 B(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. 求 PP 下 f(3;1)\mathrm f(3;1) 的求值结果。
  3. 证明对任意非负整数 n1,n2n_1,n_2,P,QP,Q 下 f(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)=2n2−1\boxed{T(n_2)=2^{n_2}-1}。

其他终止重写顺序的次数也相同:第二参数非零时,两个递归结果都必须参与本层加法;到零时,舍弃分支中的调用被 D(0)\mathrm D(0) 阻塞,不能产生额外的数值加法。