跳到主要内容

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

Author

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

Description

日本語版

以下の手続き型プログラミング言語を考える。

P::=x=xx[P;P]w[x]Px::=ab\begin{aligned}P&::=\mathtt{x=x-x}\mid[P;P]\mid\mathtt{w[x]}P\\x&::=\mathtt a\mid\mathtt b\end{aligned}

ここで、PP および xx はプログラムおよび変数をそれぞれ表す非終端記号であり、a,b,w,=,,[,;,]\mathtt a,\mathtt b,\mathtt w,=,-,[,;,] は終端記号である。変数 a\mathtt ab\mathtt b は整数の値を保持する。変数の初期値はプログラムの外から実行前に与えられる。各構文の意味は以下の通りである。x1=x2x3x_1=x_2-x_3 は、x2x_2 の値から x3x_3 の値を引いた数で x1x_1 の値を置き換える。[P1;P2][P_1;P_2] は、P1P_1P2P_2 をこの順に続けて実行する。w[x]P\mathtt{w[x]}P は、xx の値が 00 以下になるまで PP の実行を繰り返す。

AA および BB を変数の値に関する条件とする。PP の実行前に AA が成り立つならば PP が停止したときに BB が成り立つことを {A}P{B}\{A\}P\{B\} と書く。以下の規則の組み合わせのみから {A}P{B}\{A\}P\{B\} が得られることを {A}P{B}\vdash\{A\}P\{B\} と書く。

規則 1 PPx1=x2x3x_1=x_2-x_3 という形のとき、BB に現れる全ての x1x_1 を式 x2x3x_2-x_3 に置き換えて得られた条件が AA と文字通り一致するならば、{A}P{B}\{A\}P\{B\} である。

規則 2 PP[P1;P2][P_1;P_2] という形のとき、ある条件 CC が存在し {A}P1{C}\{A\}P_1\{C\} かつ {C}P2{B}\{C\}P_2\{B\} ならば、{A}P{B}\{A\}P\{B\} である。

規則 3 PPw[x]P\mathtt{w[x]}P' という形のとき、{A かつ x>0}P{A}\{A\text{ かつ }x>0\}P'\{A\} ならば、{A}P{A かつ x0}\{A\}P\{A\text{ かつ }x\le0\} である。

規則 4 ある条件 C,DC,D が存在し、CCAA の必要条件、DDBB の十分条件であるとき、{C}P{D}\{C\}P\{D\} ならば、{A}P{B}\{A\}P\{B\} である。

例えば、{a0}w[a][a=aa]{a=0}\vdash\{a\ge0\}\mathtt{w[a]\,[a=a-a]}\{a=0\} である。なぜならば、

  1. {aa0}a=aa{a0}\{a-a\ge0\}\mathtt{a=a-a}\{a\ge0\}(規則 1)
  2. {a0 かつ a>0}a=aa{a0}\{a\ge0\text{ かつ }a>0\}\mathtt{a=a-a}\{a\ge0\}(規則 4)
  3. {a0}w[a][a=aa]{a0 かつ a0}\{a\ge0\}\mathtt{w[a]\,[a=a-a]}\{a\ge0\text{ かつ }a\le0\}(規則 3)
  4. {a0}w[a][a=aa]{a=0}\{a\ge0\}\mathtt{w[a]\,[a=a-a]}\{a=0\}(規則 4)

だからである。

F\mathcal F をプログラム w[a][a=ba;b=ba]\mathtt{w[a]\,[a=b-a;b=b-a]} とする。以下の問に答えよ。

(1) F\mathcal F の構文木を、F\mathcal F の全ての終端記号が葉として現れる木構造として図示せよ。

(2) 初期値を (a,b)=(23,41)(a,b)=(23,41) として F\mathcal F を実行し、F\mathcal F が停止したときの aabb の値を求めよ。

(3) {ある整数 i が存在し、i0 かつ (ab)=(0111)i(01)}F{b=1}\vdash\{\text{ある整数 }i\text{ が存在し、}i\ge0\text{ かつ }\binom ab=\left(\begin{smallmatrix}0&1\\1&1\end{smallmatrix}\right)^i\binom01\}\mathcal F\{b=1\} を示せ。

(4) aa および bb の任意の初期値に対して F\mathcal F が停止するかどうか判定せよ。その根拠を示せ。

题目描述

命令式语言的语法为

P::=x=xx[P;P]w[x]P,x::=ab.P::=x=x-x\mid[P;P]\mid\mathrm w[x]P,\qquad x::=\mathrm a\mid\mathrm b.

