Chƣơng 1 : Mở đầu
4.2 Mở rộng Spin và Promela với thời gian thực
4.2.1 Ngôn ngữ thời gian và Otomat Buchi thời gian
Otomat Buchi (BA) là một máy trạng thái hữu hạn đa định (∑,S,Tr,S0,F) vơi Σ là
các ký tự đầu vào, S là tập các trạng thái, S0 là các trạng thái khởi tạo và F là các trạng thái chập nhận. Tr Є S x Σ x S là quan hệ chuyển trạng thái. Nếu (s,α,s’) Є Tr thì A có thể chuyển từ s thành s’ sau khi đọc α.
Một vết hay từ đầu vào là một chuỗi vô hạn σ = σlσ2 ..., σi Є Σ, trong một thực hiện với σ là chuỗi vô hạn so 𝜎1 sl 𝜎2 s2 ..., so Є So,(si , σ i+1 , si+1) Є Tr, i = 0,1,…Một thực hiện run r đƣợc cho là đƣợc chấp nhận nếu có tồn tại một trạng thái f Є Σ và f xuất hiện vô hạn (infinite) trong r. Ngôn ngữ L (A) của A là tập hợp của tất cả vết σ với A có một thực hiện trên σ.
Một vết thời gian hay từ là một cặp (σ, τ), trong đó σ là một vết và τ là một trình tự thời gian, một chuỗi vô hạn τl, τ2, ... , τi Є R +. Chúng ta chỉ xem xét chặt chẽ trình tự thời gian tăng, trình tự thời gian khơng Zeno, tức là, τi <τi +1 và ∀ t Є Ri, ∃i τi > t. Điều này đảm bảo rằng thời gian không hội tụ đến một giá trị cận trên. Ngôn ngữ thời gian là một tập hợp các vết thời gian.
TBA là một bộ A = (Σ, S, Tr, So, F, C), với Σ, S, So và F đƣợc định nghĩa trong BA khơng có thời gian, và C là tập các đồng hồ. Một bƣớc chuyển trạng thái Tr có (s,a,s',R,μ) , với R ⊆ C là các đồng hồ đƣợc thiết lập về 0 và μ là ràng buộc về đồng
hồ, μ là một biểu thức kết nối dƣới dạng y <k, k <y, x-y < k và k<x-y cho hai đồng hồs x, y Є C, và một số nguyên k Є N.
Cho một từ (σ,τ), A bắt đầu tại trạng thái s0 Є So tại thời điểm 0. Tất cả các đồng hồ của A đƣợc kích hoạt và khởi tạo về 0 và tăng cùng tỉ lệ. Tại thời điẻm τl ký tự σ l đƣợc đọc và A thực hiện một bƣớc chuyển trạng thái tro = ( so,σl,sl,Rl,μl) , nếu các giá trị của đồng hồs thỏa mãn μ1. Bƣớc chuyển trạng thái chỉ có những đồng hồ thuộc về R1 đƣợc thiệt lấp về 0. Tại thời điểm τ2 một ký tự mới đƣợc đọc và bƣớc chuyển trạng thái đƣợc chọn, quá trình cứ tiếp tục …
Một bƣớc thực hiện run(s , v ) của TBA thực hiên với ký tự và thời gian (σ,τ) là một trình tự vơ hạn (so,vo) σ1,τ1 (sl,vl) σ2,τ2 …, vi Є R|C| với so Є So, ∀x Є C, vo(x) = 0, and ∀ i = 1,2, ..., ( so , σl , sl , Rl , μl ) Є Tr, (vi-1 + τi - τi-1) Є μi , và vi = vi-1[Ri := 0]. Nếu một thực hiện nhƣ trên tồn tại thì (σ,τ) là phù hợp về thời gian. (σ,τ) là chấp nhận nếu phù hợp với thời gian và tồn tại một trạng thái f Є F trong đó f xuất hiện khơng đơn định trong s . Ngôn ngữ thời gian của A là tập các vết thời (σ,τ) trong đo A chấp nhận một thực hiện (σ,τ) [6].
4.2.2 Ngữ nghĩa trong Promela khơng có thời gian và có thời gian 4.2.2.1 Ngữ nghĩa trong Promela khơng có thời gian 4.2.2.1 Ngữ nghĩa trong Promela khơng có thời gian
Ngữ nghĩa thực hiện của chƣơng trình P Promela khơng chứa thời gian đƣợc đặc tả dƣới hệ thống chuyển (transition system TS), i.e., Một đồ thị T = (Q,), Với Q là tập các node và ⊆ Q x Q tập các cung. Để đơn giản hóa vấn đề ta giả thiết có một số các tiến trình đã biết Po,P1, ...,Pm đƣợc kích hoạt tại thời điểm bắt đầu. Giả thiết P0 là tiến trình never claim nếu nhƣ có trong hệ thống, ngƣợc lại P0 dƣới dạng P0 ≝ { do :: skip od }.
Trạng thái của hệ thống đƣợc mô tả bởi nội dung của các kênh và bộ nhớ (các biến toàn cục và cục bộ) cũng nhƣ vị trí của mỗt tiến trình Pi. Cho gv (tƣơng ứng. lvi) là vector hiển thị các giá trị hiện tại của các biến toàn cục ( tƣơng ứng các biến cục bộ của Pi), và li là vị trí của Pi. Vị trí theo sau dấu ngoặc mở { (tƣơng ứng trƣớc dấu ngoặc đóng }) là starti (tƣơng ứng endi). Ta viết li lst i’ nếu có một lệnh st chuyển từ li đến li’. Vector biến sau thực hiện st là st[gv] và st[lvi].
Vì vậy các trạng thái của Q dƣới dạng q = ( l0 ,l1, l2 , . . . , lm , lv0 , lv1 , . . . , lvm , gv ). Một lệnh li’sti li’’ của tiến trình Pi đƣợc enable thực hiện tại q nếu li’ = li và:
1. Hoặc sti là một lệnh gán, skip hay lệnh điều kiện thỏa mãn tại q.
2. Hoặc sti là phép gửi không đồng bộ (tƣơng ứng phép nhận không đồng bộ) đến một kênh không đầy (tƣơng ứng với kênh không rỗng).
3. Hoặc sti là một phép gửi đồng bộ nếu tồn tại một phép nhận đồng bộ lj’ stj
lj’’ để lj’ = lj .
Khi đó tr=(q,q’) Є nếu tồn tại một lệnh lệnh l0st0 l0’’ của P0 đƣợc enable tại q và:
1. Hoặc tồn tại listi li’ của Pi đƣợc enable tại q để q’ = (l0’, … li’,…,lm, st0[lv0], … sti[lvi], …, lvm, sti[st0[gv]]).
2. Hoặc tồn tại một cặp đồng bộ li sti li’, lj lj’ enabed tại q để q’=(lstj 0’
, … li’, …lj’,…,lm, st0[lv0], … sti[lvi], … stj[lvj], …, lvm,gv’) với gv’ = sti[stj[st0[gv]]]. 3. Hoặc khơng có lệnh nào của tiến trình Pi, i >0 đƣợc kích hoạt tại q (trạng thái
nhƣ vậy đƣợc gọi là deadlock) và q’ = (l0’,…,lm, st0[lv0], …, lvm, st0[gv]). Trạng thái khởi tạo của T là q0 = (start0,…,startm,lv0init,…, lvminit, gvinit). Một đƣờng của T là một trình tự q0, q1,… trong đó (q0 , qi+1) Є .
4.2.2.2 Kiểm chứng trong Promela khơng có thời gian
Tính đúng đắn của Ρ dựa trên các loại phân tích đƣợc sửa dụng Spin. Các vị trí có thể đƣợc gán nhãn end, accept, hay progress. Cho trạng thái = ( l0 ,l1, l2 , . . . , lm ,…) ta định nghĩa end(q) = {li | li = endi hay li đƣợc gán nhãn end} và accept(q) = {li | li đƣợc gán nhãn accept}. Một trạng thái deadlock q đƣợc xem là đúng nếu ∀i = 1,
…,m, li Є end(q) .[13] Ta nói rằng P là:
1. deadlock free nếu tất cả các trạng thái deadlock là đúng.
2. ω-correct nếu cho mỗi đƣờng p nếu q1, … qk là tập các trạng thái xuất hiện vơ hạn nhiều lần trong p thì ∀i = 1, …,k, accept(qi) = Ø (khơng có một vịng lặp
bao gồm 1 lệnh đƣợc gán nhãn chấp nhận).
4.2.3 Mở rộng Spin với thời gian thực 4.2.3.1 Cú pháp 4.2.3.1 Cú pháp
Đầu tiên ta thêm kiểu clock trong phần khai báo biến của chƣơng trình Promela. Các biến Clock có thể là mảng hay 1 biến đƣợc khai báo tồn cụ. Chẳng hạn ta có thể khai báo :
clock x, y, z[5];
Kế tiếp mỗi lệnh đƣợc mở rộng với phần lựa chọn về thời gian theo cú pháp nhƣ sau:
stmnt ::= untimed_stmnt I timed_stmnt timed_stmnt ::= 'when' '{'µ'}' untimed_stmnt | 'reset' '{' R '}' untimed.stmnt
| 'when' '{' µ'}' 'reset' '{' R '}' untimed_stmnt R ::= clock ',' R
µ ::= ineq ',' µ
ineq ::= clock op int I clock op clock '+' int op ::= '<' | '>' | '<=' | '>=' | '=='
Ví dụ một số lệnh bao gồm thời gian
When {x<4,x>=2} reset{x} B!mymesg; When {z<1,y>=1} reset{x,z} a = a*b; When {x[i] == 1} goto errror;
Điều kiện bảo đảm µ đƣợc biên dịch bằng phép nối của các phép so sánh trong điều kiện. Chẳng hạn “When {x<4,x>=2}” cũng đƣợc hiểu “When {x<4 Λ x>=2}”. Tuy nhiên đối với phép hoặc thì khơng thể thể hiện bởi một lệnh. Thay thế ta dùng lệnh rẽ nhánh không xác đinh nhƣ sau:
If ' :: when {x<4} reset{x} stmnt_part :: when {x>=4} reset{x} stmnt_part fi '
4.2.3.2 Ngữ nghĩa Realtime-promela
Ngữ nghĩa của chƣơng trình Ρ Promela với thời gian thực là hệ thống chuyển trạng thái có thời gian TTS (timed transition system) (QT, →T). Các trạng thái của QT dƣới dạng (q,v) với q đƣợc định nghĩa trong phần Promela không bao gồm thời gian và v là giá trị đồng hồ. Một lệnh chứa thời gian (st, R, μ) đƣợc thực hiện tại (q,v) nếu st là đƣợc thực hiện tại q và v Є μ. Bƣớc chuyển →T bao gồm hai loại:
1 Chuyển hành động ((q,v),(q’,v’)) đƣợc định nghĩa trong phần trƣớc. Mỗi bƣớc chuyển nhƣ vậy liên kết với một cặp (hay bộ ba) của các lệnh có chứa thời gian (st0 , R0, μ0 ), (sti , Ri, μi ) (tƣơng ứng (stj , Rj, μj )) đƣợc thực hiện tại (q,v) (trong đó v Є μ0 Λ μi Λ μj . R là R0 U Ri (tƣơng ứng R0 U Ri U Rj ) thì v’ = v[R:= 0].
2 Bƣớc chuyển thời gian ((q,v), (q, v+δ) vơi δ Є R+.
Trạng thái khởi đầu của T là (q0 ,0) , 0 = (0,…,0) Є R+|C| Tính đúng đắn của chƣơng trình Promela với thời gian thực hồn tồn giống với chƣơng trình khơng chứa thời gian thực ngoại trử thay thế T chúng ta xem xét (QT, →T
).
4.2.4 Định nghĩa TBA dựa trên chương trình Promela thời gian thực
Mục tiêu của chúng ta nhằm giảm việc kiểm chứng tính đúng đắn của chƣơng trình Promela thời gian thực bằng kiểm chứng ngôn ngữ TBA là trống (emptyness). Với mỗi chƣơng trình Promela P ta định nghĩa 2 Otomat TBA Apω và Apdlock và kiểm chứng tính đúng đắn của hai Otomat này.
Apω ≝ (Σ, Q, Tr, {q0}, F, C) trong đó Q, q0 đƣợc mơ tả trong phần trƣớc, C là tập các đồng hồ đƣợc khai báo, F = {q | accept(q) ≠ Ø} và (q,σ,q’,R,μ) Є Tr nếu σ = s và μ = μ0 Λ μi , R = R0 U Ri (hay tƣơng ứng μ0 Λ μi Λ μj , R0 U Ri U Rj trong trƣờng hợp truyền thông báo đồng bộ).
Tƣơng tự Apdlock ≝ (Σ’
, Q U {end}, Tr’, {q0}, F’, C) với Σ’ = Q U {σend}, F’ = {end} và end ! Є Q. Tr’ = Tr U bƣơc chuyển (q, σend, end, Ø, true) cho mỗi trạng thái deadlock q, cùng với vòng lặp loop (q, σend, end, Ø, true).
Từ định nghĩa có thể đƣa rác bổ đề nhƣ sau[15]:
P là deadlock free nếu L(Apdlock
) = Ø. P là ω-correct nếu L(Apω) = Ø.
L là ngôn ngữ thời gian. Phép chiếu không thời gian trên L đƣợc định nghĩa unt(L) = { σ | ∃ 𝜏 (σ, 𝜏) Є L}. Khi đó unt(L) = Ø nếu L = Ø. Vì vậy dẫn đến bài tốn kiểm tra tính rỗng của unt(L(Apdlock)) và unt(L(Apω)).
Mỗi Otomat TBA A tồn tại một Otomat BA U chấp nhận unt(L(A)).
Rõ ràng U có một khơng gian trạng thái mở rộng, mỗi trạng thái (q, α) , một phần từ trạng thái q của Otomat A, tập α của các giá trị đồng hồ đƣợc kích hoạt.
Vì thời gian là liên tục nên khơng gian trạng thái là vơ hạn. Để trình diễn chẳng hạn một tập, không gian giá trị R|C| đƣợc chia thành số hữu hạn các lớp bằng nhau. Hai thành phần v và v’ của lớp α là tƣơng đƣơng theo nghĩa nếu v thuộc về một thực hiện chấp nhận đƣợc (so,vo) σ1,τ1 (sl,vl) … σ2,τ2 σi,τi (si,v) σi+1,τi+1 (si+1,vi+1)... sau đó nó có thể đƣợc thay thế bằng (so,vo) σ1,τ1 (sl,vl) σ2,τ2 … σi,τi (si,v’) σi+1,τi+1 (si+1,v’i+1)...để cho ánh xạ không thời gian của hai thực hiện là giống nhau.