跳到主要内容

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

Author​

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

Description​

日本語版​

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

P::=x=x−x∣[P;P]∣w[x]Px::=a∣b\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 a と b\mathtt b は整数の値を保持する。変数の初期値はプログラムの外から実行前に与えられる。各構文の意味は以下の通りである。x1=x2−x3x_1=x_2-x_3 は、x2x_2 の値から x3x_3 の値を引いた数で x1x_1 の値を置き換える。[P1;P2][P_1;P_2] は、P1P_1 と P2P_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 PP が x1=x2−x3x_1=x_2-x_3 という形のとき、BB に現れる全ての x1x_1 を式 x2−x3x_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 PP が w[x]P′\mathtt{w[x]}P' という形のとき、{A かつ x>0}P′{A}\{A\text{ かつ }x>0\}P'\{A\} ならば、{A}P{A かつ x≤0}\{A\}P\{A\text{ かつ }x\le0\} である。

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

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

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

だからである。

F\mathcal F をプログラム w[a] [a=b−a;b=b−a]\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 が停止したときの aa と bb の値を求めよ。

(3) ⊢{ある整数 i が存在し、i≥0 かつ (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=x−x∣[P;P]∣w[x]P,x::=a∣b.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=x2−x3x_1=x_2-x_3 以右边计算值替换 x1x_1;[P1;P2][P_1;P_2] 顺序执行;w[x]P\mathrm w[x]P 在 x>0x>0 时反复执行 PP,直到 x≤0x\le0。

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

  1. 赋值规则:若 AA 正好是将 BB 中 x1x_1 替换为 x2−x3x_2-x_3 后的命题,则 ⊢{A} x1=x2−x3 {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. 循环规则:从 ⊢{A∧x>0}P{A}\vdash\{A\land x>0\}P\{A\} 得 ⊢{A}w[x]P{A∧x≤0}\vdash\{A\}\mathrm w[x]P\{A\land x\le0\}。
  4. 后果规则:若 A⇒C,D⇒BA\Rightarrow C,D\Rightarrow B 且 ⊢{C}P{D}\vdash\{C\}P\{D\},则 ⊢{A}P{B}\vdash\{A\}P\{B\}。

令 F=w[a][a=b−a;b=b−a]\mathcal F=\mathrm w[a][a=b-a;b=b-a]。

  1. 画语法树,使全部终结符出现在叶子上。
  2. 初值 (a,b)=(23,41)(a,b)=(23,41) 时执行程序,求终止值。
  3. 证明
⊢{∃i∈Z≥0, (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)↦(b−a,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).

此时 a≤0a\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;故 I∧a>0I\land a>0 蕴含 i≥1i\ge1。

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

I(a,b)∧a>0 ⟹ I(b−a,a).I(a,b)\land a>0\ \Longrightarrow\ I(b-a,a).

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

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

因 b−(b−a)=ab-(b-a)=a,先用后果规则将第一式的前置条件改为 I(b−a,a)I(b-a,a),再应用后果规则与顺序规则,得到 ⊢{I∧a>0}[a=b−a;b=b−a]{I}\vdash\{I\land a>0\}[a=b-a;b=b-a]\{I\}。由循环规则,退出时满足 I∧a≤0I\land a\le0;而 Fi>0F_i>0 对 i≥1i\ge1 成立,故只能 i=0i=0,于是 (a,b)=(0,1)(a,b)=(0,1)。最后用后果规则即得所证三元组。

(4)​

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

an+1=bn−an,bn+1=an,an+2=an−an+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,构成无限严格递减的正整数序列,矛盾。