Jadi beberapa saat yang lalu saya pertama kali seseorang memberitahu saya bahwa panggilan / cc dapat memungkinkan objek bukti untuk bukti klasik dengan menerapkan hukum Peirce. Saya melakukan beberapa pemikiran tentang topik baru-baru ini dan sepertinya saya tidak dapat menemukan kesalahan dengan itu. Namun sepertinya saya tidak bisa melihat orang lain membicarakannya. Sepertinya tidak ada diskusi. Apa yang menyebabkannya?
Tampak bagi saya bahwa jika Anda memiliki konstruksi seperti dalam beberapa konteks maka 1 dari dua hal itu benar. Entah Anda memiliki akses ke instance ⊥ entah bagaimana dalam konteks saat ini di mana aliran kontrol kasus tidak akan pernah mencapai di sini dan kami aman untuk mengasumsikan apa pun ATAU mengingat bahwa f : ¬ ( ¬ P ) berarti f : ( P → ⊥ ) → ⊥ yang satu-satunya cara f dapat mengembalikan ⊥ adalah dengan membangun sebuah instance dari Pdan menerapkannya dua argumen itu (sebuah instance dari . Dalam kasus seperti itu sudah ada BEBERAPA cara membangun sebuah instance P ; tampaknya masuk akal untuk panggilan / cc untuk menarik konstruksi ini untuk saya. Alasan saya di sini tampaknya agak mencurigakan bagi saya tetapi kebingungan saya tetap ada. Jika panggilan / cc tidak hanya membuat instance P dari kehabisan udara (saya tidak melihat bagaimana itu) maka apa masalahnya?
Apakah beberapa istilah yang diketik dengan baik tidak mengandung panggilan / cc tidak memiliki bentuk normal? Adakah properti lain dari ekspresi yang menyebabkan mereka menjadi tersangka? Apakah ada alasan mengapa seorang konstruktivis tidak menyukai panggilan / cc?
Jawaban:
Matematika konstruktif bukan hanya sistem formal tetapi lebih pada pemahaman tentang apa itu matematika. Atau dengan kata lain, tidak setiap jenis semantik diterima oleh ahli matematika konstruktif.
Untuk seorang matematikawan konstruktifp∨¬p
call/cc
terlihat seperti curang. Pertimbangkan bagaimana kita menyaksikan menggunakancall/cc
:call/cc
Pemahaman konstruktif tentang disjungsi adalah kepastian algoritmik , tetapi hal di atas sulit membuat keputusan. Sebagai ujian, seorang ahli matematika yang konstruktif mungkin bertanya kepada Anda bagaimana
call/cc
membantu membuktikan bahwa setiap mesin Turing berhenti atau menyimpang. Dan apa program menyaksikan fakta ini? (Seharusnya Oracle Menghentikan.)sumber
Seperti yang Anda perhatikan, ada kemungkinan interpretasi konstruktif dari logika klasik dalam pengertian ini. Fakta bahwa logika klasik sama dengan logika intuitionistic (katakanlah, Heyting Arithmetic) telah dikenal selama beberapa waktu (sudah pada tahun 1933, misalnya Godel ) menggunakan terjemahan negasi ganda.
Dengan argumen yang lebih canggih, dapat ditunjukkan bahwa Aritmatika Peano lebih konservatif daripada HA untuk pernyataan. Inti dari hasilnya adalah bahwa bukti klasik Π 0 2 yang melibatkan c a l l / c c memiliki konten komputasi yang sama dengan pernyataan tanpa konstruk itu (olehΠ02 Π02 call/cc transformasi CPS ).
Namun ini tidak benar untuk pernyataan di atas : pernyataan di Σ 0 3 , dapat dibuktikan dalam PA, mungkin tidak memiliki bentuk normal yang dapat diterima untuk mengekstraksi saksi! Ilmuwan komputer mungkin tidak peduli tentang komputasi dengan bukti pada tingkat ini, tetapi agak tidak nyaman untuk pertimbangan filosofis : apakah kita telah membuktikan keberadaan sesuatu, atau tidak?Π02 Σ03
Saya pikir ini merangkum mengapa "memperbaiki" logika non-konstruktif dengan menambahkan mungkin tidak memuaskan.call/cc
Yang sedang berkata, ada banyak pekerjaan mengeksplorasi aspek komputasi perhitungan dalam kerangka "klasik Curry-Howard", misalnya Mesin Krivine, kalkulus Parigot ( ) dan banyak lainnya. Lihat di sini untuk ikhtisar.λμ¯¯¯μ~
Akhirnya, mungkin berguna untuk mencatat bahwa sementara situasinya agak dipahami dengan baik dalam predikat kalkulus dan kasus aritmatika, teori yang lebih kuat jauh lebih sedikit dieksplorasi. Sebagai contoh, IIRC, ZFC konservatif lebih IZF untuk kalimat juga (ZFC adalah konservatif lebih ZF untuk kalimat aritmatika, dan ZF konservatif lebih IZF), yang menunjukkan ada makna komputasi untuk aksioma pilihan. Namun ini sangat banyak bidang penelitian yang aktif ( krivine , Berardi et al.Π02 )
Sunting: Pertanyaan yang sangat relevan tentang mathoverflow muncul di sini: /mathpro/29577/solved- berikutnyaent- calculus-as-programming-language
sumber
inr (fun x -> callcc(...))
Saya setuju dengan jawaban Andrej dan Cody. Namun, saya pikir perlu juga disebutkan mengapa konstruktivis harus peduli dengan operator kontrol (panggilan / cc).
Operator-operator ini biasanya terhubung dengan logika klasik karena ketika orang melihat aturan mengetik mereka (Felleisen, Griffin) mereka memperhatikan bahwa tipe-tipe tersebut memiliki bentuk Hukum Peirce atau eliminasi ganda-negasi (¬ ¬ P⊢ P. ). Namun demikian, operator kontrol ditemukan dalam pengaturan bahasa pemrograman Skema yang tidak diketik. Tujuan mereka adalah untuk dapat memperkaya bahasa pemrograman: alih-alih menulis program dengan gaya kelanjutan, seseorang akan dapat menulis program dengan gaya langsung menggunakan operator kontrol.
Satu keuntungan dalam menggunakan operator kontrol dalam Proof Theory adalah yang metodologis: alih-alih menggunakan double-negation- dan A-translation untuk mengekstrak program dari buktiΠ02 -Theorem dari Aritmatika Klasik, seseorang akan menggunakan operator kontrol dan melakukan normalisasi penulisan ulang langsung pada buktinya.
Keuntungan lain yang harus diperhatikan oleh konstruktivis adalah operator kontrol menunjukkan cara bagaimana membangun ekstensi Curry-Howard dari logika intuitionistic yang masih konstruktif. Misalnya, membatasiP dari hukum eliminasi ganda negasi ke Σ01 -kelas formula, memungkinkan untuk memiliki operator kontrol yang diketik yang dapat membuktikan misalnya Prinsip Markov atau Pergeseran Negasi Ganda . Prinsip-prinsip ini biasanya tidak diterima oleh konstruktivis, tetapi karena alasan yang hampir tidak baik, karena diketahui bahwa mereka tidak menghancurkan sifat Disjungsi dan Keberadaan ketika ditambahkan ke logika intuitionistic.
sumber