哥德尔、埃舍尔、巴赫印刷数论 (TNT) 谜题和解决方案
Posted
技术标签:
【中文标题】哥德尔、埃舍尔、巴赫印刷数论 (TNT) 谜题和解决方案【英文标题】:Godel, Escher, Bach Typographical Number Theory (TNT) puzzles and solutions 【发布时间】:2010-10-13 06:35:10 【问题描述】:在 Douglas Hofstader 的 Godel, Escher, Bach 的第 8 章中,读者面临着将这两个陈述翻译成 TNT 的挑战:
"b 是 2 的幂"
和
"b 是 10 的幂"
以下答案正确吗?:
(假设'∃'表示'存在一个数字'):
∃x:(x.x = b)
即"存在一个数 'x' 使得 x 乘以 x 等于 b"
如果正确,那么下一个同样微不足道:
∃x:(x.x.x.x.x.x.x.x.x.x = b)
我很困惑,因为作者指出它们很棘手,第二个需要几个小时才能解决;我一定错过了这里明显的东西,但我看不到!
【问题讨论】:
+1 表示趣味性,& 因为我没有意识到 html 中有一个现成的“存在”实体。这里有一个完整的列表:tlt.its.psu.edu/suggestions/international/bylanguage/… 【参考方案1】:您的表达式分别相当于“b 是平方数”和“b 是数字的 10 次方”这两个语句。将“power of”语句转换为 TNT 相当棘手。
【讨论】:
啊。恐怕我不知道“b 是平方数”和“b 是 2 的幂”之间的区别!我以为他们是一样的!你能解释一下吗?谢谢! 平方数是1、4、9、16、25、36、49、64、81、100等。2的幂是1、2、4、8、16、32 , 64, 128, 256 等 平方数是 x^2,2 的幂是 2^x。【参考方案2】:怎么样:
∀x: ∀y: (SSx∙y = b → ∃z: z∙SS0 = SSx)
(英文:b 的任何大于 2 的因数本身必须能被 2 整除;字面意思是:对于所有自然数 x 和 y,如果 (2+x) * y = b 那么这意味着有一个自然数z 使得 z * 2 = (2+x)。)
我不能 100% 确定 TNT 和 propositional calculus 的语法是否允许这样做,我已经有一段时间没有仔细阅读 GEB 了。
(编辑:至少对于 b = 2n 问题;我明白为什么 10n 会更困难,因为 10 不是素数。但是 11n 除了用“SSSSSSSSSS0”替换一个术语“SS0”之外,其他都是一样的。)
【讨论】:
【参考方案3】:一般来说,我会说“b 是 2 的幂”等价于“b 的除 1 之外的所有除数都是 2 的倍数”。那就是:
∀x((∃y(y*x=b & ¬(x=S0))) → ∃z(SS0*z=x))
编辑:这对 10 不起作用(感谢 cmets)。但至少它适用于所有素数。对不起。我认为你毕竟必须使用某种编码序列。如果您想要对此进行详细且更通用的方法,我建议您使用 Raymond Smullyan 的“哥德尔不完备定理”。
或者您可以使用中国剩余定理对数字序列进行编码,然后对递归定义进行编码,这样您就可以定义指数。事实上,这基本上就是证明 Peano Arithmetic 是图灵完备的方法。
试试这个:
D(x,y)=∃a(a*x=y)
Prime(x)=¬x=1&∀yD(y,x)→y=x|y=1
a=b mod c = ∃k a=c*k+b
然后
∃y ∃k(
∀x(D(x,y)&Prime(x)→¬D(x*x,y)) &
∀x(D(x,y)&Prime(x)&∀z(Prime(z)&z<x→¬D(z,y))→(k=1 mod x)) &
∀x∀z(D(x,y)&Prime(x)&D(z,y)&Prime(z)&z<x&∀t(z<t<x→¬(Prime(t)&D(t,y)))→
∀a<x ∀c<z ((k=a mod x)&(k=c mod z)-> a=c*10))&
∀x(D(x,y)&Prime(x)&∀z(Prime(z)&z>x→¬D(z,y))→(b<x & (k=b mod x))))
应该说“b是10的幂”,实际上是说“有一个数字y和一个数字k,使得y是不同素数的乘积,并且通过这些素数由k编码的序列以1开头,具有属性a的后面的元素c是10*a,以b结尾"
【讨论】:
这不适用于 10; 10 次方的一些除数不是 10 的倍数。(例如 2、4、8、16 等,以及 5、25、125 等) 谢谢,我已经更正了我的帖子,希望现在是正确的。 我认为您需要检查 x & y 是否也不为零,否则 b=0 是正确的。我建议 ∀x:【参考方案4】:我认为上面的大部分内容只表明 b 必须是 4 的倍数。这个怎么样:∃b:∀c: → c = 2>
我不认为格式是完美的,但它写道:
存在b,使得对于所有c,如果c是b的因数且c是素数,则c等于2。
【讨论】:
【参考方案5】:在持怀疑态度的科学家的帖子here 中,扰流板按钮背后的“b 是 10 的幂”问题有一个解决方案。它依赖于数论中的中国余数定理,以及任意长的素数等差数列的存在。正如 Hofstadter 指出的那样,即使您知道适当的定理,也不容易提出。
【讨论】:
【参考方案6】:这就是我对“b 是 2 的幂”这个陈述的看法
∃b: ∀a: ~∃c: ((a * ss0) + sss0) * c = b
我认为这是说“存在一个数字 b,因此对于所有数字 a,不存在一个数字 c 使得 (a * 2) + 3(换句话说,大于 2 的奇数)相乘由 c,给你 b。”那么,如果 b 存在,并且不能为零,并且它没有大于 2 的奇数除数,那么 b 不一定是 1、2 或 2 的另一个幂?
【讨论】:
"如果 b ... 不能为零"。你怎么在这里陈述这个? TNT 变量可以包含任何自然数值,包括零。他在本章中使用的技巧是Sb
,意思是“任何数字的后继者”或“一个或更大”,自然不能计算为零。【参考方案7】:
这是我想出的:
∀c:∃d:>
翻译为:
对于所有数 c,存在一个数 d,如果 c 乘 d 等于 b,则 c 为 1,或者存在一个数 e,使得 d 等于 e 乘以 2。
或者
对于所有数 c,存在一个数 d,这样如果 b 是 c 的因数而 d 则 c 是 1 或 d 是 2 的因数
或者
如果两个数的乘积是 b,那么其中一个是 1,或者其中一个可以被 2 整除
或者
b 的所有除数要么是 1,要么能被 2 整除
或者
b 是 2 的幂
【讨论】:
反例:假设b = 2。那么假设成立的c必须是1或2。前者可以,但对于后者,d = 1。在这种情况下,c ≠ 1 和 d ≠ e * 2,因此暗示并不适用于所有 c。这是真的还是我错过了什么?【参考方案8】:对于表示 b 是 2 的幂的开放表达式,我有 ∀a:~∃c:(S(Sa ∙ SS0) ∙ Sc) = b
这实际上说明对于所有 a,S(Sa ∙ SS0) 不是 b 的因数。但在正常情况下,S(Sa ∙ SS0) 是1 + ((a + 1) * 2)
或3 + 2a
。我们现在可以将语句改写为“没有至少为 3 的奇数是 b 的因数”。当且仅当 b 是 2 的幂时,这是正确的。
我仍在研究 b 是 10 的幂的问题。
【讨论】:
【参考方案9】:在表达“b 是 10 的幂”时,您实际上不需要中国剩余定理和/或有限序列的编码。您也可以按以下方式工作(我们使用常用符号 |、>、c-d 作为具有明显含义的公式/术语的快捷方式):
对于素数 p,让我们用 EXP(p,a) 表示 TNT 中的某个公式,即“p 是素数,a 是 p 的幂”。我们已经知道,如何构建一个。 (出于技术原因,我们不认为 S0 是 p 的幂,所以 ~EXP(p,S0)。)
如果 p 是素数,我们定义 EXPp(c,a) ≖
我们可以表述“b 是 10 的幂”的公式(为了更好的可读性,我们省略了符号 ,我们用 2 和 5 代替 SS0 和 SSSSS0): ∃a:∃c:∃d: (EXP(2,a) ∧ EXP(5,c) ∧ EXP(5,d) ∧ d > b ∧ a⋅c=b ∧ ∀e:(e>5 ∧ e |c ∧ EXP5(e,c) → ~EXP5(e,d)) ∧ ∀e:("e 是最小的,使得 EXP 5(c,e) ∧ EXP5(d,e)" → (d-2)|(ea)))。
解释:我们写b = a⋅c = 2x⋅5y (x,y>0) 并选择d= 5z>b 使得 z 和 y 互质(例如 z 可能是质数)。那么“最小的 e...”等于 (5z)y = dy ≡ 2y (mod d-2) 和 (d-2)|(ea) 意味着 a = 2x = e mod (d-2) = 2y(我们也有 'd-2 > 2y' 和 'd-2 > a'),所以 x = y。
备注:这种方法可以很容易地适应定义“b 是 n 的幂”对于任何数字 n 具有固定分解 a1a2 ...ak,其中每个 ai 是素数 pi 和 pi = pj → i=j.
【讨论】:
【参考方案10】:我对 b 的解决方案是 2 的幂是: ∀x: ∃y x.y=b ( isprime(x) => x = SS0 )
isprime() 应该不难写。
【讨论】:
以上是关于哥德尔、埃舍尔、巴赫印刷数论 (TNT) 谜题和解决方案的主要内容,如果未能解决你的问题,请参考以下文章