Câu trả lời:
Ohad hoàn toàn đúng về các vấn đề mà phép tính lambda phải đối mặt làm cơ sở để nói về các lớp phức tạp. Đã có một chút công việc được thực hiện để mô tả tính phức tạp của tính khử trong phép tính lambda, đặc biệt là xung quanh công việc về giảm thiểu được dán nhãn và tối ưu từ luận án tiến sĩ của Lèvy. Nói chung, các mô hình chi phí tốt cho phép tính lambda không nên gán trọng số không đổi cho tất cả các lần giảm beta: bằng trực giác, thay thế một tập hợp con lớn vào nhiều vị trí, phạm vi khác nhau sẽ có giá cao hơn so với ký kết một K redex nhỏ và nếu muốn một số tiền nhất định bất biến chi phí theo các chiến lược viết lại khác nhau, điều này trở nên thiết yếu.
Hai liên kết:
Đối với câu hỏi nào đó gần hơn với câu hỏi của bạn, có một dự án hiện tại phát triển và nghiên cứu một hệ thống loại (ngôn ngữ lập trình chức năng) mà bằng cách phân tích tĩnh có thể xác định giới hạn thời gian chạy chương trình (cũng như các tài nguyên khác được sử dụng bởi Chương trình). Vì vậy, theo một cách nào đó, điều này có thể gợi ý rằng có thể có một số lợi thế trong việc sử dụng lập trình chức năng để phân tích độ phức tạp của thời gian chạy. Trang chủ của dự án là ở đây .
Một giấy tờ đại diện có thể của dự án này là: Jan Hoffmann, Martin Hofmann. Phân tích tài nguyên khấu hao với tiềm năng đa thức - Một suy luận tĩnh về giới hạn đa thức cho các chương trình chức năng. Trong Kỷ yếu của Hội nghị chuyên đề châu Âu lần thứ 19 về lập trình (ESOP'10). liên kết
Có một dòng công việc rất thú vị dựa trên logic tuyến tính, được gọi là lý thuyết phức tạp ngầm, đặc trưng cho các lớp phức tạp khác nhau bằng cách áp dụng các loại kỷ luật khác nhau trên phép tính lambda. IIRC, công việc này bắt đầu khi Bellantoni và Cook, và Leivant tìm ra cách sử dụng hệ thống loại để đệ quy nguyên thủy ràng buộc để nắm bắt các lớp phức tạp khác nhau.
Nhìn chung, điểm hấp dẫn khi làm việc với tính toán lambda là đôi khi có thể tìm thấy các đặc tính mở rộng hơn (nghĩa là dễ điều khiển hơn về mặt toán học) của các tính năng cường độ khác nhau mang lại cho các mô hình như máy Turing sức mạnh của chúng. Ví dụ, một điểm khác biệt giữa máy Turing và máy tính lambda thuần túy là vì Turing nhận được mã chương trình, khách hàng có thể thực hiện thủ công thời gian chờ, để thực hiện khớp nối - và do đó có thể tính toán song song - hoặc. Tuy nhiên, thời gian chờ cũng có thể được mô hình hóa theo số liệu và Escardo đã phỏng đoán (tôi không biết trạng thái của nó) rằng các mô hình không gian số liệu của phép tính lambda hoàn toàn trừu tượng cho thời gian chờ PCF +. Không gian số liệu là các đối tượng toán học được nghiên cứu rất kỹ, và thật tuyệt khi có thể sử dụng cơ thể của lý thuyết đó.
Tuy nhiên, khó khăn của việc sử dụng phép tính lambda là nó buộc bạn phải đối mặt với các hiện tượng bậc cao ngay từ cổng xuất phát. Điều này có thể rất tinh tế, vì luận án Church-Turing thất bại ở loại cao hơn - các mô hình tính toán tự nhiên khác nhau ở loại cao hơn, vì chúng khác nhau về những gì bạn được phép làm với các biểu diễn tính toán. (Song song - hoặc là một ví dụ đơn giản của hiện tượng này, vì nó thể hiện sự khác biệt giữa LC và TM.) Ngoài ra, thậm chí không có sự bao gồm chặt chẽ giữa các mô hình khác nhau, vì sự tương phản của không gian chức năng có nghĩa là sức mạnh biểu cảm nhiều hơn tại một đơn đặt hàng ngụ ý ít sức mạnh biểu cảm cao hơn một đơn hàng.
Theo như tôi biết, tính toán lambda không phù hợp cho mục đích này, vì khái niệm về độ phức tạp thời gian / không gian rất khó hình thành trong tính toán lambda.
1 đơn vị phức tạp thời gian là gì? Giảm beta? Còn các đơn vị phức tạp không gian thì sao? Độ dài của chuỗi?
Tính toán Lambda phù hợp hơn cho các thao tác trừu tượng của các thuật toán, vì nó dễ kết hợp hơn nhiều so với các máy Turing.
Bạn cũng có thể tra cứu các phép tính thay thế rõ ràng, phá vỡ sự thay thế cấp độ meta của phép tính lambda thành một loạt các bước giảm rõ ràng. Điều này chạm vào quan điểm của Charles rằng tất cả các sự thay thế không nên được coi là giống nhau khi xem xét độ phức tạp của thời gian.
Xem Nils Anders Danielsson, Phân tích độ phức tạp bán thời gian nhẹ cho các cấu trúc dữ liệu chức năng thuần túy được triển khai như một thư viện ở Agda. Các trích dẫn được đưa ra trong bài báo cũng trông rất hứa hẹn.
Một điểm mấu chốt đối với tôi là nó phù hợp / hữu ích / hợp lý / bán tự động để rút ra độ phức tạp thời gian của các thuật toán trong phép tính lambda được gõ đơn giản, đặc biệt là nếu các thuật toán đó có thể dễ dàng biểu hiện trong đó (nghĩa là hoàn toàn có chức năng) và đặc biệt là nếu các thuật toán đó các thuật toán sử dụng thiết yếu, ví dụ, ngữ nghĩa gọi theo tên. Cùng với điều này có lẽ là điểm rõ ràng mà người ta không tính toán độ phức tạp chỉ là "trong phép tính lambda" mà là phép tính lambda theo một chiến lược đánh giá nhất định.