Logic 戈德尔,埃舍尔,巴赫印刷数字理论(TNT)的难题和解决方案
在道格拉斯·霍夫斯塔德的《戈德尔、埃舍尔、巴赫》第8章中,读者面临着将这两种说法翻译成TNT的挑战: “b是2的幂” 及 “b是10的幂” 以下答案正确吗 (假设'∃' 表示“存在一个数字”): ∃x:(x.x=b) i、 e.“存在一个数字‘x’,使得x乘以x等于b” 如果这是正确的,那么下一个问题同样微不足道: ∃x:(x.x.x.x.x.x.x.x.x.x=b)Logic 戈德尔,埃舍尔,巴赫印刷数字理论(TNT)的难题和解决方案,logic,numbers,puzzle,Logic,Numbers,Puzzle,在道格拉斯·霍夫斯塔德的《戈德尔、埃舍尔、巴赫》第8章中,读者面临着将这两种说法翻译成TNT的挑战: “b是2的幂” 及 “b是10的幂” 以下答案正确吗 (假设'∃' 表示“存在一个数字”): ∃x:(x.x=b) i、 e.“存在一个数字‘x’,使得x乘以x等于b” 如果这是正确的,那么下一个问题同样微不足道: ∃x:(x.x.x.x.x.x.x.x.x.x=b) 我很困惑,因为作者指出这些问题很棘手,第二个问题需要几个小时才能解决;我肯定错过了一些明显的东西,但我看不到 您的表达式分别相当
我很困惑,因为作者指出这些问题很棘手,第二个问题需要几个小时才能解决;我肯定错过了一些明显的东西,但我看不到 您的表达式分别相当于“b是一个平方数”和“b是一个数的10次方”的语句。将“力量”语句转换为TNT要复杂得多。如何: ∀x:∀y:(SSx)∙y=b→ ∃z:z∙SS0=SSx) (英文:b的任何因子,即≥ 2本身必须能被2整除;字面意思:对于所有自然数x和y,如果(2+x)*y=b,那么这意味着存在一个自然数z,使得z*2=(2+x)。) 我不是100%确定这在和的语法中是允许的,我已经有一段时间没有阅读GEB了 (编辑:至少对于b=2n的问题;我可以理解为什么10n会更难,因为10不是素数。但是11n是一样的,除了用“SS0”替换一个术语“SS0”。一般来说,我会说“b是2的幂”等于“b的除1之外的所有除数都是2的倍数”。即: ∀x((∃y(y*x=b和(x=S0)))→ ∃z(SS0*z=x)) 编辑:这在10分钟内不起作用(谢谢你的评论)。但至少它适用于所有素数。很抱歉我认为你必须使用某种编码序列。我建议雷蒙德·斯穆利安(Raymond Smullyan)的《哥德尔不完全定理》(Gödel's Incomplentity Thermories),如果你想要更详细、更一般的方法来解决这个问题的话 或者,您可以使用中国剩余定理对数字序列进行编码,然后对递归定义进行编码,这样您就可以定义幂运算。事实上,这基本上就是证明Peano算法是图灵完备的方法 试试这个:
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)&素数(x)→-D(x*x,y))&
∀x(D(x,y)&素数(x)&∀z(Prime(z)&z我认为上面的大部分只表明b必须是4的倍数。这个呢:∃b:∀c:
我认为格式并不完美,但它的内容如下:
存在b,因此对于所有c,如果c是b的因子,c是素数,那么c等于2。对于“b是10的幂”有一个解决方案《怀疑论科学家》帖子中扰流板按钮背后的问题。这取决于数论中的中国剩余定理,以及任意长素数算术序列的存在。正如霍夫斯塔特所指出的,即使你知道适当的定理,也不容易想出这个问题。以下是我为国家提出的建议“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的另一个幂吗?下面是我的想法:
∀c:∃d:
也就是说:
对于所有的数字c,都存在一个数字d,如果c乘以d等于b,那么c要么是1,要么存在一个数字e,使得d等于e乘以2
或
对于所有的数字c,都存在一个数字d,如果b是c的一个因子,而d是c的一个因子,那么c是1或者d是2的一个因子
或
如果两个数的乘积是b,那么其中一个数是1,或者其中一个数可以被2整除
或
b的所有除数不是1就是可被2整除
或
b是2的幂对于表示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的幂的问题。在表达“b是10的幂”时,实际上不需要中国的余数定理和/或有限序列的编码。你也可以按如下方式工作(我们使用常用符号如|,>,c-d,作为具有明显意义的公式/术语的快捷方式):
对于素数p,让我们把tNT中的一些公式称为Exp(p,a),称“p是素数,A是p的幂”。我们已经知道,如何构造一个。(出于技术原因,我们不认为S0是P的幂,所以~EXP(p,s0))。
如果p是素数,我们定义EXPp(c,a)≖ 〈EXP(p,a)∧ (c-1)|(a-1)〉. 这里,符号|是“除”的快捷方式,可以使用一个存在量词和乘法在TNT中轻松定义;c-1(a-1,resp.)也是如此,意思是“d使得Sd=c”(Sd=a,resp.)。
如果EXP(p,c)成立(即c是p的幂),那么公式EXPp(c,a)表示“a是c的幂”,因为a≡ 1(c-1型)然后
具有数字的属性p(即非负整数),有一种方法可以在TNT中引用具有此属性的最小数字:〈P(a)∧ ∀c:〈a> c→ ~P(a)〉〉.
我们可以陈述表示“b是10的幂”的公式(为了更好的可读性,我们省略了符号)〈 及〉, 我们写2和5而不是SS0和sss0):
∃a:∃c:∃d:(实验(2,a)∧ 实验(5,c)∧ 实验(5,d)∧ d>b∧ A.⋅c=
∃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))))