Tôi đang cố gắng chứng minh một số tuyên bố về việc thực thi trong các chương trình Java theo một số hạn chế nặng nề (về cơ bản tôi có một phỏng đoán rằng nếu hai phương thức thỏa mãn một tập các ràng buộc cho một đầu vào đã cho thì chúng tương đương - nghĩa là giá trị trả về và trạng thái sau thực hiện giống hệt nhau). Để chứng minh điều này tôi đang tìm kiếm một loại hình thức sẽ cho phép tôi nói về điều này.
Tôi quen thuộc với ngữ nghĩa hoạt động của các ngôn ngữ chức năng và tôi có thể dịch các vòng lặp / trong khi các vòng lặp thành các hàm đệ quy ... Tôi không nên làm điều này và thật tuyệt khi có một số máy móc để tôi có thể ở trong vùng đất mệnh lệnh .
Cụ thể hơn, tôi muốn lý do về trạng thái của một phương thức ở bước thứ k thực hiện. Điều này bao gồm nhà nước toàn cầu:
- Các cuộc gọi như
this.field = 2
cập nhật trạng thái lớp học của chúng tôi - Gọi trạng thái cập nhật thông số sửa đổi bên ngoài phương thức của chúng tôi:
myParam.setFoo(...)
myParam.x = y
- Gọi phương thức tĩnh
Blah.static_side_effects()
Tôi giả định rằng tất cả những điều này là xác định . Đó là, tôi muốn chính thức hóa giả định rằng nếu bất kỳ cập nhật toàn cầu nào về trạng thái này xảy ra theo hai phương thức thì cả hai trạng thái thực thi toàn cục và cục bộ đều giống nhau, thì trạng thái mới cũng sẽ giống hệt nhau - rằng mỗi bước tính toán được xác định chính xác bởi nhà nước toàn cầu và nhà nước địa phương. Điều này rõ ràng loại trừ RNG và song song (nhưng tôi có thể giải quyết vấn đề này sau ...).
Bất kỳ ý tưởng hoặc nguồn về làm thế nào tôi có thể tiếp cận điều này? Suy nghĩ duy nhất của tôi là coi các phương thức như một danh sách các câu lệnh và cố gắng mô tả một ngữ nghĩa câu lệnh chính thức.
Nếu có thể, tôi thích làm điều này ở cấp độ ngôn ngữ Java hơn là cấp độ JVM. Điều này có thể không khả thi nhưng mục tiêu của tôi bây giờ là đưa ra một số giả định hợp lý về ngữ nghĩa hoạt động của tôi và sau đó lấy nó từ đó.
Ồ, một lưu ý cuối cùng - bất kỳ đề xuất nào về cách tôi có thể cải thiện câu hỏi này sẽ được đánh giá rất cao. Tôi loay hoay tìm cách tìm ngôn ngữ phù hợp để đặt câu hỏi và nếu tôi lạm dụng thuật ngữ (như trạng thái thực thi cục bộ / toàn cầu ...) tôi rất muốn sửa lỗi này.