Menggunakan kalkulus lambda untuk mendapatkan kompleksitas waktu?

43

Adakah manfaat untuk menghitung kompleksitas waktu suatu algoritma menggunakan lambda calculus? Atau adakah sistem lain yang dirancang untuk tujuan ini?

Referensi apa pun akan dihargai.

Shane
sumber

Jawaban:

22

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:

  1. Lawall & Mairson, 1996, Optimalitas dan inefisiensi: apa yang bukan model biaya kalkulus lambda? (.ps.gz) - Survei seminal tentang berbagai masalah yang berkaitan dengan pemilihan model biaya, dan mengapa banyak ide yang masuk akal tidak berhasil.
  2. Dal Lago & Martini, 2008, Kalkulus lambda yang lemah sebagai mesin yang masuk akal - Menawarkan model biaya untuk kalkulus lambda dengan nilai, bersama dengan diskusi literatur yang baik.
Charles Stewart
sumber
1
Referensi yang menarik, saya tidak tahu tentang karya-karya ini.
Iddo Tzameret
1
Situasi telah berubah baru-baru ini tentang topik ini. Lihat jawaban saya di bawah ini.
Marc
23

λλ

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

Iddo Tzameret
sumber
18

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.

Neel Krishnaswami
sumber
12

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.

Ohad Kammar
sumber
7

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.

Dominic Mulligan
sumber
7

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.

sclv
sumber