Đây là một câu hỏi không đúng, vì vậy trước tiên hãy hiểu ý nghĩa của nó. Tôi sẽ làm điều đó theo phong cách của lý thuyết tính toán. Do đó tôi sẽ sử dụng các số thay vì các chuỗi: một đoạn mã nguồn là một số, thay vì một chuỗi các ký hiệu. Nó không thực sự quan trọng, bạn có thể thay thế bằng s t r i n g trong suốt bên dưới.Nstring
Hãy là một chức năng cặp .⟨m,n⟩
Hãy để chúng tôi nói rằng một ngôn ngữ lập trình được cung cấp bởi dữ liệu sau:L=(P,ev)
- một tập hợp có thể quyết định của "chương trình hợp lệ" vàP⊆N
- một tính toán và một phần chức năng .ev:P×N→N
Thực tế là có thể quyết định có nghĩa là có tổng bản đồ tính toán v a l i d : N → { 0 , 1 } sao cho v a l i d ( n ) = 1Pvalid:N→{0,1} . Một cách không chính thức, chúng tôi đang nói rằng có thể cho biết một chuỗi đã cho có phải là một đoạn mã hợp lệ hay không. Hàm e v rất cần thiết cho trình thông dịch cho ngôn ngữ của chúng tôi: e v ( m , n )valid(n)=1⟺n∈Pevev(m,n) chạy mã trên đầu vào n - kết quả có thể không được xác định.mn
Bây giờ chúng tôi có thể giới thiệu một số thuật ngữ:
- Một ngôn ngữ là tổng nếu n↦ev(m,n) là một chức năng toàn diện cho tất cả .m∈P
- Một ngôn ngữ diễn giải ngôn ngữ L 2 = ( P 2 , e v 2 ) nếu có tồn tại u ∈ P 1 mà e v 1 ( u , ⟨ n , m ⟩ ) ≃ e v 2 ( n , m và m ∈ N. Ở đâyL1=(P1,ev1) L2=(P2,ev2)u∈P1 với mọi n ∈ Pev1(u,⟨n,m⟩)≃ev2(n,m)n∈Pm∈N là trình giả lập cho L 2 được thực hiện trong L 1 . Nó còn được gọi làchương trình phổ quátcho L 2 .uL2L1L2
Các định nghĩa khác về " phiên dịch L 2 " là có thể, nhưng hãy để tôi không đi sâu vào vấn đề này ngay bây giờ.L1L2
Chúng ta nói rằng và L 2 là tương đương nếu chúng giải thích lẫn nhau.L1L2
Có là "mạnh nhất" ngôn ngữ của máy Turing (mà bạn gọi là "một máy Turing") trong đó n ∈ N là một mã hóa của một máy Turing và φ ( n , m ) là chức năng tính toán một phần "chạy máy Turing được mã hóa bởi n trên đầu vào m ". Ngôn ngữ này có thể can thiệp vào tất cả các ngôn ngữ khác, rõ ràng vì chúng tôi yêu cầu e v phải có thể tính toán được.T=(N,φ)n∈Nφ(n,m)nmev
Định nghĩa của chúng tôi về ngôn ngữ lập trình là rất thoải mái. Để thực hiện những điều sau đây, chúng ta hãy yêu cầu thêm ba điều kiện:
- thực hiện chức năng kế tiếp: có s u c c ∈ P sao cho e v ( s u c c , m ) = m + 1 với mọi m ∈ N ,Lsucc∈Pev(succ,m)=m+1m∈N
- cụ chức năng chéo: có được d i một g ∈ P mà e v ( d i một g , m ) = ⟨ m , m ⟩ cho tất cả m ∈ N ,Ldiag∈Pev(diag,m)=⟨m,m⟩m∈N
- được đóng dưới thành phần của các hàm: nếu L thực hiện f và g thì nó cũng thực hiện f ∘ g ,LLfgf∘g
Một kết quả kinh điển là thế này:
Định lý: Nếu một ngôn ngữ có thể tự giải thích thì nó không phải là toàn bộ.
Bằng chứng. Giả sử là chương trình phổ thông với tổng langauge L thực hiện trong L , tức là, cho tất cả m ∈ P và n ∈ N ,
e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
Như kế, đường chéo, và e v ( u , - ) được thực hiện trong L , như vậy là thành phần của họ k ↦uLLm∈Pn∈N
ev(u,⟨m,n⟩)≃ev(m,n).
ev(u,−)L . Có tồn tại
n 0 ∈ P mà
e v ( n 0 , k ) ≃ e v ( u , ⟨ k , k ⟩ ) + 1 , nhưng sau đó
e v ( u , ⟨ n 0 , n 0 ⟩ ) n 0 , n 0 ) ≃ e vk↦ev(u,⟨k,k⟩)+1n0∈Pev(n0,k)≃ev(u,⟨k,k⟩)+1
Vì không có số bằng kế riêng của mình, nó sau đó
L là không toàn bộ hoặc rằng
L không giải thích riêng của mình. QED.
ev(u,⟨n0,n0⟩)≃ev(n0,n0)≃ev(u,⟨n0,n0⟩)+1
LL
Quan sát rằng chúng ta có thể thay thế bản đồ kế vị bằng bất kỳ bản đồ không có điểm cố định nào khác.
Đây là một định lý nhỏ mà tôi nghĩ sẽ xóa sạch một sự hiểu lầm.
Định lý: Mọi ngôn ngữ có thể được diễn giải bằng tổng ngôn ngữ khác.
LL′LLevP′={⟨0,n⟩∣n∈P}∪{⟨1,0⟩}ev′
ev′(⟨b,n⟩,m)={ev(n,m)ev(m0,m1)if b=0,if b=1 and m=⟨m0,m1⟩
L′LL′Lu=⟨1,0⟩, since then
ev′(u,⟨m,n⟩)≃ev(m,n), as required. QED.
Exercise: [added 2014-06-27] The language L′ constructed above is not closed under composition. Fix the proof of the theorem so that L′ satisfies the extra requirements if L does.
In other words, you never need the full power of Turing machines to interpret a total language L – a slightly more powerful total language L′ suffices. The language L′ is strictly more powerful than L because it interprets L, but L does not interpret itself.