Bahasa pemrograman yang hanya dapat mengimplementasikan fungsi bijective yang dapat dikomputasi?

10

Apakah ada bahasa pemrograman (atau logika) yang dapat mengimplementasikan (atau mengekspresikan) fungsi jika dan hanya jika f adalah fungsi bijektif yang dapat dihitung?f:NNf

Chao Xu
sumber
Seseorang membuktikan kepada saya bahwa tidak mungkin membuat bahasa yang hanya menerima program terminasi. Karena pertanyaan Anda sangat mirip, saya kira tidak.
FUZxxl
1
Sepertinya tidak mungkin akan ada bahasa pemrograman seperti itu, saya kira Anda bisa mencoba untuk menegakkannya, tetapi kemudian Anda tidak akan dapat melakukan hal-hal sederhana seperti menyortir, setidaknya tidak tanpa itu menjadi sangat rumit dan menyakitkan.
Luke Mathies
@FUZxxl Ini tidak menangkap banyak program terminasi, Bahkan fungsi f (x) = 1 tidak mungkin diekspresikan dalam bahasa ini. Saya juga merasa bahwa fungsi semacam ini ditangkap oleh pemrograman fungsional total karena setiap fungsi adalah fungsi total.
Chao Xu
@ FuZxxl, saya pikir itu tidak benar, tetapi bahasa seperti itu harus dibatasi. Misalnya, bahasa yang setara dengan automata deterministik Hingga akan dijamin akan berakhir, tetapi akan sangat terbatas dalam hal apa yang dapat dihitungnya.
jmite
@ FuZxxl, detail pernyataan seperti itu penting. Sangat mudah untuk merancang bahasa pemrograman di mana setiap program berakhir. Merupakan hal yang berbeda untuk merancang bahasa yang dapat kita ungkapkan setiap fungsi yang dapat dihitung.
Vijay D

Jawaban:

9

Tidak ada bahasa seperti itu.

Namun, lihatlah Boomerang . Ini adalah bahasa untuk menulis bijections antar string. Saya tidak tahu seberapa luas kelas peta bisa diekspresikan di dalamnya, tapi saya yakin Anda bisa mengetahui jika Anda mencari sedikit.

NN

f0,f1,f2,

g:NNg(2k)g(2k+1)fk(2k)

  • fk(2k)=2kg(2k)=2k+1g(2k+1)=2k
  • fk(2k)2kg(2k)=2kg(2k+1)=2k+1

kNgfkg(2k)fk(2k)g

Andrej Bauer
sumber
2k2k+1g(k)=fk(k)+1
fk(k)+1
g
Pernyataan awal salah, ada banyak bahasa dalam literatur.
Nathaniel
Di sisi lain bukti Anda tampaknya sah. Mungkin saya bingung. Saya perlu membaca makalah Axelsen dan Glück (lihat jawaban saya) dengan cermat untuk mencari tahu apa yang terjadi di sini.
Nathaniel