这是一个措辞不佳的问题,因此让我们首先理解一下。我将以可计算性理论的风格来做。因此,我将使用数字而不是字符串:一段源代码是数字,而不是符号字符串。它并不真正的问题,您可以替换用小号牛逼[R 我ñ 摹贯穿以下。Nstring
让是一个配对功能。⟨m,n⟩
让我们说,一个编程语言由以下给出的数据:L=(P,ev)
- 一个可判定集的“合法程序”,和P⊆N
- 一个可计算和局部功能。ev:P×N→N
的事实,是可判定的装置有一个总可计算地图v 一个升我ð :Ñ → { 0 ,1 },使得v 一个升我ð (Ñ )= 1Pvalid:N→{0,1}。非正式地,我们说的是可以判断给定的字符串是否是有效的代码。函数 e v本质上是我们语言的解释器: e v (m ,n )在输入 n上运行代码 m –结果可能不确定。valid(n)=1⟺n∈Pevev(m,n)mn
现在我们可以介绍一些术语:
- 语言是总如果是所有总功能米∈ P。n↦ev(m,n)m∈P
- 甲语言解释语言大号2 = (P 2,ë v 2)如果存在Ü ∈ P 1,使得Ë v 1(Û ,⟨ Ñ ,米⟩ )≃ È v 2(ñ ,米)对于所有ñ ∈ P大号1个= (P1个,è v1个) 大号2= (P2,è v2)ü ∈ P1个Ë v1个(Û ,⟨ Ñ ,米⟩ )≃ È v2(n ,m )Ñ ∈ P和。这里ü是模拟器大号2中实现大号1。它也被称为通用程序为大号2。米∈ Ñü大号2大号1个大号2
“ 解释L 2 ”的其他定义是可能的,但让我现在不作介绍。大号1个大号2
我们说,和大号2是,如果他们解释相互等同。大号1个大号2
有“最强大的”语言图灵机的(你称之为“图灵机”),其中Ñ ∈ Ñ是图灵机和的编码φ (Ñ ,米)是部分可计算函数“ 在输入m上运行由n编码的图灵机”。显然,由于我们要求e v是可计算的,因此该语言可以干扰所有其他语言。Ť= (N,φ )Ñ ∈ Ñφ(n,m)nmev
我们对编程语言的定义非常轻松。为了满足以下条件,让我们再要求三个条件:
- 实现后继函数:有 š Ü Ç Ç ∈ P使得 Ë v (š ü Ç Ç ,米)= 米+ 1的所有米∈ Ñ,Lsucc∈Pev(succ,m)=m+1m∈N
- 实现了对角线函数:有 ð 我一克∈ P使得 Ë v (d 我一克,米)= ⟨ 米,米⟩所有米∈ Ñ,Ldiag∈Pev(diag,m)=⟨m,m⟩m∈N
- 下的功能组成关闭:如果大号器具 ˚F和克然后它还实现 ˚F ∘ 克,LLfgf∘g
一个经典的结果是:
定理: 如果一种语言能够自我解释,那么它就不是全部。
证明。假设为总的langauge通用程序大号中实现大号,即,对于所有米∈ P和Ñ ∈ Ñ,
È v (Û ,⟨ 米,Ñ ⟩ )≃ È v (米,Ñ )。
作为后继,对角线,和ë v (Û ,- )以实现大号,所以是它们的组成ķ ↦uLLm∈Pn∈N
ev(u,⟨m,n⟩)≃ev(m,n).
e v (u ,−)大号。存在
Ñ 0 ∈ P使得
Ë v (Ñ 0,ķ )≃ È v (Û ,⟨ ķ ,ķ ⟩ )+ 1,但随后
È v (Û ,⟨ Ñ 0,Ñ 0 ⟩ )≃ È v (ķ ↦ ë v (Û ,⟨ ķ ,ķ ⟩ )+ 1ñ0∈ PË v (ñ0,k)≃ev(u,⟨k,k⟩)+1
由于没有数等于其自身的后继者,它遵循
大号不是总或
大号不解释本身。QED。
ev(u,⟨n0,n0⟩)≃ev(n0,n0)≃ev(u,⟨n0,n0⟩)+1
LL
观察到我们可以用任何其他无定位点的映射替换后继映射。
这是一个小定理,我认为这将消除误解。
定理: 每种总语言都可以用另一种总语言解释。
证明。令为总语言。我们一共拿到了大号“其解释大号由毗邻大号其评估è v。更精确地,让P ' = { ⟨ 0 ,Ñ ⟩ | Ñ ∈ P } ∪ { ⟨ 1 ,0 ⟩ }并且定义ë v '为
ë v '(⟨ b ,Ñ ⟩ ,米LL′LLevP′={⟨0,n⟩∣n∈P}∪{⟨1,0⟩}ev′
显然,大号'是总因为大号是总。要看到,大号'可以模拟大号只是采取 ü = ⟨ 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,从此以后
È v '(Û ,⟨ 米,Ñ ⟩ )≃ È v (米,Ñ ),根据需要。QED。
u=⟨1,0⟩ev′(u,⟨m,n⟩)≃ev(m,n)
练习: [2014年6月27日新增] 上面构造的语言构成上并未封闭。修复定理的证明,这样大号'满足额外的要求,如果大号做。L′L′L
换句话说,您永远不需要图灵机的全部功能来解释总语言 –稍微强大一点的总语言L '就足够了。语言L '的语言严格来说比L更强大,因为它可以解释L,但是L不会自我解释。LL′L′LLL