变量 a,b\mathrm a,\mathrm b 存放整数。赋值 x1=x2x3x_1=x_2-x_3 以右边计算值替换 x1x_1[P1;P2][P_1;P_2] 顺序执行;w[x]P\mathrm w[x]Px>0x>0 时反复执行 PP,直到 x0x\le0

Hoare 三元组 {A}P{B}\{A\}P\{B\} 表示:若执行前满足 AA,则程序终止时满足 BB。符号 \vdash 表示仅由以下规则可导出:

  1. 赋值规则:若 AA 正好是将 BBx1x_1 替换为 x2x3x_2-x_3 后的命题,则 {A}x1=x2x3{B}\vdash\{A\}\,x_1=x_2-x_3\,\{B\}
  2. 顺序规则:从 {A}P1{C}\vdash\{A\}P_1\{C\}{C}P2{B}\vdash\{C\}P_2\{B\}{A}[P1;P2]{B}\vdash\{A\}[P_1;P_2]\{B\}
  3. 循环规则:从 {Ax>0}P{A}\vdash\{A\land x>0\}P\{A\}{A}w[x]P{Ax0}\vdash\{A\}\mathrm w[x]P\{A\land x\le0\}
  4. 后果规则:若 AC,DBA\Rightarrow C,D\Rightarrow B{C}P{D}\vdash\{C\}P\{D\},则 {A}P{B}\vdash\{A\}P\{B\}

F=w[a][a=ba;b=ba]\mathcal F=\mathrm w[a][a=b-a;b=b-a]

  1. 画语法树,使全部终结符出现在叶子上。
  2. 初值 (a,b)=(23,41)(a,b)=(23,41) 时执行程序,求终止值。
  3. 证明
{iZ0, (ab)=(0111)i(01)}F{b=1}.\vdash\left\{\exists i\in\mathbb Z_{\ge0},\ \binom ab=\begin{pmatrix}0&1\\1&1\end{pmatrix}^{i}\binom01\right\}\mathcal F\{b=1\}.
  1. 对任意整数初值,F\mathcal F 是否都终止?说明理由。

Kai

(1)

(2)

注意第二次赋值使用更新后的 aa,因此每轮映射为 (a,b)(ba,a)(a,b)\mapsto(b-a,a)

(23,41)(18,23)(5,18)(13,5)(8,13).(23,41)\to(18,23)\to(5,18)\to(13,5)\to(-8,13).

此时 a0a\le0,所以 (a,b)=(8,13)\boxed{(a,b)=(-8,13)}

(3)

M=(0111)M=\begin{pmatrix}0&1\\1&1\end{pmatrix}I(a,b)I(a,b) 表示题设前置条件。Mi(0,1)T=(Fi,Fi+1)TM^i(0,1)^T=(F_i,F_{i+1})^T,其中 F0=0,F1=1F_0=0,F_1=1;故 Ia>0I\land a>0 蕴含 i1i\ge1

循环体对应矩阵 M1=(1110)M^{-1}=\begin{pmatrix}-1&1\\1&0\end{pmatrix},于是

I(a,b)a>0  I(ba,a).I(a,b)\land a>0\ \Longrightarrow\ I(b-a,a).

取中间断言 J(a,b)=I(a,ba)J(a,b)=I(a,b-a)。由两次赋值规则,

{I(ba,a)} a=ba {J(a,b)},\vdash\{I(b-a,a)\}\ a=b-a\ \{J(a,b)\},
{J(a,b)} b=ba {I(a,b)}.\vdash\{J(a,b)\}\ b=b-a\ \{I(a,b)\}.

应用后果规则与顺序规则,得到 {Ia>0}[a=ba;b=ba]{I}\vdash\{I\land a>0\}[a=b-a;b=b-a]\{I\}。由循环规则,退出时满足 Ia0I\land a\le0;而 Fi>0F_i>0i1i\ge1 成立,故只能 i=0i=0,于是 (a,b)=(0,1)(a,b)=(0,1)。最后用后果规则即得所证三元组。

(4)

对所有整数初值都终止。若初始 a0a\le0,立即退出。若反设无限执行,记各轮起始值为 an,bna_n,b_n,则所有 ana_n 为正整数,且

an+1=bnan,bn+1=an,an+2=anan+1>0.a_{n+1}=b_n-a_n,\quad b_{n+1}=a_n,\quad a_{n+2}=a_n-a_{n+1}>0.

因此 an+1<ana_{n+1}<a_n,构成无限严格递减的正整数序列,矛盾。