知能ソフトウェア特論 - kussharo.complex.eng...

25
知能ソフトウェア特論 Intelligent Software プログラムの正当性(2) ホーア論理 Correctness of Programs (2) Hoare Logic

Upload: others

Post on 29-Oct-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

知能ソフトウェア特論Intelligent Software

プログラムの正当性(2)

ホーア論理Correctness of Programs (2)Hoare Logic

Page 2: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

1 構造化プログラミング(1/2)

どんな制御構造も, 3つの基本構造

順次 (sequence)

選択 (selection)

反復 (iteration)

の組合せによる表現に変換できる.

構造化プログラミングStructured programming

【今回の授業内容】構造化プログラミングで書かれた任意のプログラムについて,機械的な部分正当性の証明方法を学ぶ

Any control structure can be transformed into an equivalent structure combining the following three basic structures:• sequence• selection• iteration

Today we will discuss how to prove the (partial) correctness of an arbitrary program written in structured programming.

This observation led to the notion and techniques known as structured programming.

Page 3: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

1 構造化プログラミング(2/2)

順次(sequence)

選択(selection)

反復(iteration)

S1

S2

S1; S2

C

T

F

S1 S2

if C then S1 else S2

S

C

T

F

while C do S

• 出入口はそれぞれ1カ所

• 流れを表す線が交差しない

(Only one entrance and one exit)

(No crossings of flow lines)

Page 4: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

2.論理と推論

公理 最初から知識ベースに組み込まれ

ている自明な知識

推論規則 知識ベース内の知識(前提)

から得られる新たな知識(結論)を知識

ベースに追加するアルゴリズム

P P QQ

前提

結論

1 0true true

A Atrue

P P

(Logic and inference)

Axioms are pieces of knowledge, regarded as trivially true, built-in in the knowledge base from the beginning.

Inference rules are algorithms to add to the knowledge base a new piece of knowledge (consequent) obtained from the pieces of knowledge (antecedents) in the current knowledge base.

(axiom)

(antecedent)

(consequent)

推論規則

公理

(inference rule)

Page 5: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (1/9)

【構文】 部分正当性を表現する論理式

を3つ組で表現:

P S Q

【意味】 P が真の状態から文 S を実行すると,もし停止すれば,その時点で Qが真となる.

precondition postconditionsentence

(Hoare Logic)

【Syntax】 Logical expressions that represent partial correctness are formed as a 3-tupple.

【Meaning】 If the execution of the statement S starts from a state in which P is true, and if it terminates, then Q is true when the execution has terminated.

Page 6: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (2/9) 空文

P QP skip Q

(空文)

Example: Prove that { a=1, b=2 } skip {a+b=3}.

Answer: We can verify that (a=1, b=2) → a+b=3.

Therefore, we conclude { a=1, b=2 } skip {a+b=3}.

(Empty statement)

P and Q are standard mathematical formulas unrelated to programmingEmpty statement

プログラミング言語の各構文の意味を3つ組を用いた公理や推論規則で表現

結論から前提に向けて推論を進めると,最終的には3つ組はなくなり,部分的正当性の証明は,通常の数学的/論理学的な式の証明に帰着される.

Backward reasoning will eventually eliminate 3-tupples, and the proof of partial correctness will be reduced to the proof of ordinary mathematical and/or logical expressions.

The meaning of each construct of the programming language is defined by axioms and inference rules using the 3-tupples.

P,Qは,プログラミング言語とは無関係な一般の数学の命題

空文

Page 7: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (3/9) 空文(続き)

P QP skip Q

(空文)

Example: Find P such that {P} skip {a+b=3} is true.

Answer: Let P be a+b=3.

Then clearly, {a+b=3} skip {a+b=3} is true.

Pが未知のとき: P = Q とする If P is unknown, let P=Q, because then the antecedent is true.

(Empty statement)空文

Page 8: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (4/9) 代入

Example: Prove { a=9} a:=a+1 {a=10}.

Answer: It is clear that

a=9 → a+1=10.

Therefore, { a=9} a:=a+1 {a=10}.

Q に出現するすべての x を

E に置き換えたアサーション

a=10 に出現するすべての aを a+1 に置き換えたアサーション

[ : ]:

P Q x EP x E Q

(代入)

(Assignment)

This expression denotes the assertion obtained by symbolically replacing all the occurrences of x in Q by E.

This expression is the assertion obtained by replacing all the occurrences of a in a=10 by a+1.

Assignment

代入

Page 9: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (5/9) 代入(続き)

Pが未知のとき: P = Q[x:=E]

[ : ]:

P Q x EP x E Q

(代入)

If P is unknown, let P=Q[x:=E],because then the antecedent is true.

(Assignment)

Example: Find P such that {P} a:= b+1 {a+b=3} is true.

Answer: Let P be (b+1)+b=3, i.e., b=1.

Then clearly, {b=1} a:= b+1 {a+b=3} is true.

代入

Page 10: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (6/9) 順次

1 2

1 2;P S Q Q S R

P S S R(連接)

より単純な構文の部分正当性に帰着させている

P が未知のとき:

再帰的に,RからQ を求め,さらにQから P を求める

Divide a complex problem into two simpler problems

(Sequence)

Sequence

If P is unknown, recursively obtain Q from R and thenP from Q.

順次

Page 11: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (7/9) 代入が連続するときの便法A simple method for a sequence of assignments

[ :[ : ][ : ]

:

] [ : ]: [ : ] [

::

;: ]

trueR y F R y FP R y F x E

