Tôi đang đọc qua một bài bình luận về "Việc sử dụng máy móc để hỗ trợ bằng chứng nghiêm ngặt" của Milner. Trong bài báo này, ông giải thích LCF được sinh ra như thế nào từ những ý tưởng về ngữ nghĩa học của Dana Scott và Strachey.
Dường như với tôi rằng logic Floyd-Hoare không đủ để phát triển LCF, nhưng tôi không chắc tại sao lại như vậy. Cuối cùng, trong logic Hoare, chúng ta xử lý các trạng thái chương trình thỏa mãn một số điều kiện tiên quyết và thông qua mối quan hệ phù hợp với một số điều kiện và tôi có thể cung cấp một công thức cho điều này. Wikipedia tuyên bố rằng ngữ nghĩa học biểu thị:
là một cách tiếp cận chính thức hóa ý nghĩa của các ngôn ngữ lập trình bằng cách xây dựng các đối tượng toán học (được gọi là ký hiệu) mô tả ý nghĩa của các biểu thức từ các ngôn ngữ.
Tôi quen thuộc với một số trực giác về cách đệ quy ví dụ được mô hình hóa theo cách tiếp cận này như là một điểm cố định của một số mối quan hệ trong khi trong logic Hoare tôi không thực sự nhớ việc xử lý đệ quy. Tuy nhiên, cả hai phương pháp dường như cố gắng mô tả mối quan hệ giữa đầu vào và đầu ra bằng quan hệ toán học.
Câu hỏi
Vậy điều gì đã tạo nên sự khác biệt giữa logic Hoare và ngữ nghĩa học biểu thị? Liệu ngữ nghĩa học biểu thị quản lý tốt hơn một số phức tạp của các chương trình? Nếu vậy, xin vui lòng minh họa bằng một ví dụ.
Có thể trích dẫn sau đây của Milner đề cập đến ngữ nghĩa học biểu thị là thú vị để hướng dẫn câu trả lời của bạn:
Tôi có thể viết cú pháp của ngôn ngữ lập trình theo logic này và tôi có thể viết ngữ nghĩa theo logic.