To źle sformułowane pytanie, więc najpierw zrozummy to. Zamierzam to zrobić w stylu teorii obliczalności. Dlatego użyję liczb zamiast ciągów znaków: fragment kodu źródłowego jest liczbą, a nie ciągiem symboli. To tak naprawdę nie ma znaczenia, możesz zastąpić przez s t r i n g na dole.Nstring
Niech być funkcją parowania .⟨m,n⟩
Powiedzmy, że język programowania jest podany przez następujące dane:L=(P,ev)
- rozstrzygalne zestaw z „ważnych programów”, aP⊆N
- obliczeniowy i częściowo funkcją .ev:P×N→N
Fakt, że jest rozstrzygalne, oznacza, że istnieje całkowita mapa obliczalna v a l i d : N → { 0 , 1 }, tak że v a l i d ( n ) = 1P.v a l id: N → { 0 , 1 } . Nieformalnie mówimy, że można stwierdzić, czy dany ciąg jest poprawnym fragmentem kodu. Funkcja e v jest w zasadzie tłumaczem naszego języka: e v ( m , n ) uruchamia kod m na wejściu n - wynik może być niezdefiniowany.v a l i d( n ) = 1⟺n ∈ Pe ve v ( m , n )mn
Możemy teraz wprowadzić terminologię:
- Języka jest całkowita , gdy to całkowita funkcja wszystkich m ∈ P .n ↦ e v ( m , n )m ∈ P.
- Język interpretuje język L 2 = ( P 2 , e v 2 ) czy istnieje u ∈ P 1 w taki sposób, e v 1 ( U , ⟨ n , m ⟩ ) ≃ e v 2 ( n , m ) dla wszystkich n ∈ PL.1= ( P1, e v1) L.2)= ( P2), e v2))u ∈ P.1e v1( U , ⟨ n , m ⟩ ) ≃ e v2)(n,m)n∈Pi . Tutaj U jest symulator L 2 realizowanego w L 1 . Jest również znany jako program uniwersalny dla L 2 .m∈NuL2L1L2
Możliwe są inne definicje „ interpretuje L 2 ”, ale pozwólcie, że nie zajmę się tym teraz.L1L2
Mówimy, że i L 2 są równoważne, jeśli się interpretują.L1L2
Istnieje „najpotężniejszy” język maszyn Turinga (który nazywamy „maszyną Turinga”), w którym n ∈ N jest kodowaniem maszyny Turinga, a φ ( n , m ) to częściowa funkcja obliczeniowa, która „uruchamia kodowanie maszyny Turinga n na wejściu m ”. Ten język może interpretować wszystkie inne języki, oczywiście, ponieważ wymagaliśmy, aby e v była obliczalna.T=(N,φ)n∈Nφ(n,m)nmev
Nasza definicja języków programowania jest bardzo swobodna. Aby spełnić następujące warunki, wymagamy jeszcze trzech warunków:
- implementuje funkcję następczą: istnieje s u c c ∈ P takie, że e v ( s u c c , m ) = m + 1 dla wszystkich m ∈ N ,Lsucc∈Pev(succ,m)=m+1m∈N
- narzędzia funkcją przekątnej: jest d I a g ∈ P tak, że e v ( d i g , m ) = ⟨ m , m ⟩ wszystkie m ∈ N ,Ldiag∈Pev(diag,m)=⟨m,m⟩m ∈ N
- jest zamknięte w składzie funkcji: jeśli L implementuje f i g, to również implementuje f ∘ g ,L.L.fasolfa∘ g
Klasyczny wynik jest następujący:
Twierdzenie: jeśli język potrafi się interpretować, to nie jest całkowity.
Dowód. Załóżmy, jest uniwersalny program dla ogólnej biuletynie L realizowanego w L , to znaczy dla wszystkich m ∈ P i n ∈ N ,
e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
Ponieważ następca, przekątna i e v ( u , - ) są zaimplementowane w L , podobnie ich skład k ↦uL.L.m ∈ P.n ∈ N
e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
e v ( u , - )L. . Istnieje
n 0 ∈ P tak, że
e v ( n 0 , k ) ≃ e v ( u , ⟨ K , K ⟩ ) + 1 , a następnie
e v ( u , ⟨ N 0 , N 0 ⟩ ) ≃ e v (k↦ev(u,⟨k,k⟩)+1n0∈Pev(n0,k)≃ev(u,⟨k,k⟩)+1
Ponieważ nie ma liczbę równą własnego następcy wynika, że
L nie jest całkowite lub że
L nie interpretuje się. CO BYŁO DO OKAZANIA.
ev(u,⟨n0,n0⟩)≃ev(n0,n0)≃ev(u,⟨n0,n0⟩)+1
LL
Zauważ, że moglibyśmy zastąpić mapę następczą dowolną inną mapą pozbawioną punktów stałych.
Oto małe twierdzenie, które, jak sądzę, rozwiąże nieporozumienie.
Twierdzenie: każdy język całkowity może być interpretowany przez inny język całkowity.
Dowód. Niech będzie językiem całkowitym. Otrzymujemy całkowitą L ', która interpretuje L , przylegając do L jego oceniającego e v . Dokładniej, niech P ' = { ⟨ 0 , n ⟩ | n ∈ P } ∪ { ⟨ 1 , 0 ⟩ } i określenie e v ' a
e v ' ( ⟨ b , n ⟩ , mLL′LLevP′={⟨0,n⟩∣n∈P}∪{⟨1,0⟩}ev′
Oczywiście, L " oznacza całkowitą ponieważ L jest całkowite. Aby zobaczyć, że L ' może symulować L prostu wziąć 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 , Gdyż wtedy
e v ' ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) , zgodnie z wymaganiami. CO BYŁO DO OKAZANIA.
u=⟨1,0⟩ev′(u,⟨m,n⟩)≃ev(m,n)
Ćwiczenia: [dodano 27.06.2014] Język zbudowane powyżej nie jest zamknięta na podstawie kompozycji. Napraw dowód twierdzenia, aby L ' spełniał dodatkowe wymagania, jeśli L tak.L′L′L
Innymi słowy, nigdy nie potrzebujesz pełnej mocy maszyn Turinga do interpretacji całkowitego języka - wystarczy nieco mocniejszy całkowity język L ' . Język L ' jest ściśle potężniejszy niż L, ponieważ interpretuje L , ale L nie interpretuje siebie.LL′L′LLL