Jawaban:
Ohad benar tentang masalah yang dihadapi kalkulus lambda sebagai dasar untuk berbicara tentang kelas kompleksitas. Telah ada sedikit pekerjaan yang dilakukan pada karakterisasi kompleksitas reducibilitas dalam kalkulus lambda, terutama di sekitar pekerjaan pada pengurangan berlabel dan optimal dari tesis PhD Lèvy. Secara umum, model biaya yang baik untuk kalkulus lambda tidak boleh menetapkan bobot konstan untuk semua pengurangan beta: secara intuitif, mengganti subterm besar ke banyak tempat yang berbeda-beda harus lebih mahal daripada mengontrak sebuah redex K kecil, dan jika seseorang menginginkan jumlah tertentu dari invarian biaya di bawah strategi penulisan ulang yang berbeda, ini menjadi penting.
Dua tautan:
Untuk sesuatu yang lebih dekat dengan pertanyaan Anda, ada proyek saat ini yang mengembangkan dan mempelajari sistem tipe (bahasa pemrograman fungsional) yang dengan analisis statis dapat menentukan batas waktu program (polinomial) batas program (serta sumber daya lain yang digunakan oleh program). Jadi dalam beberapa hal, ini mungkin mengisyaratkan bahwa mungkin ada beberapa keuntungan dalam menggunakan pemrograman fungsional untuk menganalisis kompleksitas run-time. Beranda proyek ada di sini .
Makalah yang mungkin mewakili proyek ini adalah: Jan Hoffmann, Martin Hofmann. Analisis Sumber Daya Amortisasi dengan Potensi Polinomial - Kesimpulan Statis Batas Polinomial untuk Program Fungsional. Dalam Prosiding Simposium Eropa ke-19 tentang Pemrograman (ESOP'10). link
Ada garis pekerjaan yang sangat menarik berdasarkan logika linier, yang disebut teori kompleksitas implisit, yang mencirikan berbagai kelas kompleksitas dengan memaksakan berbagai disiplin ilmu pada kalkulus lambda. IIRC, pekerjaan ini dimulai ketika Bellantoni dan Cook, dan Leivant menemukan cara menggunakan sistem tipe untuk mengikat rekursi primitif untuk menangkap berbagai kelas kompleksitas.
Secara umum, daya tarik untuk bekerja dengan kalkulus lambda adalah bahwa kadang-kadang mungkin untuk menemukan karakterisasi yang lebih ekstensional (yaitu, lebih dapat ditelusur secara matematis) dari berbagai fitur intensional yang memberikan model seperti mesin Turing kekuatan mereka. Sebagai contoh, satu perbedaan antara mesin Turing dan kalkulus lambda murni adalah bahwa sejak Turing menerima kode program, klien dapat secara manual mengimplementasikan timeout, untuk mengimplementasikan dovetailing - dan karenanya dapat menghitung paralel-atau. Namun, batas waktu juga dapat dimodelkan secara metrik, dan Escardo telah memperkirakan (saya tidak tahu statusnya) bahwa model ruang metrik dari kalkulus lambda sepenuhnya abstrak untuk batas waktu PCF +. Ruang metrik adalah objek matematika yang dipelajari dengan sangat baik, dan sangat bagus untuk dapat memanfaatkan tubuh teori itu.
Namun, kesulitan menggunakan kalkulus lambda adalah bahwa hal itu memaksa Anda untuk menghadapi fenomena tingkat tinggi langsung dari gerbang awal. Ini bisa sangat halus, karena tesis Church-Turing gagal pada tipe yang lebih tinggi - model alami perhitungan berbeda pada tipe yang lebih tinggi, karena mereka berbeda dalam apa yang Anda boleh lakukan dengan representasi perhitungan. (Paralel-atau merupakan contoh sederhana dari fenomena ini, karena menunjukkan perbedaan antara LC dan TMs.) Selain itu, bahkan tidak ada inklusi yang ketat antara model yang berbeda, karena contravariance dari ruang fungsi berarti bahwa kekuatan yang lebih ekspresif pada satu urutan menyiratkan kekuatan kurang ekspresif satu urutan lebih tinggi.
Sejauh yang saya tahu, kalkulus lambda tidak cocok untuk tujuan ini, karena gagasan kompleksitas waktu / ruang sulit untuk dirumuskan dalam kalkulus lambda.
Apakah 1 unit kompleksitas waktu? Pengurangan beta? Bagaimana dengan unit kompleksitas ruang? Panjang talinya?
Kalkulus Lambda lebih cocok untuk manipulasi abstrak algoritma, karena jauh lebih mudah dikomposisikan daripada mesin Turing.
Anda juga bisa melihat kalkulus substitusi eksplisit yang memecah substitusi meta-level dari lambda-kalkulus menjadi serangkaian langkah reduksi eksplisit. Ini menyentuh pada poin Charles bahwa semua penggantian tidak boleh dianggap sama ketika mempertimbangkan kompleksitas waktu.
Lihat Nils Anders Danielsson, Analisis Kompleksitas Waktu Semiformal Ringan untuk Struktur Data Murni Fungsional yang diimplementasikan sebagai perpustakaan di Agda. Kutipan yang diberikan di koran juga terlihat sangat menjanjikan.
Salah satu kunci utama bagi saya adalah bahwa itu sesuai / berguna / masuk akal / semi-otomatable untuk mendapatkan kompleksitas waktu dari algoritma dalam kalkulus lambda yang diketik sederhana terutama jika algoritma tersebut mudah diungkapkan di dalamnya (yaitu murni fungsional) dan sangat terutama jika itu algoritma memanfaatkan semantik, misalnya, panggilan dengan nama semantik. Bersamaan dengan ini adalah poin yang mungkin jelas bahwa seseorang tidak menghitung kompleksitas hanya "dalam kalkulus lambda" tetapi dalam kalkulus lambda di bawah strategi evaluasi yang diberikan.