P x E y FP x E R y F R y F y

RF R

[ : ][ : ]: ; :

( ) P R y F x EP x E y F R

代入の連続Sequence of assignments

実行の逆順に事後条件に代入する

Execute symbolic replacements in the post condition in the reversal order of the assignments

代入の連続

Page 12: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理 (8/9) 選択

1 2

1 2if then else endP C S Q P C S QP C S S Q

(選択)

Pが未知のとき:P = (C→ P1)∧(¬C → P2)

ただし,{P1} S1 {Q}, {P2} S2 {Q}

を満たすP1とP2を再帰的に求める.

If P is unknown, let P = (C→ P1)∧(¬C → P2) ,where we recursively obtain P1 and P2

such that{P1} S1 {Q}, {P2} S2 {Q} .

(Selection)

Selection

C

S1 S2

Q

P1 P2

true false

選択

Page 13: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

3.ホーア論理(9/9) 反復

while do endP C S P P C Q

P C S Q(反復)

S

Ctrue

false

P : ループ不変条件

QP が未知のとき:

Pは自動的に求められない.

プログラマがソースコードに必ず挿入しておく.

P(P is a loop invariant)

(Iteration)

Iteration

反復

Page 14: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

例題1 簡単な計算と代入

, ( ) 2 2 2, : 2 2 : 2

, : ; : 2

true truex a y b x y y a b x y a b x y a b

x a y b x x y x y a b x y a b y x y y a bx a y b x x y y x y y a b

順次

[ : ]:

P Q x EP x E Q

(代入)

Pが未知のとき: P = Q[x:=E]

Example 1: Simple arithmetic and assignment

代入

Page 15: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

例題2 m と n の積 (1/3) 初期設定

int , 0: 0;: ;

( ) 0while 0 do

: ;: 1

end

m npc n

p m n c cc

p p mc c

p mn

, 0 0 ( ) 0m n m n n n

int , 0 : 0; : ; ( ) 0m n p c n p m n c c

Example 2: Product of m, n Initialization

代入の連続

Page 16: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

( ) 0 0 : ; : 1 ( ) 0p m n c c c p p m c c p m n c c

例題2 mとnの積 (2/3) ループ継続

int , 0: 0;: ;

( ) 0while 0 do

: ;: 1

end

m npc n

p m n c cc

p p mc c

p mn

( ) 0 0 ( ( 1)) 1 0p m n c c c p m m n c c

invariant invariant

invariant

反復

Loop repetition

Page 17: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

例題2 mとnの積 (3/3) ループ終了

int , 0: 0;: ;

( ) 0while 0 do

: ;: 1

end

m npc n

p m n c cc

p p mc c

p mn

invariant

invariant

( ) 0 ( 0)p m n c c c p mntrue

反復

0c

Loop termination

Page 18: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

ホーア論理による証明方法の特徴

◎1,2,3,…,m のようなあいまいな人間の直観力に頼らない(人工知能で機械的に証明できる可能性が大きくなる)

◎ループの1周だけを解析している(数学的帰納法にもとづくため)

△ループ不変条件を発見し明示する必要がある(人工知能で機械的に発見できる保証はない)(ループ不変条件を設計してからループを記述するのを推奨)

反復

Page 19: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

演習問題2

n の階乗を求める右のプログラムの部分正当性をホーア論理に基づいて証明せよ.

int 0: 1; : 0;

! 0while do

: 1;:

end!

np ip i i

i ni ip p i

p n

This is a program computing the factorial n! of n. Prove its partial correctness based on Hoare Logic.

EXERCISE 2

Page 20: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

参考

以下のスライドは,参考までに,構造化プログラ

ミングについてやや詳しく書いたものです

Page 21: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

構造化定理 (1/5) スパゲティ・プログラム

(Go To Statement Considered Harmful) Go To 文 有害説 (Dijkstra)

(Structure theorem) (Spaghetti programs)

goto L

L

Page 22: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

構造化定理 (2/5) 構造化定理

どんな流れ図も, 3つの基本構造

• 順次 (sequence)

• 選択 (selection)

• 反復 (iteration)

の組合せにより,等価な

構造化流れ図

(structured flowchart)

に変換できる.

構造化プログラミングStructured programming

(Structure theorem)

Any flowchart can be transformed into an equivalent structured flowchart by combining the following three structures.• sequence• selection• iteration

Page 23: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

構造化定理 (3/5) 構造化流れ図

連 接

1 2;S S

1( )S F S

2( )S F S

選択

1 2if then else endC S S

2( )SF S1( )SF S

Ctrue false

反復

while do endC S

( )SF S

Ctrue

false

• 出入口はそれぞれ1カ所

• 流れを表す線が交差しない

(Only one entrance and one exit)

(No crossings of flow lines)

(Structured Flowchart)

現実には,return と break くらいは許す?

sequence selection iteration

(In practice, we may allow at least return and break?)

Page 24: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

構造化定理 (4/5) 前判定反復への変換

BODY

END?

INPUT

yes

no

BODY

END?

INPUT

INPUT

yes

no

while .. do …

(Transforming a repetition into the while loop)

Page 25: 知能ソフトウェア特論 - kussharo.complex.eng ...kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/Program/hoare.pdf · プログラミング言語の各構文の意味

構造化定理 (5/5) より複雑な変換の例

A

C1yes

no

C2

B

D

yes

no

A

C1 or Fyes

no

C2

F←falseB

yes

no

F←false

F←true

F

D

no

yes

Use a flag: F

while … do…

(Example of more complex transformation)