Bu kötü bir şekilde ifade edilmiş bir soru, bu yüzden önce anlayalım. Bunu hesaplanabilirlik teorisi tarzında yapacağım. Bu yüzden dizeler yerine sayılar kullanacağım: kaynak kodun bir parçası bir sembol dizesi yerine bir sayıdır. Gerçekten önemli değil, s t r i n ile değiştirebilirsiniz.N altında boyunca.string
Let ⟨m,n⟩ bir olmak eşleştirme işlevi .
Diyelim ki bir programlama dili L=(P,ev) aşağıdaki verilerle verilmiştir:
- "geçerli programlar" için kararlaştırılabilir bir kümesi veP⊆N
- Bir hesaplanabilir ve kısmi fonksiyon .ev:P×N→N
karar verilebilir olması, v a l i d : N → { 0 , 1 } toplamı hesaplanabilir bir harita olduğu anlamına gelir , böylece v a l i d ( n ) = 1Pvalid:N→{0,1} . Gayri resmi olarak, belirli bir dizenin geçerli bir kod parçası olup olmadığını anlamanın mümkün olduğunu söylüyoruz. Fonksiyon e v essentialy dilimizi için bir tercüman geçerli: e v ( m , n ) kodu çalıştırır m girişine n - sonuç tarif edilemeyebilir.valid(n)=1⟺n∈Pevev(m,n)mn
Şimdi bazı terminolojiler sunabiliriz:
- Bir dil toplam ise her bir toplam fonksiyonudur m ∈ P .n↦ev(m,n)m∈P
- Bir dil yorumlayan ve dil L 2 = ( p 2 , e v 2 ) ortaya çıkması durumunda, u ∈ p 1 , öyle ki , e v 1 ( u , ⟨ n , m, ⟩ ) ≃ e v Tüm n için 2 ( n , m )L1=(P1,ev1) L2=(P2,ev2)u∈P1ev1(u,⟨n,m⟩)≃ev2(n,m)n∈Pve . Burada u için simülatörü L 2 uygulanan L 1 . Ayrıca olarak bilinir evrensel programı için L 2 .m∈NuL2L1L2
" L 2'yi yorumlar " ın başka tanımları da mümkündür, ama şimdi buna girmeme izin verin.L1L2
Biz söylemek ve L 2 birbirlerini yorumlamak eğer eşdeğerdir.L1L2
"En güçlü" dil var içinde (eğer "Turing makinesi" olarak bakınız) Turing makineleri n ∈ N Turing makinesi ve bir kodlama cp ( n , m ) olduğu "Turing makinesini m girişinde n ilekodlanmış olarak çalıştıran" kısmi hesaplanabilir fonksiyon. Bu dil biz gerekli Açıkçası bu yana, tüm diğer dilleri yorumlamak olabilir , e v hesaplanabilir olması.T=(N,φ)n∈Nφ(n,m)nmev
Programlama dilleri tanımımız çok rahat. Aşağıdakilerin geçmesi için üç koşul daha gerektirelim:
- ardıl işlevi uygular: s uL , öyle ki , e v ( s u c c , m ) = m + 1 için tüm m ∈ N ,succ∈Pev(succ,m)=m+1m∈N
- diyagonal işlevi uygular: d i a g ∈L , öyle ki , e v ( d ı bir g , m ) = ⟨ m , m ⟩ tüm m ∈ N ,diag∈Pev(diag,m)=⟨m,m⟩m∈N
- bileşke fonksiyonun altında kapatılır: eğer L uygulayan f ve g o zamanda söz konusu ön ∘ g ,LLfgf∘g
Klasik bir sonuç şudur:
Teorem: Bir dil kendini yorumlayabilirse, o zaman tam değildir.
Kanıt. Diyelim ki toplam dildeki için evrensel bir programdır L uygulanan L tüm, örneğin, m ∈ p ve n ∈ N ,
e v ( u , ⟨ m , n, ⟩ ) ≃ e v ( m , n ) .
Halefi diyagonal ve de e v ( u , - ) uygulanan L böylece kendi bileşimdir, k ↦uLLm∈Pn∈N
ev(u,⟨m,n⟩)≃ev(m,n).
ev(u,−)L v ( . Orada var olan
n, 0 ∈ P , öyle ki
, e v ( n 0 , k ) ≃ e v ( u , ⟨ k , k ⟩ ) + 1 , ancak daha sonra
e V ( u , ⟨ n 0 , n, 0 ⟩ ) ≃ E n 0 , nk↦ev(u,⟨k,k⟩)+1n0∈Pev(n0,k)≃ev(u,⟨k,k⟩)+1
bir sayı kendi ardıl eşit olduğu gibi, şu
L toplam ya da değil,
Lev(u,⟨n0,n0⟩)≃ev(n0,n0)≃ev(u,⟨n0,n0⟩)+1
LL kendisi üzerinde yorumda bulunmamaktadır. QED.
Ardıl haritayı başka bir düzeltme noktası içermeyen harita ile değiştirebileceğimizi gözlemleyin.
İşte bir yanlış anlaşılmayı temizleyeceğini düşündüğüm küçük bir teorem.
Teorem: Her toplam dil, başka bir toplam dil tarafından yorumlanabilir.
Kanıt. Let toplam dili. Biz toplam almak L ' hangi yorumlayıp L ile bitişik tarafından L onun değerlendirici e v . Daha açık olarak, izin P ' = { ⟨ 0 , n ⟩ | n ∈ P } ∪ { ⟨ 1 , 0 ⟩ } tanımlamak ve e v ' olarak
e v ' ( ⟨ b , n ⟩ , mLL′LLevP′={⟨0,n⟩∣n∈P}∪{⟨1,0⟩}ev′
Açıkçası, L ' için toplam bir L toplamıdır. Görmek için L ' taklit edebilir L sadece almak u = ⟨ 1 , 0
ev′(⟨b,n⟩,m)={ev(n,m)ev(m0,m1)if b=0,if b=1 and m=⟨m0,m1⟩
L′LL′L , O zamandan bu yana
, e v ' ( u , ⟨ m , n, ⟩ ) ≃ e v ( m , n ) , gerektiği gibi. QED.
u=⟨1,0⟩ev′(u,⟨m,n⟩)≃ev(m,n)
Egzersiz: [2014/06/27 eklenmiştir] dil , yukarıda yapılan bileşim altında kapalı değildir. Böylece teoremin kanıtını Fix L ' eğer tatmin ekstra gereksinimleri L yapar.L′L′L
LL′L′LLL