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


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. 一个可计算局部功能ËvP×ññ

的事实,是可判定的装置有一个总可计算地图v 一个ð Ñ{ 0 1 },使得v 一个ð Ñ = 1Pv一种一世dñ{01个}。非正式地,我们说的是可以判断给定的字符串是否是有效的代码。函数 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üCCPev(succ,m)=m+1mN
  • 实现了对角线函数:有 ð P使得 Ë v d = 所有ÑLdiagPev(diag,m)=m,mmN
  • 下的功能组成关闭:如果大号器具 ˚F然后它还实现 ˚F LLfgfg

一个经典的结果是:

定理: 如果一种语言能够自我解释,那么它就不是全部。

证明。假设为总的langauge通用程序大号中实现大号,即,对于所有PÑ ÑÈ v Û Ñ È v Ñ 作为后继,对角线,和ë v Û - 以实现大号,所以是它们的组成ķ uLLmPnN

ev(u,m,n)ev(m,n).
Ëvü-大号。存在 Ñ 0P使得 Ë v Ñ 0ķ È v Û ķ ķ + 1,但随后 È v Û Ñ 0Ñ 0È v ķËvüķķ+1个ñ0Pev(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 Ñ LLLLevP={0,nnP}{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
LLLL,从此以后 È v 'Û Ñ È v Ñ ,根据需要。QED。u=1,0ev(u,m,n)ev(m,n)

练习: [2014年6月27日新增] 上面构造的语言构成上并未封闭。修复定理的证明,这样大号'满足额外的要求,如果大号做。LLL

换句话说,您永远不需要图灵机的全部功能来解释总语言 –稍微强大一点的总语言L '就足够了。语言L '的语言严格来说比L更强大,因为它可以解释L,但是L不会自我解释。LLLLLL


如果我选中了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.