4 Ngôn ngữ SMV, công cụ NuSMV và thực nghiệm
4.1.2 Phép toán trong SMV
Giá trị của một biến là một chuỗi các giá trị. Chuỗi này không giới hạn về độ dài và các giá trị của chuỗi phải thuộc kiểu dữ liệu của biến đó. Ví dụ, một biến kiểu logic có thể có giá trị bằng:0; 1; 0; 1;. Một phép toán tác động đến từng phần tử đó. Ví dụ, xét trường hợp phép toán NOT, ký hiệu là “∼”, áp dụng cho biến sau:
f oo = 0; 1; 0; 1;... ta được kết quả ∼ f oo = 1; 0; 1; 0;.... Một phép toán khác là phép toán AND, ký hiệu là “&”. Ví dụ: f oo = 0; 1; 0; 1;...và bar = 0; 0; 1; 1;... khi đó f oo&bar = 0; 0; 0; 1;....
Phép gán là một biểu thức có dạng:
<tên biến> := <biểu thức>;
Trong đó<biểu thức>là một biểu thứckết hợp các biến và các phép toán như “∼” và “&”. Sau khi thực hiện câu lệnh trên, biến ở vế trái sẽ có giá trị bằng giá trị của biểu thức ở vế phải. Ví dụ, với phép gán:zip := f oo&bar với các giá trị của biến foo và bar ở trên ta đượczip := 0; 0; 0; 1;.... Các phép gán trong ngôn ngữ SMV được thông dịch đồng thời. Như vậy thật ra hai phép gán liên tiếp nhau trong một chương trình không có nghĩa là chúng được thực hiện tuần tự. Ví dụ với hai phép gán trong một chương trình:y := x+1;;z := y+1;chúng ta có z := x+2;.
Trong SMV còn có một phép toán đặc biệt, đó là phép toán next. Giả sử với x là một biến, khi đó next(x) sẽ là giá trị tiếp theo của x. Nói cách khác, giá trị thứ i
củanext(x)bằng giá trị thứ(i+1) của biến x. Ví dụ:
x = 0,1,2,3...thìnext(x) = 1,2,3,4....