Đột phá lớn giữa logic Hoare-Floyd và ngữ nghĩa của Scott Young Strachey là gì?


8

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ị:PrQ

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.


1
Tôi đoán, trong thế giới chức năng, cách tiếp cận biểu thị là khá tự nhiên. Nó là thành phần độc đáo, không giống như ngữ nghĩa hoạt động (đặc biệt là nếu bước nhỏ). Tôi phải thú nhận rằng tôi chưa bao giờ thấy logic Hoare cho các chương trình chức năng - tôi nghi ngờ rằng một cái, nếu nó tồn tại, có thể là cồng kềnh vì trong FP thuần túy không có cấu trúc "cập nhật trạng thái" như sự phân công trong lập trình mệnh lệnh.
chi

4
@chi Chắc chắn có rất nhiều logic Hoare cho các FP. Công việc tiên phong là Logic chương trình tổng hợp cho các hàm bậc cao đa hình của Honda / Yoshida, điều này đã được mở rộng trong ví dụ * Một logic chương trình hoàn chỉnh quan sát cho các hàm bậc cao bắt buộc ". Nó được mở rộng theo nhiều cách khác nhau.
Martin Berger

@MartinBerger À, thú vị. Cảm ơn đã tham khảo.
chi

Tôi tìm thấy các tài liệu tham khảo để phân tâm FP từ điểm chính của câu hỏi. Sự khác biệt giữa logic Hoare và ngữ nghĩa học biểu thị là cái trước liên quan đến các thuộc tính mô tả cú pháp của các chương trình (một lần nữa, được đưa ra theo cú pháp) trong khi cái sau liên quan đến việc liên kết các chương trình với các đối tượng toán học giống với ý nghĩa của chúng. Nói cách khác, hai người rất khác nhau.
Kai

Câu trả lời:


10

Tôi không biết tại sao mọi người không phát triển logic Hoare cho lambda-tính toán trước đó. Công việc đầu tiên để có được quyền này là Honda et al

Một logic chương trình thành phần cho các hàm bậc cao đa hình

Có một số nỗ lực trước đó, nhưng chúng không giải quyết được vấn đề, ví dụ: làm thế nào để bạn biểu thị giá trị của một chương trình chức năng? Phần cú pháp nào tương ứng với hàm tạo không gian hàm? Có một vài điều nhỏ cần phải được nhận đúng.

Hãy để tôi suy đoán: có lẽ vấn đề chính là logic Hoare thường liên quan đến tính toán trạng thái. Nếu bạn kết hợp các hàm trạng thái và bậc cao hơn, bạn ngay lập tức phải xử lý răng cưa, ví dụ như các chương trình như

λxRef(Nmộtt).λyRef(Nmộtt).(x: =!x+1;y: =!y+1),
cũng vậy như cửa hàng địa phương và đệ quy thông qua các cửa hàng. Những điều này chỉ được giải quyết vào đầu những năm 2000 trong các tác phẩm như Logic chương trình hoàn chỉnh quan sát cho các hàm bậc cao bắt buộc (đệ quy thông qua cửa hàng); Một phân tích logic về răng cưa trong các hàm bậc cao bắt buộc (răng cưa), Lý luận logic cho các hàm bậc cao hơn với Trạng thái cục bộ (lưu trữ đầy đủ cục bộ). Đồng thời logic Tách giải quyết vấn đề răng cưa tạo thành một góc khác.

Công việc này đã được A. Chargeuéraud thực hiện trong Coq trong công việc của mình và hiện tại nó cũng được sử dụng trong ngữ nghĩa Javascript.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.