Logic 戈德尔,埃舍尔,巴赫印刷数字理论(TNT)的难题和解决方案

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) 我很困惑,因为作者指出这些问题很棘手,第二个问题需要几个小时才能解决;我肯定错过了一些明显的东西,但我看不到 您的表达式分别相当

在道格拉斯·霍夫斯塔德的《戈德尔、埃舍尔、巴赫》第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))))