Tôi đã đọc các ví dụ về các công thức trong CTL nhưng không phải trong LTL và ngược lại, nhưng tôi gặp khó khăn trong việc nắm bắt tinh thần về các công thức LTL và thực sự , điều cốt lõi là sự khác biệt.
Tôi đã đọc các ví dụ về các công thức trong CTL nhưng không phải trong LTL và ngược lại, nhưng tôi gặp khó khăn trong việc nắm bắt tinh thần về các công thức LTL và thực sự , điều cốt lõi là sự khác biệt.
Câu trả lời:
Để thực sự hiểu sự khác biệt giữa LTL và CTL, bạn phải nghiên cứu ngữ nghĩa của cả hai ngôn ngữ. Các công thức LTL biểu thị các thuộc tính sẽ được diễn giải trên mỗi lần thực hiện chương trình. Đối với mỗi lần thực hiện có thể (một lần chạy), có thể được xem như một chuỗi các sự kiện hoặc trạng thái trên một dòng - và đây là lý do tại sao nó được đặt tên là "thời gian tuyến tính" - sự thỏa mãn được kiểm tra khi chạy mà không có khả năng chuyển sang chạy khác trong quá trình kiểm tra Mặt khác, ngữ nghĩa CTL kiểm tra một công thức trên tất cả các lần chạy có thể và sẽ thử tất cả các lần chạy có thể ( Một toán tử) hoặc chỉ một lần chạy ( toán tử E ) khi đối mặt với một nhánh.
Trong thực tế điều này có nghĩa là một số công thức của mỗi ngôn ngữ không thể được nêu trong ngôn ngữ khác. Ví dụ, thuộc tính thiết lập lại (một thuộc tính có thể tiếp cận quan trọng đối với thiết kế mạch) nói rằng luôn có khả năng có thể đạt được trạng thái trong khi chạy, ngay cả khi nó không bao giờ thực sự đạt được ( thiết lập lại AG EF ). LTL chỉ có thể nói rằng trạng thái thiết lập lại thực sự đạt được và không thể đạt được.
Tôi không biết nếu câu trả lời này cho câu hỏi của bạn, nhưng tôi muốn thêm một số ý kiến.
Có rất nhiều cuộc thảo luận về logic tốt nhất để thể hiện các thuộc tính để xác minh phần mềm ... nhưng cuộc tranh luận thực sự ở một nơi khác. LTL có thể biểu thị các thuộc tính quan trọng cho mô hình hệ thống phần mềm (tính công bằng) khi CTL phải có một ngữ nghĩa mới (một mối quan hệ thỏa mãn mới) để thể hiện chúng. Nhưng thuật toán CTL thường hiệu quả hơn và có thể sử dụng thuật toán dựa trên BDD. Vì vậy, ... không có giải pháp tốt nhất. Chỉ có hai cách tiếp cận khác nhau, cho đến nay.
Một trong những người bình luận cho rằng bài viết của Vardi "Phân nhánh so với thời gian tuyến tính: Cuộc tranh chấp cuối cùng" .
Nếu được cung cấp một đối tượng (ví dụ: theo dõi trong trường hợp LTL), bạn chỉ xem xét một tương lai cho mọi thời điểm, trong CTL, bạn có rất nhiều đối tượng.
Cụ thể, next
đưa ra một hành động duy nhất trong LTL nhưng (có khả năng) toàn bộ trong CTL.