質問

ちょっと私は3倍のトリプルが新しいことを目的としています、そして私は仮説におけるループ不変量を見つけることについて理解することができません。たとえば、これはループ

です
[x>1 & y>1] WHILE x>0 DO x:=x-1; y:=y+2 END [x+y>5].
.

不変体は[2x + y> 5]ですが、見つける方法についてはわかりません。どのように見つけるかについてのステップの説明は大幅に感謝されます。

役に立ちましたか?

解決

最初にループ不変の意味を理解しています。それは、開始時のプログラム/アルゴリズムの繰り返し、そしてループの終了時にも当てはまる状態を意味する。あなたのプログラムはこのようなものです。

$$ x> 1 \ text {および} y> 1 $$

$$ \ text {} x> 0 $$

$$ \ hspace {4cm} \ text {do} x:= x - 1、y:= y + 2 $$

$$ \ text {end} $$

$$ x + y> 5 $$

$ 2X + y> 5 $ は、説明したように不変です。どちらも $ x $ $ y $ の両方が $ 1 $ 。そのため、whileループの最初の反復で $ 2x + y> 5 $ (証明できます)。 whileループの各反復での注意 $ x $ の値は、値 $ 1 $ によって減少します。 yの値が2つずつ増加しているので、不等式 $ 2x + y> 5 $ が満たされます。あなたはそれを証明することができます。この時点で $ X $ が負の数になり、 $ Y $ は少なくとも $ 5 $ になるでしょう。したがって、Invariant $ 2x + y> 5 $ si traint whileループの反復。

例:

$ x= 2 $ $ y= 2 $ $ 2 \×2 + 2= 6> 5 $ が満たされています。 2番目の反復で $ 1 \×2 + 4> 5 $ 満足。 $ x= 0、y= 6 $ 、ループ終端、 $ 2 \×0 + 6> 5 $

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top