Định dạng công thức khẳng định

Một phần của tài liệu Nghiên cứu về separation logic và ứng dụng vào hệ thống kiểm định tự động (Trang 65 - 66)

Các công thức khẳng định sử dụng chú thích Separation Logic và được đưa ra dưới dạng thức rời rạc thông thường. Mỗi dạng thức rời rạc gồm có hai phần: công thức Heap (Heap part) và công thức thuần túy (Pure Part). Xem xét ví dụ sau, một Heap Node cơ bản được định nghĩa như sau:

v::node_type<list_of_arguments>

Trong đó v là một con trỏ được trỏ tới Heap Node và list_of_arguments là nội dung của Heap Node. Sử dụng định dạng này có thể khai báo cho những vị từ

Học viên thực hiện: Nguyễn Đức Cường – Lớp 11BCNTT Trang66

của đoạn cấu trúc dữ liệu, ví dụ sau thể hiện vị từ là một dang sách độ dài n, khai báo trong HIP có dạng:

list<n> == self=null & n=0 or self::node<_,r> * r::list<n-1> inv n>=0 Công thức trên cho biết danh sách rỗng với n=0 hoặc danh sách được tạo bởi một Node liên kết với một danh sách kích thước n-1. Mỗi vị từ có một công thức mô tả tính bất biến thuần túy của nó, trong vị từ trên công thức thuần túy (Không chứa mô tả Heap) là n>=0. Thông thường bất biến thuần túy được giả định là luôn đúng, thành phần biến tự do hoặc biến không xác định trong một công thức Separation giả định được lượng hóa.

Tiền điều kiện/hậu điều kiện (Pre/Post) được chú thích bởi hai từ khóa "requires" và "ensures". Ví dụ sau thể hiện đặc tả cho thủ tục ghép hai danh sách đơn được trỏ bởi các con trỏ x và y:

node append(node x, node y) requires x::list<n> * y::list<m> ensures res::list<n+m>

Hậu điều kiện phải đảm bảo rằng kết quả trả về là một danh sách đơn có độ dài n+m, trong đó n và m lần lượt là độ dài của dang sách đầu vào x và y. Người dùng hoàn toàn có thể mô tả nhiều cặp tiền điều kiện/hậu điều kiện của các thủ tục được gọi trong chương trình.

Một phần của tài liệu Nghiên cứu về separation logic và ứng dụng vào hệ thống kiểm định tự động (Trang 65 - 66)

Tải bản đầy đủ (PDF)

(94 trang)