Fungsi yang mengetik kalkulus lambda tidak dapat menghitung


12

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.


Ada banyak disiplin pengetikan untuk -calculi, dan jawaban atas permintaan Anda sebagian bergantung pada pilihan disiplin pengetikan yang ada dalam pikiran Anda. Itu juga tergantung pada apa yang Anda maksud dengan fungsi. Salah satu contoh perbedaan adalah bahwa pengetikan disiplin seperti Sistem F hanya dapat mengetikkan program normalisasi, sedangkan -calculus yang tidak diketik mengandung istilah yang tidak normal. λλ
Martin Berger

Saya sedang berpikir tentang Sistem F dan kalkulus lambda mengetik sederhana. Secara fungsi, maksud saya fungsi turing-computable.
Timothy Zacchari

Jawaban:


15

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.(NN)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.)


Saya tidak mengerti bagaimana ini konsisten dengan teori ekstensional: anggap f dan g secara ekstensi sama, tetapi dengan implementasi yang berbeda dan oleh karena itu kode godel yang berbeda. Apakah fungsi Anda mengembalikan angka yang sama untuk f dan g?
cody

3
Itu tidak konsisten dengan ekstensionalitas! Namun, dalam HA dan adalah penghubung logis, bukan fungsi / catatan. Jadi mereka harus dapat diwujudkan tetapi realisasi mereka tidak harus bersifat ekstensional. Andrej Bauer adalah ahli dalam hal ini, jadi jika Anda mengajukan pertanyaan, Anda pasti akan mendapatkan jawaban yang baik.
Neel Krishnaswami

11

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 dalamfff 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".fff

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.


10

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


Untuk beberapa alasan saya merasa di kepala saya bahwa Anda bisa melakukan Ackermann di System F ...
Rob Simmons

@ Rob, seperti yang saya mengerti, Andrej tidak mengatakan itu tidak terjadi.
Kaveh

1
Saya kira saya mengatakan bahwa fungsi Ackermann dapat diprogram dalam -calculus yang tidak diketik (karena setiap fungsi yang dikomputasi dapat), tetapi tidak ada yang hanya diketik -calculus. Saya tidak mengatakan apa-apa tentang System F.λλλ
Andrej Bauer

Oh, benar, aku hanya bodoh. (Karena pertanyaannya cukup ambigu antara berbicara tentang Sistem F dan berbicara tentang STLC, saya memilih sistem yang lebih kuat dan melupakan pertanyaan yang lebih sederhana.)
Rob Simmons

Fungsi Ackermann di -calculus adalah . Menurut tipe penyimpulan yang saya buat semester ini, memiliki tipe sederhana: , yang mengerikan, tetapi mungkin benar. Masalah dengan STS bukan Ackermann - ini, misalnya, mensimulasikan mesin Turing. Anda tidak bisa melakukan itu tanpa kombinatorλ m . m ( λ fλλm.m(λfn.nf(f1_)) suc(((((fe)fe)h)((((fe)fe)h) Yhg)g)(((bc)ab)(bc)ac)d)dY
Francisco Mota

6

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


5
Saya pikir apa yang dapat dihitung tergantung pada jenis yang Anda lihat. Ketika Anda mewakili naturals atas tipe , di mana adalah tipe dasar, dan menganggap kesetaraan sebagai beta-kesetaraan, fungsi yang dapat didefinisikan adalah polinomial yang diperluas (polinomial + jika-kemudian- lain). IIRC, Schwichtenberg membuktikan ini, meskipun saya belum pernah membaca makalah aslinya (dalam bahasa Jerman). (Saya pikir nama makalah, yang diterjemahkan, adalah "Fungsi Yang Dapat Dipastikan dalam Kalkulator Diketik Lambda", 1976.)p(pp)ppp
Neel Krishnaswami

2
@ Neel. Terjemahan yang sedikit lebih baik adalah Fungsi yang Dapat Ditentukan dalam -calculus with Typesλ . Anda dapat mengunduhnya di sini , hanya sepanjang dua halaman. Apakah ia tahu apa yang terjadi pada tipe-tipe lain, dengan gagasan persamaan lainnya, atau dengan pengkodean bilangan alami lainnya?
Martin Berger

@Marting: Terima kasih! Saya sekarang tinggal di Jerman, jadi ini insentif tambahan yang bagus untuk melatih bahasa Jerman saya. :)
Neel Krishnaswami

4

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.


0

Δ=λx.xxΔΔβ ΔΔΔAA=AA


λAAAA

Ya, Anda benar, tetapi saya pikir (mungkin saya salah) bahwa tidak mungkin untuk memiliki tipe seperti itu di lambda-calculus atau Sistem F, yang keduanya sangat normal.
Charles

ΔΔΔΔ

@ Kaveh Mengapa memiliki tipe Ayang A \ident A \rightarrow Atidak aneh? Kedengarannya tidak masuk akal bagi saya, apa yang saya hadapi?
Martijn

Anda mungkin berpikir klasik tentang set dan ruang fungsi di atasnya. Pikirkan misalnya tentang string biner terbatas dan fungsi yang dapat dihitung atas mereka.
Kaveh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.