繁体   English   中英

证明 function 在给定语言中的不可表达性

[英]Proving the inexpressibility of a function in a given language

我目前正在阅读 John C。 米切尔的编程语言基础 练习 2.2.3 本质上要求读者证明(自然数)幂 function 不能通过小语言的表达式隐式定义。 该语言由自然数和所述数字的加法组成(以及 boolean 值、自然数相等谓词和三元条件)。 没有循环、递归构造或定点组合器。 这是精确的语法:

<bool_exp> ::= <bool_var> | true | false | Eq? <nat_exp> <nat_exp> |
               if <bool_exp> then <bool_exp> else <bool_exp>
<nat_exp>  ::= <nat_var> | 0 | 1 | 2 | … | <nat_exp> + <nat_exp> |
               if <bool_exp> then <nat_exp> else <nat_exp>

同样,object 是为了表明幂 function n^m 不能通过该语言的表达式隐式定义。

直觉上,我愿意接受这一点。 如果我们将求幂视为重复乘法,似乎我们“就是不能”用这种语言表达它。 但是如何正式证明这一点呢? 更广泛地说,你如何证明一种语言的表达不能用另一种语言表达?

这是一种简单的思考方式:表达式具有固定的有限大小,并且它可以执行的唯一算术运算来生成不写为文字或作为变量值提供的数字是加法。 因此,它可能产生的最大数受限于加法数加 1 乘以表达式中涉及的最大数。

因此,给定一个提议的表达式,让 k 是其中的加法数,让 c 是最大的文字(如果没有,则为 1)并选择 m 和 n 使得 n^m > (k+1)*max( m,n,c)。 那么该输入的表达式的结果不可能是正确的。

请注意,此证明依赖于允许任意大数字的语言,如另一个答案中所述。

没有解决方案,只有提示:

首先,让我指出,如果语言中有有限多个数字,那么取幂可以定义为表达式。 (你必须定义当真实结果无法表示时它应该产生什么,例如环绕。)想想为什么。

提示:假设只有两个数字,0 和 1。你能写出一个包含mn且结果为n^m的表达式吗? 如果有三个数字:0、1 和 2 会怎样? 如果有四个呢? 等等...

为什么这些解决方案都不起作用? 让我们对它们进行索引并调用 {0,1} partial_solution_1的解决方案,{0,1,2} partial_solution_2的解决方案,等等。 为什么partial_solution_n不是所有自然数集合的解?

也许你可以用某种度量f: Expression -> Nat以某种方式概括这一点,这样f(expr) < n的每个表达式expr在某种程度上都是错误的......

你可能会从欧几里得证明有无限多个素数的策略中找到一些灵感。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM