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 585 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

C T NGÔN NG NG L P TRÌNH NGH A TIÊN TS Nguy n H a Phùng Khoa CNTT – HBK TPHCM 2007 NG NGH A TIÊN {P} S {Q} – – – P : ti n u ki n S : phát bi u Q : h u u ki n N u P sau S đ c th c thi Q s {x = A} x := x + { x = A + 1} {y ≠ 0} x := / y { x = / y } Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM NG NGH A TIÊN (tt) S, Q → P : ng ngh a c a S N u P1 ⇒ P2 P2 y u h n P1 { y > } x := / y { x = / y} y>0⇒y≠0 wp(S,Q): ti n u ki n y u nh t – – wp(x := / y, x = / y) ≡ y ≠ wp(n := n + 1, n > 0) ≡ n ≥ Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM H LU T HOARE L1: N u ({P} S {Q}) ∧ (Q ⇒ R) {P} S {R} L2: N u ({P} S {Q}) ∧ (R ⇒ P) {R} S {Q} L3: {Px→E} x:= E {P}, v i E bi u th c Px→E P x đ c thay b ng E Ví d : Ch ng minh: {f = i!} i := i + {f * i = i!} P f * i = i! E i+1 Pi→E f *(i+1) = (i+1)! Theo L3: {f *(i+1) = (i+1)!} i := i + {f * i = i!} Vì f = i! ⇒ f *(i+1) = (i+1)! nên theo L2 ta có u c n cm Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM H LU T HOARE (tt) L4: N u ({P} S1 {Q}) ∧ ({Q} S2 {R}) {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 + {f * i = i!} Ta ch ng minh {f * i = i!} f := f * i {f = i!} P f = i! E f*i Pi→E f *i = i! Theo L3, (2) đ c ch ng minh Theo L4 (1),(2) ta có u ph i ch ng minh Ng Ngh a Tiên (1) (2) Khoa CNTT-DHBK TPHCM H LU T HOARE (tt) L5: N u ({P ∧ B} S1 {Q}) ∧ ({P ∧ ¬B} S2 {Q}) {P} if B then S1 else S2 {Q} L6: N u ({P ∧ B} S1 {Q}) ∧ ((P ∧ ¬B) ⇒ Q) {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ó u c n ch ng minh Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM H LU T HOARE (tt) L7: N u {P ∧ B} S {P} {P} while B S {P ∧ ¬B} Ví d : {f =i!} while i≠n 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 iP f = i! B i≠n S i := i + 1; f := f * i theo L7: {f =i!} while i≠n begin i := i +1; f := f * i end {(f=i!) ∧ (i=n)} mà (f=i!) ∧ (i=n) ⇒ f = n! nên theo L1 ta có u c n ph i ch ng minh Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM CH NG MINH CH NG TRÌNH {P} Prog {Q} úng đ n b ph n: n u P đúng, sau th c hi n Prog Q úng đ n toàn ph n: Prog đ n b ph n n u P Prog d ng Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM VÍ D Ch ng minh {n ≥ 0} i := 0; f := 1; while i ≠ n begin i:= i +1; f := f * i end {f = n!} Ta ch ng minh {f = i!} while i ≠ n begin i:= i +1; f := f * i end {f = n!} Vì = 0! luôn nên n ≥ ⇒ = 0! Theo L2 ta đ Áp d ng L3 v i P f = i! E Pf →E = i! ta đ c {1 = i!} f := {f = i!} Áp d ng L3 v i P = i! E Pi→E = 0! ta đ c {1 = 0!} i := {1 = i!} c {n ≥ 0} i := {1 = i!} Áp d ng L4 ta có u c n ph i cm Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM VÍ D Ch ng minh: {n ≥ 0} i := n; f := 1; while i > begin f := f * i ; i := i -1; end {f = n!} 10 Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM (1) Ta ch ng minh: {f = (i+1)* n ∧ i ≥ 0} while i > begin f := f * i; i := i – 1; end {f = n!} 11 Ng Ngh a Tiên (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} Áp d ng L3 ta xác đ nh ti n u ki n c a f := f * i f * i = i * * n ∧ i -1 ≥ ≡ f = (i+1)* * n ∧ i -1 ≥ Áp d ng L2 ta cm (3) Khoa CNTT-DHBK TPHCM Áp d ng L4 cho (2) (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} B = i > 0, ta có P ∧ B → {f = (i+1)* *n ∧ i -1 ≥ 0}, 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 begin end {P ∧ ¬B} Mà P ∧ ¬B = (f = (i+1)* *n ∧ i ≥ 0) ∧ i ≤ → f = (i+1)* *n ∧ i = đa → f = n! Áp d ng L1, ta cm (1) 12 Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM Áp d ng L3 cho f := ta d dàng ch ng minh {1 = (i+1)* * n ∧ i ≥ 0} f := {f = (i+1)* * n ∧ i ≥ 0} (4) Áp d ng L3 cho i := n ta c ng cm đ c {1 = ∧ n ≥ 0} i := n {1 = (i+1)* * n ∧ i ≥ 0} Vì = true nên {n ≥ 0} → {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) (1) ta có u c n ch ng minh 13 Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM ÚNG N TOÀN PH N L8: if {P ∧ B ∧ ≤ E = E0} C {P ∧ ≤ E < E0} then {P ∧ ≤ E }while B C {P ∧ ¬B} E: an integer expression called variant 14 Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM Ví d { n ≥ 0} f := 1; i := 0; while (n ≠ i) { i := i + 1; f := f * i; } { f = n!} Ta cm (1): {f = i! ∧ ≤ n – i} while (n ≠ i) { i := i + 1; f := f * i; } { f = n!} f = i! ∧ n ≠ i ∧ ≤ n – i = E0 ? 15 f = i! ∧ ≤ n – i – < E0 Ng Ngh a Tiên cm (1), ta cm (2): {f = i! ∧ n ≠ i ∧ ≤ n – i = E0} i := i + 1; f := f * i; { f = i! ∧ ≤ n – i < E0} Mà theo L3, ta có {f = i! ∧ ≤ n – i – < E0} i := i + 1; {f*i = i! ∧ ≤ n – i < E0} f := f * i; { f = i! ∧ ≤ n – i < E0} Khoa CNTT-DHBK TPHCM KI M CH NG KHI TH C THI #include assert(n >= 0); i := n; f := 1; while i > begin f := f * i ; i := i -1; end 16 Ng Ngh a Tiên if (n < 0) throw Exception; i := n; f := 1; while i > begin f := f * i ; i := i -1; end Khoa CNTT-DHBK TPHCM ... n! nên theo L1 ta có u c n ph i ch ng minh Ng Ngh a Tiên Khoa CNTT-DHBK TPHCM CH NG MINH CH NG TRÌNH {P} Prog {Q} úng đ n b ph n: n u P đúng, sau th c hi n Prog Q úng đ n toàn ph n: Prog đ n

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

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

TỪ KHÓA LIÊN QUAN