1. Trang chủ
  2. » Công Nghệ Thông Tin

Đặc tả ngôn ngữ lập trình ngữ nghĩa tiền đề

16 587 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 231,88 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

C T NGÔN NG L P TRÌNH

TS Nguy n H a Phùng

Trang 2

NG NGH A TIÊN

{P} S {Q}

– P : ti n đi u ki n – S : phát bi u

– Q : h u đi u ki n

N u P đúng thì sau khi S đ c th c thi thì Q

s đúng {x = A} x := x + 1 { x = A + 1}

{y ≠ 0} x := 1 / y { x = 1 / y }

Trang 3

NG NGH A TIÊN (tt)

S, Q → P : ng ngh a c a S

N u P1 ⇒ P2 thì P2 y u h n P1

{ y > 0 } x := 1 / y { x = 1 / y}

y > 0 ⇒ y ≠ 0

wp(S,Q): ti n đi u ki n y u nh t

wp(x := 1 / y, x = 1 / y) ≡ y ≠ 0

wp(n := n + 1, n > 0) ≡ n ≥ 0

Trang 4

H LU T HOARE

L1: N u ({P} S {Q}) ∧ (Q ⇒ R) thì {P} S {R}

L2: N u ({P} S {Q}) ∧ (R ⇒ P) thì {R} S {Q}

L3: {Px→E} x:= E {P}, v i E là bi u th c và Px→E là P trong

đó x đ c thay b ng E

Ví d : Ch ng minh: {f = i!} i := i + 1 {f * i = i!}

Pi→E f *(i+1) = (i+1)!

Theo L3: {f *(i+1) = (i+1)!} i := i + 1 {f * i = i!}

Vì f = i! ⇒ f *(i+1) = (i+1)! nên theo L2 ta có đi u c n cm

Trang 5

H LU T HOARE (tt)

L4: N u ({P} S1 {Q}) ∧ ({Q} S2 {R}) thì

{P} S1; S2 {R}

Ví d : Ch ng minh {f =i!} i := i + 1; f := f * i {f = i!}

Theo ví d tr c, ta có {f = i!} i := i + 1 {f * i = i!} (1)

Ta ch ng minh {f * i = i!} f := f * i {f = i!} (2)

Pi→E f *i = i!

Theo L3, (2) đ c ch ng minh

đi u ph i ch ng minh

Trang 6

H LU T HOARE (tt)

L5: N u ({P ∧ B} S1 {Q}) ∧ ({P ∧ ¬B} S2 {Q})

thì {P} if B then S1 else S2 {Q}

L6: N u ({P ∧ B} S1 {Q}) ∧ ((P ∧ ¬B) ⇒ Q)

thì {P} if B then S1 {Q}

Ví d : {xy < 0} if x > y then max := x else max :=y {max > 0}

Theo L3, ta có {x > 0} max := x {max > 0}

Vì (xy < 0) ∧ (x > y) ⇒ (x > 0) nên theo L2 ta có

{(xy < 0) ∧ (x > y)} max := x {max > 0}

T ng t {(xy < 0) ∧ (x ≤ y)} max := y {max > 0}

Áp d ng L5 ta có đi u c n ch ng minh

Trang 7

H LU T HOARE (tt)

L7: N u {P ∧ B} S {P}

thì {P} while B do S {P ∧ ¬B}

Ví d : {f =i!} while i≠n do begin i := i +1; f := f * i end {f=n!}

Theo ví d tr c ta đã ch ng minh

{f =i!} i := i + 1; f := f * i {f = i!}

Vì (f = i!) ∧ (i≠n) ⇒ f = i! nên theo L2

{(f = i!) ∧ (i≠n)} i := i + 1; f := f * i {f = i!}

V i P f = i! B i≠n S i := i + 1; f := f * i

theo L7:

{f =i!} while i≠n do begin i := i +1; f := f * i end {(f=i!) ∧ (i=n)}

∧ (i=n) ⇒ f = n! nên theo L1 ta có đi u c n ph i ch ng minh

Trang 8

CH NG MINH CH NG TRÌNH

{P} Prog {Q}

úng đ n b ph n: n u P đúng, sau khi th c

hi n Prog thì Q đúng úng đ n toàn ph n: thì Prog đúng đ n b

ph n và n u P đúng thì Prog d ng

Trang 9

VÍ D

Ch ng minh

{n ≥ 0}

i := 0; f := 1;

while i ≠ n do

begin i:= i +1;

f := f * i end

{f = n!}

