Câu hỏi là, làm thế nào để bạn loại bỏ các thuật ngữ chạy mãi mãi:
Đặc biệt, những thứ như ( λ x . X x ) ( λ x . X x ) và bộ kết hợp Y KHÔNG phải bằng ngôn ngữ của bạn, vì chúng có thể được sử dụng để xây dựng các tính toán không dừng lại.
Gõ tĩnh trong những thứ như Hệ thống F sẽ loại bỏ những điều này: chúng bắt đầu bằng một phép tính lambda đầy đủ, và sau đó lọc ra các thuật ngữ không được gõ.
Nhưng, hãy làm điều này trong một cài đặt chưa được chỉnh sửa, bạn cần loại bỏ các điều khoản này bằng cách xây dựng . Chúng không thể diễn tả bằng ngôn ngữ của bạn.
Tôi có thể nghĩ ra một số cách ngớ ngẩn để làm điều này, như ngôn ngữ của các chương trình bắt buộc không có chức năng hoặc chỉ có các vòng lặp trong danh sách. Nhưng nói chung, ngay khi bạn có các hàm bậc cao hơn, các cấu trúc có vấn đề này có thể xây dựng được. Vì vậy, trong khi tôi sẽ không nói rằng điều đó là không thể, có lẽ rất khó để thực hiện theo cách có ý nghĩa nhiều.
Bạn có thể lọc tĩnh những thứ này bằng một thứ không phải là hệ thống loại, với trình kiểm tra chấm dứt, nhưng chúng sẽ luôn đưa ra các kết quả dương tính giả và trong khi chúng không gõ tĩnh, chúng vẫn là một bộ lọc tĩnh chương trình của bạn.
Lưu ý rằng, tùy thuộc vào nội dung bạn xem là "gõ động", bạn có thể loại bỏ các chương trình như thế này bằng cách theo dõi các loại bằng cách sử dụng suy luận, nhưng chỉ ném lỗi khi chạy. Do đó, một cái gì đó như tổ hợp Y vẫn bị từ chối, chỉ sau đó. Điều này được gõ động, nhưng có lẽ không phải là những gì bạn đang tìm kiếm.