Apakah ada gagasan yang baik tentang non-terminasi dan menghentikan bukti dalam teori tipe?

10

Teori tipe konstruktif dengan interpretasi dasarnya di bawah korespondensi curry howard hanya terdiri dari total, fungsi yang dapat dihitung. Dalam literatur, beberapa telah dikatakan menggunakan "teori tipe komputasi" untuk mewakili non-terminasi dalam program fungsional, namun dalam makalah yang saya temui, ini tampaknya tidak menjadi motivasi utama untuk teori (Misalnya Benton menyebutkan non-determinisme, kelanjutan, dan pengecualian, tanpa menjelaskan lebih lanjut tentang non-terminasi), jadi saya belum menemukan makalah yang memberikan interpretasi kuat tentang non-terminasi menggunakan teori tipe komputasi.

Secara khusus, apa yang saya cari adalah cara yang memberikan jenis yang mewakili kemungkinan perhitungan tipe , mungkin tidak berakhir , harus ada beberapa gagasan bukti bahwa mengakhiri jenis , sehingga diberikan dan , kita dapat membangun sebuah istilah .T ( A ) x : T ( A ) H ( x ) x : T ( A ) p : H ( x ) ˜ x : AAT(A)x:T(A)H(x)x:T(A)p:H(x)x~:A

Motivasi saya untuk ini adalah, saya ingin akhirnya dapat secara lebih formal menghubungkan gagasan dalam teori kompleksitas komputasi ke teori tipe konstruktif. Secara khusus, saya tertarik pada kekuatan apa sebagai teori konstruktif jenis mendapatkan dengan akses ke oracle berhenti, dan untuk melakukannya, saya tentu saja perlu benar-benar memiliki gagasan formal tentang kemungkinan non-pemutusan, dan bukti berhenti untuk pergi bersama dengan itu di dalam kerangka teori tipe.

Nathan BeDell
sumber
3
Apakah Anda melihat Constable-Mendler, Definisi Rekursif dalam Teori Tipe ? Mereka memberikan cara untuk mendefinisikan untuk setiap fixed-point definisi rekursif dari fungsi parsial dari ke dengan domain predikat sehingga untuk , merupakan jenis bukti yang perhentian di . Saya percaya ini diterapkan di Nuprl. A B d o m ( f ) x A d o m ( f ) ( x ) f xfAB dom(f)xAdom(f)(x)fx
Ulrik Buchholtz
3
Apakah Anda mencari penundaan monad ?
Andrej Bauer
@UlrikBuchholtz Saya pikir itu cukup dekat dengan apa yang saya cari, meskipun saya mengalami beberapa kesulitan untuk membaca notasi Nuprl yang digunakan di koran - yang saya tidak mirip dengan itu. Jika saya mengerti dengan benar, mereka pada dasarnya mendefinisikan fungsi rekursif parsial dari ke (atau setidaknya, mengidentifikasinya dengan) sebagai fungsi rekursif total dari $ \ {x: A | dom (f) (g) \} ke B. (Lihat komentar di bagian bawah halaman 27)BAB
Nathan BeDell

Jawaban:

11

Karena salah satu aplikasi utama dari Teori Tipe dalam formalisasi adalah mempelajari bahasa pemrograman dan perhitungan secara umum, banyak pemikiran telah digunakan untuk mewakili kemungkinan program yang tidak berakhir.

Saya tidak akan membuat survei lengkap di sini, tapi saya akan mencoba dan memberikan petunjuk tentang arah utama dari berbagai arah.

  • Pendekatan "relasional": Anda dapat mendefinisikan program hipotetis Anda seperti kata relasi, yang berlaku jika didefinisikan pada dan . Ini biasanya dilakukan dengan predikat T-Kleene . Ini bekerja dengan baik dalam formalisasi teori tipe seperti halnya dalam logika klasik, (meskipun tentu saja Anda tidak dapat membuktikan ).f x f ( x ) = y x ( y , F x y ) ( ¬ y , F x y )F x yfxf(x)=yx(y,F x y)(¬y,F x y)

    Cara yang lebih canggih untuk melakukan ini adalah metode "Bove-Capretta" (lihat Pemodelan Rekursi dalam Teori Tipe , yang untuk setiap fungsi rekursif, mendefinisikan "predikat yang dapat diakses" yang mengkodekan fakta bahwa perhitungan yang diberikan adalah terbatas. Definisi fungsi mengambil argumen tambahan yang merupakan bukti bahwa input yang diberikan dapat diakses. Untuk mendefinisikan fungsi tanpa predikat tambahan ini, Anda perlu membuktikan bahwa setiap kombinasi input yang mungkin dapat diakses.

  • Pendekatan "koinduktif": ini mungkin pendekatan yang paling dieksplorasi, dan apa yang disebut komentar Andrej. Perhitungan tipe didefinisikan sebagai tipe induktif (dari tautan Andrej , oleh Capretta, Altenkirch & Uustalu:A

    codata Delay A =
    | Now : A -> Delay A
    | Later (Delay A)
    

    Ini mengkode aliran Latertoken yang kemungkinan tak terbatas ("ticks" of computation) mungkin berakhir dengan hasil Now a. Non-terminasi setara dengan menjadi bisimilar dengan program ini

    loop = Loop selanjutnya dan terminasi dapat didefinisikan oleh predikat induktif atas Delay A:

    data Terminates : Data A -> Prop =
    | Term_now : forall x, Terminates (Now x)
    | Term_later : forall d, Terminates d -> Terminates (Later d)
    

    Saya pikir agda-istas memiliki banyak hal untuk dikatakan tentang hal ini yang mereka sebut sebagai parsialitas monad (lihat misalnya Danielsson ).

  • Pendekatan "teori tipe parsial" : ini sedikit lebih eksperimental (teorinya masih dikerjakan), tetapi ada beberapa teori tipe yang sedang dikembangkan untuk mengatasi kenyataan bahwa pada dasarnya ada dua jenis fungsi yang ingin kita lakukan. tulis dalam teori tipe: istilah bukti dan program. Ternyata menjadi sulit untuk mendapatkan teori yang masuk akal tentang hal-hal ini (dan mempertahankan konsistensi teori), tetapi upaya serius dilakukan di sini oleh Casinghino et al , dan upaya serupa oleh Kimmel et al .

Saya yakin ada pendekatan lain yang tidak saya sadari, dan saya akan senang jika seseorang ingin melengkapi daftar ini.

Saya mungkin harus mencatat bahwa menambahkan oracle terminasi ke (konsisten) teori jenis adalah banyak seperti menambahkan oracle kebenaran bagi kalimat, dengan konsekuensi yang relatif dipahami dengan baik.Π10

Ada interaksi lain yang cukup bermanfaat antara teori tipe dan teori kompleksitas, biasanya di bawah payung kompleksitas komputasi implisit .

cody
sumber
Menarik, terima kasih atas informasinya! Saya percaya pendekatan teori tipe parsial mungkin paling dekat dengan apa yang saya cari - dan paling tidak, makalah Kimmel tampaknya memberikan pada tingkat tertentu secara spesifik apa yang saya cari (lihat aturan mengetik untuk "tcast" ).
Nathan BeDell