Ta đã ch ng minh {f = i!}

while i ≠ n do begin i:= i +1;

f := f * i end

{f = n!}

Áp d ng L3 v i

P f = i! E 1

Pf →E 1 = i!

ta đ c {1 = i!} f := 1 {f = i!}

Áp d ng L3 v i

P 1 = i! E 0

Pi→E 1 = 0!

ta đ c {1 = 0!} i := 0 {1 = i!}

Vì 1 = 0! luôn luôn đúng nên n ≥ 0 ⇒ 1 = 0!

Trang 10

VÍ D

Ch ng minh:

{n ≥ 0}

i := n; f := 1;

while i > 0 do

begin

f := f * i ;

i := i -1;

end

{f = n!}

Trang 11

(2) Ta ch ng minh {f = i* *n ∧ i -1 ≥ 0}

i := i – 1;

{f = (i+1)* *n ∧ i ≥ 0}

Áp d ng L3 ta d dàng cm (2) (3) Ta ch ng minh

{f = (i+1)* *n ∧ i -1 ≥ 0}

f := f * i;

{f = i* *n ∧ i -1 ≥ 0}

f := f * i là

f * i = i * * n ∧ i -1 ≥ 0 ≡

f = (i+1)* * n ∧ i -1 ≥ 0

(1) Ta ch ng minh:

{f = (i+1)* n ∧ i ≥ 0}

while i > 0 do

begin

f := f * i;

i := i – 1;

end

Trang 12

Áp d ng L4 cho (2) và (3) ta đ c:

{f = (i+1)* *n ∧ i -1 ≥ 0} f := f*i; i := i-1 {f = (i+1)* *n ∧ i ≥ 0}

G i P = {f = (i+1)* n ∧ i ≥ 0} và B = i > 0, ta có

P ∧ B → {f = (i+1)* *n ∧ i -1 ≥ 0}, do đó theo L2 ta đ c

{P ∧ B} f := f*i; i := i-1 {P}

Áp d ng L7 cho phát bi u while, ta có

{P} while B do begin end {P ∧ ¬B}

Mà P ∧ ¬B = (f = (i+1)* *n ∧ i ≥ 0) ∧ i ≤ 0

→ f = (i+1)* *n ∧ i = 0 đa

→ f = n!

Áp d ng L1, ta đã cm (1)

Trang 13

Áp d ng L3 cho f := 1 ta d dàng ch ng minh

{1 = (i+1)* * n ∧ i ≥ 0} f := 1 {f = (i+1)* * n ∧ i ≥ 0} (4)

Áp d ng L3 cho i := n ta c ng cm đ c

{1 = 1 ∧ n ≥ 0} i := n {1 = (i+1)* * n ∧ i ≥ 0}

Vì 1 = 1 là true nên {n ≥ 0} → {1 = 1 ∧ n ≥ 0}

V y theo L2 ta có

{n ≥ 0} i := n {1 = (i+1)* * n ∧ i ≥ 0} (5)

Áp d ng L4 cho (4), (5) và (1) ta có đi u c n ch ng minh

Trang 14

ÚNG N TOÀN PH N

L8: if {P ∧ B ∧ 0 ≤ E = E0} C {P ∧ 0 ≤ E < E0} then {P ∧ 0 ≤ E }while B do C {P ∧ ¬B}

E: an integer expression called variant

Trang 15

Ví d

{ n ≥ 0}

f := 1;

i := 0;

while (n ≠ i) {

i := i + 1;

f := f * i;

}

{ f = n!}

cm (1), ta cm (2):

{f = i! ∧ n ≠ i ∧ 0 ≤ n – i = E0}

i := i + 1;

f := f * i;

{ f = i! ∧ 0 ≤ n – i < E0}

Ta cm (1):

{f = i! ∧ 0 ≤ n – i}

while (n ≠ i) {

i := i + 1;

f := f * i;

} { f = n!} Mà theo L3, ta có

{f = i! ∧ 0 ≤ n – i – 1 < E0}

i := i + 1;

{f*i = i! ∧ 0 ≤ n – i < E0}

f = i! ∧ n ≠ i ∧ 0 ≤ n – i = E0

Trang 16

KI M CH NG KHI TH C THI

#include <assert.h>

assert(n >= 0);

i := n; f := 1;

while i > 0 do

begin

f := f * i ;

i := i -1;

end

if (n < 0) throw Exception;

i := n; f := 1;

while i > 0 do begin

f := f * i ;

i := i -1;

end

Ngày đăng: 11/03/2016, 14:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm