只有图灵完整的语言才能解释的总语言


16

图灵不完整的任何语言都不能为其自身编写解释器。我不知道在哪里读到它,但是我已经看过很多次了。看来这引起了一种“最终的”非图灵完整的语言。该一个(或多个),可以只由图灵机解释。这些语言不一定能够计算从自然到自然的所有总函数,也不一定是同构的(即最终语言A和B存在,使得存在函数A可以计算但B无法计算的函数F)。Agda可以解释Godel的系统T,而Agda则是完整的,因此这种最终语言应严格比Godel的系统T更强大。在我看来,这种语言也至少会像agda一样强大(尽管我没有证据,只是预感)。

有没有做过这样的研究?已知什么结果(即已知这种“最终”语言)?

奖励:我担心存在一种病理情况,无法计算出功能,而Godel的System T仍然只能由Turing机器解释,因为它允许计算某些真正的奇数函数。是这种情况还是我们可以知道,这种语言将能够计算Godel的System T可以计算的任何内容?


2
由于您使用术语的方式,您的陈述令人困惑。代替依赖术语,尝试以数学上严格而清晰的方式陈述您的问题,以便我们能够理解您的问题。在可计算性理论的背景下,编程语言是什么意思?您是指可计算函数的枚举吗?
— 卡夫(Kaveh)2014年

1
我对所读内容的猜测是:如果一种语言足够强大并且包含另一类函数的通用函数,那么它可以为该类定义对角函数。如果它是总函数的​​类,则对角函数不能在该类中。
— 卡夫(Kaveh)2014年

我在非正式的地方找到了它。从字面上看,我沿用了这里的内容。我也不知道如何用数学的方式陈述这一点。经过一番阅读,我不确定“一类函数的对角函数”是什么。我认为以您的意思是“一类总功能不能包含其自己的通用功能”,所以我想问的是“如果C类中没有总功能, C的通用功能。如果我理解什么是“通用函数”,那我认为是正确的。
— 2014年

1
严格来说,这不是研究级别的问题。另外,为什么这是社区Wiki?还是?
— Andrej Bauer

“看来这引起了一种“终极的”非真实的完整语言;只能由图灵机解释的语言。” 不要遵循那个断言,这似乎是不合时宜的,这是什么意思,为什么看起来如此呢?
— vzn14年

Answers:


42

这是一个措辞不佳的问题,因此让我们首先理解一下。我将以可计算性理论的风格来做。因此,我将使用数字而不是字符串:一段源代码是数字,而不是符号字符串。它并不真正的问题,您可以替换用小号牛逼[R 我ñ 摹贯穿以下。Nstring

让是一个配对功能。⟨米,ñ⟩

让我们说,一个编程语言由以下给出的数据:大号=(P,Ëv)

  1. 一个可判定集的“合法程序”,和P⊆ñ
  2. 一个可计算和局部功能。Ëv:P×ñ→ñ

的事实,是可判定的装置有一个总可计算地图v 一个升我ð :Ñ → { 0 ,1 },使得v 一个升我ð (Ñ )= 1Pv一种升一世d:ñ→{0,1个}。非正式地,我们说的是可以判断给定的字符串是否是有效的代码。函数 e v本质上是我们语言的解释器: e v (m ,n )在输入 n上运行代码 m –结果可能不确定。v一种升一世d(ñ)=1个⟺ñ∈PËvËv(米,ñ)米ñ

现在我们可以介绍一些术语:

  1. 语言是总如果是所有总功能米∈ P。ñ↦Ëv(米,ñ)米∈P
  2. 甲语言解释语言大号2 = (P 2,ë v 2)如果存在Ü ∈ P 1,使得Ë v 1(Û ,⟨ Ñ ,米⟩ )≃ È v 2(ñ ,米)对于所有ñ ∈ P大号1个=(P1个,Ëv1个) 大号2=(P2,Ëv2)ü∈P1个Ëv1个(ü,⟨ñ,米⟩)≃Ëv2(ñ,米)ñ∈P和。这里ü是模拟器大号2中实现大号1。它也被称为通用程序为大号2。米∈ñü大号2大号1个大号2

“ 解释L 2 ”的其他定义是可能的,但让我现在不作介绍。大号1个大号2

我们说,和大号2是,如果他们解释相互等同。大号1个大号2

有“最强大的”语言图灵机的(你称之为“图灵机”),其中Ñ ∈ Ñ是图灵机和的编码φ (Ñ ,米)是部分可计算函数“ 在输入m上运行由n编码的图灵机”。显然,由于我们要求e v是可计算的,因此该语言可以干扰所有其他语言。Ť=(ñ,φ)ñ∈ñφ(ñ,米)ñ米Ëv

我们对编程语言的定义非常轻松。为了满足以下条件,让我们再要求三个条件:

  • 实现后继函数:有 š Ü Ç Ç ∈ P使得 Ë v (š ü Ç Ç ,米)= 米+ 1的所有米∈ Ñ,大号süCC∈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).
Ëv(ü,-)大号。存在 Ñ 0 ∈ P使得 Ë v (Ñ 0,ķ )≃ È v (Û ,⟨ ķ ,ķ ⟩ )+ 1,但随后 È v (Û ,⟨ Ñ 0,Ñ 0 ⟩ )≃ È v (ķ↦Ëv(ü,⟨ķ,ķ⟩)+1个ñ0∈Pev(n0,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)if b=0,ev(m0,m1)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


如果我选中了Wiki复选框,那是无意的。
— Andrej Bauer 2014年

2
语言是否还有其他功能使您无法分辨给定程序是否有效?
— 菲利达2014年

3
@DaniPhye:如果语言语法不可确定,那么您可以“隐藏”语法中的计算能力。例如,语言规则可能要求每个功能都配备一个位,以告诉该功能是否完整。然后is_total,我们可以实现,这在其他情况下是无法计算的,但不能实现评估(因为您还必须计算结果函数的位)。一般来说,如果您甚至无法实现解析器,那我就说这不是一种编程语言。
— Andrej Bauer

3
结果如何:“如果一种语言可以自我解释,那么它就不是全部”:F-omega的自解释器?
— 仙人掌


18

图灵不完整的任何语言都不能为其自身编写解释器。

这句话是不正确的。考虑一种编程语言,其中每个字符串的语义是“忽略您的输入并立即暂停”。这种编程语言不是图灵完整的,但是每个程序都是该语言的解释器。


啊! 这是一个好点。因此,对语言的计算必须有一定的要求。似乎必须对语言的功能做出一些最低要求,以使该陈述正确。似乎,如果我们要求它能够解决基本的算术问题,则它可能成立。
— 2014年

@Jake实际上,您也许可以摆脱一些难以置信的弱点,例如“语言定义了至少一个非常数函数”或“语言定义了多个函数”。对于“琐碎”的任何合理定义,我的反例显然都是琐碎的。
— David Richerby 2014年

对于我来说,这听起来像是一个有趣的问题。如果发现任何问题,我会回覆。
— 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.