Saya hanya ingin tahu beberapa contoh fungsi yang dapat dihitung oleh kalkulus lambda yang tidak diketik tetapi tidak dengan mengetik kalkulus lambda.
Karena saya seorang pemula, beberapa pengulangan informasi latar belakang akan dihargai.
Terima kasih.
Sunting: dengan kalki lambda yang diketik, saya bermaksud untuk mengetahui tentang Sistem F dan kalkulus lambda yang diketik sederhana. Secara fungsi, maksud saya adalah fungsi Turing-computable.
pl.programming-languages
type-theory
lambda-calculus
computable-analysis
Timothy Zacchari
sumber
sumber
Jawaban:
Contoh yang bagus diberikan oleh Godelization: dalam lambda calculus, satu-satunya hal yang dapat Anda lakukan dengan suatu fungsi adalah menerapkannya. Akibatnya, tidak ada cara untuk menulis fungsi tipe tertutup , yang mengambil argumen fungsi dan mengembalikan kode Godel untuk itu.( N → N ) → N
Menambahkan ini sebagai aksioma untuk aritmatika Heyting biasanya disebut "tesis Gereja konstruktif", dan merupakan aksioma yang sangat anti-klasik. Yaitu, konsisten untuk menambahkannya ke HA, tetapi tidak ke aritmatika Peano! (Pada dasarnya, ini adalah fakta klasik bahwa setiap mesin Turing berhenti atau tidak, dan tidak ada fungsi yang dapat dihitung yang dapat menyaksikan fakta ini.)
sumber
Jawaban paling sederhana diberikan oleh fakta bahwa kalki lambda yang diketik sesuai dengan logika (kalkulus lambda yang diketik -> logika predikat; sistem f -> logika orde kedua) dan logika konsisten tidak dapat membuktikan konsistensi mereka sendiri.
Jadi misalkan Anda memiliki bilangan asli (atau Gereja yang menyandi angka-angka alami) dalam kalkulus lambda yang Anda ketik. Dimungkinkan untuk melakukan penomoran Gödel yang menetapkan setiap istilah dalam Sistem F ke bilangan alami yang unik. Kemudian, ada fungsi yang mengambil bilangan asli apa pun (yang sesuai dengan istilah yang diketik dengan baik di Sistem F) ke nomor alami lainnya (yang sesuai dengan bentuk normal dari istilah Sistem F yang diketik dengan baik) dan melakukan sesuatu yang lain untuk bilangan asli apa pun yang tidak sesuai dengan istilah yang diketik dengan baik di Sistem F (katakanlah, itu mengembalikan nol). Fungsi adalah computable, sehingga dapat dihitung dengan kalkulus lambda yang tidak diketik tetapi bukan kalkulus lambda yang diketik (karena yang terakhir akan menjadi bukti konsistensi logika urutan kedua dalamff f logika orde kedua, yang akan menyiratkan bahwa logika orde kedua tidak konsisten).
Peringatan 1: Jika orde kedua logika adalah tidak konsisten, itu mungkin mungkin untuk menulis di Sistem F ... dan / atau mungkin tidak mungkin untuk menulis dalam kalkulus lambda diketikan - Anda bisa menulis sesuatu, tetapi tidak mungkin selalu berakhir, yang merupakan kriteria "dapat dihitung".ff f
Peringatan 2: Kadang-kadang dengan "kalkulus lambda yang diketikkan" berarti orang "kalkulus lambda yang diketik dengan operator titik tetap atau fungsi rekursif." Ini akan menjadi PCF lebih atau kurang , yang dapat menghitung fungsi yang dapat dihitung, seperti kalkulus lambda yang tidak diketik.
sumber
The untyped posseses kalkulus rekursi umum dalam bentuk Combinator. Cukup ketik -calculus tidak. Jadi, setiap fungsi yang memerlukan rekursi umum adalah kandidat, misalnya fungsi Ackermann. (Saya melewatkan beberapa detail tentang seberapa tepatnya kami mewakili bilangan alami di setiap sistem, tetapi pada dasarnya pendekatan yang masuk akal akan dilakukan.)Y λλ Y λ
Tentu saja, Anda selalu dapat memperluas kalkulasi yang hanya diketik agar sesuai dengan kekuatan , tetapi kemudian Anda mengubah aturan permainan.Yλ Y
sumber
Kalkulus lambda yang diketik sederhana sebenarnya sangat lemah. Misalnya, tidak dapat mengenali bahasa reguler . Namun, saya belum pernah menemukan karakterisasi yang tepat dari serangkaian bahasa yang dapat dikenali oleh STLC.a∗
sumber
Salah satu visi dari batas-batas yang sangat normal pada balk yang saya sukai adalah sudut komputabilitas. Dalam kalkulus yang diketik dengan normalisasi normal, seperti kalkulus lambda yang diketik dengan sederhana, Sistem F, atau Kalkulus Konstruksi, Anda memiliki bukti bahwa semua istilah akhirnya berakhir.
Jika bukti ini konstruktif, Anda mendapatkan algoritme tetap untuk mengevaluasi semua istilah dengan batas atas yang dijamin pada waktu perhitungan. Atau Anda juga dapat mempelajari bukti (tidak-harus-konstruktif) dan mengekstrak batas atas darinya - yang kemungkinan besar , karena kalkulus itu ekspresif.
Batasan ini memberi Anda contoh fungsi "alami" yang tidak dapat diketik dalam kalkulus lambda tetap ini: semua fungsi aritmatika yang secara asimptot lebih unggul dari ikatan ini.
Jika Aku ingat benar, hal mengetik hanya diketik lambda-kalkulus dapat dievaluasi di menara dari eksponensial:
O(2^(2^(...(2^n)..)
; suatu fungsi yang tumbuh lebih cepat daripada semua menara semacam itu tidak akan dapat diungkapkan dalam batu ini. Sistem F sesuai dengan logika orde kedua intuitionistic, sehingga kekuatan komputabilitasnya sangat besar. Untuk merebut kekuatan komputabilitas dari teori yang bahkan lebih kuat, kami biasanya beralasan dalam hal teori set dan teori model (mis. Tata cara apa yang dapat dibangun) alih-alih teori komputabilitas.sumber
sumber
A
yangA \ident A \rightarrow A
tidak aneh? Kedengarannya tidak masuk akal bagi saya, apa yang saya hadapi?