Điều này được viết trong mục wiki của Thi hành tượng trưng , nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào cho nó. Bất cứ ai có thể chỉ cho tôi một con trỏ? Cảm ơn bạn.
Điều này được viết trong mục wiki của Thi hành tượng trưng , nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào cho nó. Bất cứ ai có thể chỉ cho tôi một con trỏ? Cảm ơn bạn.
Câu trả lời:
Tôi không biết về một bài báo liên quan đến việc so sánh giữa thực thi tượng trưng và giải thích trừu tượng. Tôi cũng không nghĩ là cần thiết. Đọc các mô tả ban đầu của hai kỹ thuật này là đủ.
(Ngược lại, nếu có một số kết nối bất ngờ, thì đó sẽ là điều đáng để mô tả. Nhưng tôi rất nghi ngờ đây là trường hợp.)
Ý tưởng chính của thực thi tượng trưng là, tại một điểm tùy ý trong thực thi, bạn có thể biểu thị các giá trị của tất cả các biến dưới dạng các hàm của các giá trị ban đầu. Ý tưởng chính của giải thích trừu tượng là bạn có thể khám phá một cách có hệ thống tất cả các thực thi của một chương trình bằng một loạt các xấp xỉ quá mức. (Tôi có thể nghe thấy một số người đam mê AI đang rên rỉ ở mức gần đúng trước đó.)
Do đó, ít nhất là trong công thức ban đầu, thực thi tượng trưng không liên quan đến việc khám phá tất cả các thực thi có thể. Bạn có thể thấy điều này ngay cả trong tiêu đề: nó bao gồm từ 'thử nghiệm'. Nhưng đây là nhiều hơn từ Phần 8: "Đối với các chương trình có cây thực thi vô hạn, thử nghiệm biểu tượng có thể không đầy đủ và không có bằng chứng tuyệt đối nào về tính chính xác có thể được thiết lập."
Ngược lại, giải thích trừu tượng nhằm khám phá tất cả các vụ hành quyết. Để làm như vậy, nó sử dụng một số thành phần, một trong số đó rất giống với ý tưởng chính về thực thi tượng trưng. Những thành phần này là (1) trạng thái trừu tượng, (2) nối và mở rộng (do đó, 'mạng' trong tiêu đề).
Nhà nước trừu tượng.Trạng thái cụ thể của một chương trình tại một thời điểm cụ thể về cơ bản là một ảnh chụp nhanh nội dung bộ nhớ (bao gồm chính mã chương trình và bộ đếm chương trình). Điều này có rất nhiều chi tiết, rất khó để theo dõi. Khi bạn phân tích một tài sản cụ thể, bạn có thể muốn bỏ qua các phần lớn của trạng thái cụ thể. Hoặc bạn có thể muốn quan tâm chỉ một biến cụ thể là âm, bằng 0 hay dương, nhưng không quan tâm đến giá trị chính xác của nó. Nói chung, bạn muốn xem xét một phiên bản trừu tượng của trạng thái cụ thể. Để giải quyết vấn đề này, bạn phải có thuộc tính giao hoán: Nếu bạn lấy trạng thái cụ thể, thực thi một câu lệnh và sau đó trừu tượng hóa trạng thái kết quả, bạn sẽ nhận được kết quả tương tự như khi bạn trừu tượng hóa trạng thái ban đầu, và sau đó thực hiện tương tự tuyên bố nhưng về trạng thái trừu tượng. Sơ đồ giao hoán này xuất hiện trong cả hai bài báo. Đây là ý tưởng phổ biến. Một lần nữa, giải thích trừu tượng là tổng quát hơn, vì nó không quyết định làm thế nào để trừu tượng hóa một trạng thái - nó chỉ nói rằng nên có một cách để làm điều đó. Ngược lại, thực thi tượng trưng nói rằng bạn sử dụng các biểu thức (tượng trưng) đề cập đến các giá trị ban đầu.
Tham gia và mở rộng. Nếu thực hiện chương trình đạt đến một tuyên bố nhất định theo hai cách khác nhau, thực thi tượng trưng không cố gắng hợp nhất hai phân tích. Đó là lý do tại sao đoạn trích trên nói về cây hành quyết, thay vì dags. Nhưng, hãy nhớ rằng giải thích trừu tượng muốn bao gồm tất cả các vụ hành quyết. Vì vậy, nó yêu cầu một cách để hợp nhất các phân tích của hai lần thực hiện tại điểm mà chúng có cùng bộ đếm chương trình. (Việc tham gia có thểrất ngu ngốc ({a} tham gia {b} = {a, b}) sao cho nó tương đương với việc thực thi tượng trưng.) Nói chung, việc tham gia chính nó không đủ để đảm bảo rằng cuối cùng bạn sẽ hoàn thành việc phân tích tất cả các lần thực hiện. (Cụ thể, phép nối câm được đề cập trước đó sẽ không hoạt động.) Hãy xem xét một chương trình có các vòng lặp: "n = input (); for i trong phạm vi (n): do ware ()". Bao nhiêu lần bạn nên đi vòng quanh và tiếp tục tham gia? Không có câu trả lời cố định hoạt động. Vì vậy, một cái gì đó khác là cần thiết, và đó là mở rộng , có thể được coi là một heuristic. Giả sử bạn đã đi vòng vòng 3 lần và bạn đã học được rằng "i = 0 hoặc i = 1 hoặc i = 2". Sau đó, bạn nói: hmmm, ... hãy mở rộng và bạn nhận được "i> = 0". Một lần nữa giải thích trừu tượng không nói làm thế nào để mở rộng - nó chỉ nói những gì thuộc tính cần mở rộng.
(Xin lỗi vì câu trả lời dài này: Tôi thực sự không có thời gian để làm cho nó ngắn hơn.)
Tôi nghĩ rằng điều này có nghĩa là trong một ý nghĩa rất nông. Bước đầu tiên của giải thích trừu tượng là xác định một ngữ nghĩa thu thập cụ thể. Thay vì mô tả sự tiến hóa của một trạng thái duy nhất, thu thập ngữ nghĩa mô tả sự tiến hóa của các trạng thái. Vì lý do thực thi tượng trưng về các đại diện của các bộ trạng thái, người ta có thể lập luận rằng nó đại diện cho ngữ nghĩa cụ thể của chương trình. Tôi không nhận thức được một sự tương ứng chính xác hơn đang được thực hiện.
Xem Patrick Cousot. Méthodes itérative de Construction et d'approimumation de points fixes d'opérateurs monotones sur un treillis, phân tích các chương trình sémantique des (phương pháp lặp để xây dựng và xấp xỉ các điểm cố định của toán tử đơn điệu trên mạng, phân tích tĩnh chương trình). Thèse ès Science Mathématiques, Đại học Joseph Fourier, Grenoble, Pháp, ngày 21 tháng 3 năm 1978. https://cs.nyu.edu/~pcousot/publications.www/CousotTheseEsScatics1978.pdf (không may bằng tiếng Pháp), trang (3) (3) -29