T T F T T T T T F F F T F F F T T F T T F F F T F F T T
Trong logic thời gian, ngữ nghĩa của một công thức được định nghĩa theo phép tính và trạng thái của phép tính. Các mệnh đề nguyên tử của logic thời gian là biếu thức Boolean có thể được đánh giá trong một trạng thái đơn độc lập của một tính toán. Ví dụ critical là giá trị của một biến critical trong một chương trình về đoạn găng; biểu thức critical <= 1 là một mệnh đề nguyên tử, bởi vì nó có thể được gán giá trị đúng trong một trạng thái s bằng việc kiểm tra giá trị của biến critical trong trạng thái s.
3.5. Các công cụ kiểm chứng mô hình
Từ khi kiểm chứng mô hình bắt đầu được phát triển cho đến nay, có rất nhiều công cụ để kiểm chứng mô hình. Theo thống kê của trang web
http://anna.fi.muni.cz/yahoda/ (trang được xây dựng và cập nhật bởi phòng thí nghiệm
ParaDiSe của khoa Thông tin, đại học Masaryk University Brno, cộng hòa Séc) đến tháng 9/ 2012, khoa đã thống kê được 68 công cụ kiểm chứng trong đó có 53 công cụ kiểm chứng mô hình. Trong đó, chúng ta có thê kể đến một số công cụ phổ biến như là SPIN, NuSMV, Java Pathfinder, KRONOS
SPIN (Simple Promela Interpreter – Trình biên dịch Promela đơn giản) là công cụ hỗ trợ cho việc kiểm chứng mô hình cho các hệ phân tán. Phần mềm này được phát triển bởi phòng thí nghiệm Bell Labs trong nhóm các phương pháp hình thức và kiểm chứng bắt đầu từ năm 1980. SPIN cùng với ngôn ngữ Promela là một bộ công cụ mạnh mẽ, và được áp dụng rộng rãi trong kỹ thuật kiểm chứng mô hình.
NuSMV (A new symbolic model checker – bộ kiểm chứng mô hình biểu tượng mới) có ngôn ngữ đầu vào được thiết kế để cho phép mô tả các hệ thống hữu hạn trạng thái. Mục đích cơ bản của ngôn ngữ NuSMV là mô tả (sử dụng các biểu thức trong các phép tính mệnh đề) phép chuyển liên quan tới cấu trúc hữu hạn Kripke.
Java Pathfinder (JPF) là một hệ thống đánh giá các chương trình thực thi của Java bytecode. Java được phát triển bởi trung tâm nghiên cứu NASA và trở thành mã nguồn mở năm 2005.
KRONOS là một công cụ kiểm chứng mô hình với thời gian phân nhánh (branch time) và kiểm chứng tương đương dùng cho ngôn ngữ mô hình hóa Timed Automata. Trong KRONOS, các thành phần của hệ thống thời gian thực được mô hình hoá thành các automat thời gian, và các yêu cầu chính xác được biểu diễn trong logic thời gian thực TCTL (TCTL là một mở rộng của logic thời gian CTL – Computation Tree
Logic– Logic cây tính toán mà cho phép định lượng lý luận thời gian trên một khoảng thời gian liên tục.
Mỗi công cụ kiểm chứng đều có những ưu nhược điểm khác nhau, và được áp dụng trong những bài toán cụ thể. Luận văn lựa chọn SPIN là công cụ kiểm chứng bởi vì SPIN được ứng dụng rộng rãi trong việc kiểm chứng các hệ phân tán cả trong nghiên cứu và trong công nghiệp, có tính phổ quát, dễ ứng dụng, cộng đồng phát triển và nghiên cứu hoạt động tích cực và ngôn ngữ mô hình hóa PROMELA gần với ngôn ngữ lập trình C.
Chương 4. Ngôn ngữ Promela và công cụ kiểm chứng mô hình SPIN chứng mô hình SPIN
Công cụ kiểm chứng mô hình SPIN là một công cụ được áp dụng rộng rãi trong nghiên cứu khoa học và trong công nghiệp. Ngôn ngữ Promela là ngôn ngữ để mô hình hóa hệ thống phần mềm để công cụ SPIN có thể hiểu và kiểm chứng mô hình cho hệ thống.
Mục tiêu của chương này là giới thiệu về ngôn ngữ Promela, để từ đó ta có thể sử dụng ngôn ngữ Promela để mô hình hoá được các hệ thống.
4.1. Ngôn ngữ Promela
SPIN là một công cụ để phân tích tính logic nhất quán của các hệ phân tán, đặc biệt là các giao thức truyền nhận dữ liệu. Hệ thống được mô tả trong một ngôn ngữ mô hình hóa gọi là Promela (Process or Protocol Meta Language – Ngôn ngữ Meta của tiến trình hoặc giao thức). Ngôn ngữ này cho phép tạo một cách tự động các tiến trình tương tranh. Giao tiếp thông qua các kênh thông điệp có thể được định nghĩa để đồng bộ hoặc không đồng bộ.
Mô hình SPIN có 3 loại đối tượng: các tiến trình (processes), các kênh thông điệp (message channels), và các biến (variables). Các tiến trình là các đối tượng toàn cục. Các kênh thông điệp và các biến là các dối tượng có thể được khai báo toàn cục hoặc cục bộ. Các tiến trình đặc tả hành vi, các kênh và biến toàn cục định nghĩa môi trường mà trong đó các tiến trình chạy.
4.1.1 Kiểu dữ liệu, toán tử và câu lệnh
a. Kiểu dữ liệu
Theo [10], kiểu dữ liệu của ngôn ngữ Promela được mô tả như trong bảng 4.1.