Các câu hỏi bạn thực sự khá khác nhau.
Tuy nhiên, tôi không chắc mức độ này áp dụng cho chương trình thế giới thực như hệ điều hành. Các loại chương trình này có cần toàn bộ sức mạnh của Turing không?
Phải mất rất ít để một mô hình tính toán được hoàn thành. Ví dụ, các mô hình khác nhau với bộ đếm có thể mô phỏng các máy Turing. Nếu bạn tin rằng phần mềm của bạn yêu cầu nhiều hơn hai bộ đếm mà bạn có thể thao tác tùy ý, thì bạn đang sử dụng ngôn ngữ hoàn chỉnh Turing. Mặc dù số nguyên máy bị giới hạn apriori, nhưng cấu trúc dữ liệu được phân bổ theo heap thường thì không. Nếu phần mềm của bạn cần danh sách, cây và dữ liệu được phân bổ động khác, bạn đang sử dụng ngôn ngữ hoàn chỉnh Turing.
Có các mô hình tính toán đơn giản hơn (như PR) trong đó các ứng dụng này có thể được viết không? Nếu vậy, điều này cho phép mức độ chính xác của chương trình là bao nhiêu?
Điều quan trọng là phải nhận ra rằng chúng tôi không muốn kiểm tra các thuộc tính tùy ý của phần mềm của chúng tôi. Kiểm tra các thuộc tính rất cụ thể, hẹp (không tràn bộ đệm, không có hội nghị con trỏ null, không có vòng lặp vô hạn, v.v.) giúp cải thiện đáng kể chất lượng và khả năng sử dụng của phần mềm. Về lý thuyết, những vấn đề như vậy vẫn không thể giải quyết được. Trong thực tế, tập trung vào các thuộc tính cụ thể cho phép chúng tôi khám phá cấu trúc trong các chương trình mà chúng tôi thường có thể khai thác để giải quyết vấn đề.
Cụ thể, bạn có thể sửa đổi câu hỏi ban đầu của mình thành
Có sự trừu tượng hóa phần mềm của tôi mà tôi có thể phân tích hiệu quả trong một mô hình hoàn chỉnh không Turing không?
Một sự trừu tượng là một mô hình bao gồm hành vi của phần mềm gốc và có thể nhiều hành vi bổ sung. Có những mô hình như máy một quầy hoặc hệ thống đẩy không hoàn thành Turing và chúng ta có thể phân tích. Cách tiếp cận tiêu chuẩn trong xác minh chương trình với các công cụ tự động là xây dựng một sự trừu tượng hóa trong một mô hình như vậy và kiểm tra nó theo thuật toán.
Có những ứng dụng mà mọi người quan tâm đến các thuộc tính tinh vi của phần cứng hoặc phần mềm của họ. Các công ty phần cứng muốn chip của họ thực hiện chính xác các thuật toán số học, các công ty ô tô và điện tử muốn có phần mềm chính xác. Nếu điều đó quan trọng, bạn nên sử dụng một con người (được đào tạo).