一阶逻辑:模型论
哥德尔编码
- Q: 如何用一个自然数,编码自然数的有序对?
A: 可以使用 2 a 3 b 2^a 3^b 2a3b,也可以在二维平面上从原点开始以“蛇形”给每个自然数为坐标的点编号。
注:前者会导致许多自然数没有对应的有序对,不是一一对应。但叙述起来较简单。 - Q: 解释形式上的表达式
ℵ
0
+
ℵ
0
2
+
⋯
=
ℵ
0
\aleph_0+\aleph_0^2+\cdots=\aleph_0
ℵ0+ℵ02+⋯=ℵ0.
A: 提示:把每一“项”和 ℵ 0 \aleph_0 ℵ0做一一对应,整体就相当于 ℵ 0 2 = ℵ 0 \aleph_0^2=\aleph_0 ℵ02=ℵ0了。 - Q: 尝试用0.和1.解释哥德尔编码。
A: 提示:
f k n f^n_k fkn相当于有序对。(形式上可以用 ℵ 0 2 = ℵ 0 \aleph_0^2=\aleph_0 ℵ02=ℵ0表达)
如何用一个自然数编码 a 1 , ⋯ , a n , ⋯ a_1,\cdots,a_n,\cdots a1,⋯,an,⋯和 b 1 , ⋯ , b n , ⋯ b_1,\cdots, b_n,\cdots b1,⋯,bn,⋯共两组元素?可以简单地分成奇偶,奇数用于表示 a i a_i ai,偶数用于表示 b i b_i bi。(这形式上可以用 2 ℵ 0 = ℵ 0 2\aleph_0=\aleph_0 2ℵ0=ℵ0表达)
哥德尔编码可以形式上用 ( 2 ℵ 0 2 + 2 ℵ 0 + 6 ) 1 + ( 2 ℵ 0 2 + 2 ℵ 0 + 6 ) 2 + ⋯ = ℵ 0 (2\aleph _0^2+2\aleph_0 +6)^1 + (2\aleph _0^2+2\aleph_0 +6)^2+\cdots=\aleph_0 (2ℵ02+2ℵ0+6)1+(2ℵ02+2ℵ0+6)2+⋯=ℵ0表达。
辖域和替换
- Q: 尝试解释
∀
x
(
A
(
x
)
∧
∀
x
B
(
x
)
∧
∀
y
C
(
y
)
∧
∀
y
D
(
y
)
)
\forall x (A(x)\wedge \forall x B(x)\wedge \forall y C(y) \wedge \forall y D(y))
∀x(A(x)∧∀xB(x)∧∀yC(y)∧∀yD(y))中的变元名。
A: 提示:对于上面的 x x x可以类比程序设计中内层变量遮蔽(Shadow)外层同名变量。
当然,正如程序设计中一样,这种遮蔽有时会造成困扰。往往并不是最规范的写法。比如积分 ∫ 0 1 x ∫ 0 1 x d x ⋅ d x \int_0^1x\int_0^1xdx\cdot dx ∫01x∫01xdx⋅dx也造成了相同的困扰。
然而问题中的 y y y相对来说,就比较合理,比如 ∫ 0 1 x d x + ∫ 0 2 x d x \int_0^1xdx+\int_0^2xdx ∫01xdx+∫02xdx或者
for i in range(10):
print(i)
for i in range(15):
print(i+1)
都和问题中的 y y y类似,是比较合理的写法。
- Q: 项替换的归纳定义中,归纳起点是什么?
A: 命题变元。(对于 s ( x i / t ) s(x_i/t) s(xi/t),其中 s s s就是某个命题变元 x j x_j xj,此处的项替换把命题变元 x i x_i xi变为 t t t,把 x j , j ≠ i x_j,j\neq i xj,j=i不变) - Q: 针对“项对公式中的变元是自由的”,我们是想用什么替换什么中的什么?
A: 想用项替换公式中的变元。
注:更详细地,是替换自由变元。你不可能把 ∀ x \forall x ∀x里的 x x x给替换掉。我们马上得到:若 A \mathscr A A不含 x i x_i xi的自由出现,那么任何项对 A \mathscr A A中 x i x_i xi都是自由的。 - Q: 举一个(自然语言的)实际例子说明“项对公式中的变元不自由”时强行做公式的项替换引起混乱。
A: 例如:存在一个国家甲,乙国人和丙国人的混血是甲国国王。乙和丙都是自由出现的(自由变元)。这个句子不能判定真假。只有将乙和丙指定了才能判定真假。
如果强行变成存在一个国家甲,乙国人和甲国人的混血是甲国国王,那么语义发生了根本变化。此时再把乙指定了,就可以判定真假。
相比之下,一个正常的替换可以形如:存在一个国家甲,使得联合国排序中排行第丁的国家人和丙国人的混血是甲国国王。可以认为,这样的语义没有发生某种所谓的“根本变化”。注意此时仍然是指定丁和丙才能确定命题真假。
当然我们还可以举出更有趣的例子:比如存在乙,乙舔到过甲的眼睛。如果把甲直接换成乙…… - Q:
x
i
x_i
xi出现在
∀
x
i
\forall x_i
∀xi的辖域中时是()的变元。联系项对公式中变元自由的定义(替换后项中的任意变元都不出现在对应量词
∀
\forall
∀的辖域中),上述事实说明了项
x
i
x_i
xi(或项
f
(
x
i
)
,
g
(
x
i
,
x
i
)
f(x_i),g(x_i,x_i)
f(xi),g(xi,xi)……等等)对任何公式
A
\mathscr A
A中的变元()一定是自由的。
A: 约束, x i x_i xi. - Q: 公式中项替换的归纳定义中,归纳起点是什么?这和项替换的归纳定义有什么区别和联系?
A: 原子 A j n ( s 1 , ⋯ , s n ) A_j^n(s_1,\cdots, s_n) Ajn(s1,⋯,sn). 定义公式中项替换的归纳起点需要先定义项替换,明确 s k ( x i / t ) s_k(x_i/t) sk(xi/t)的含义。
变元是项的“起点”,原子是公式的“起点”。项是原子的组成部分,从这个角度讲项比公式基本。先有项替换再有公式中项替换。
换名替换
- Q: 换名替换之后,被换的变元名一定不存在了吗?
A: 不一定。注意 A ( x i / x j ) \mathscr A(x_i/x_j) A(xi/xj)中可能仍然有 x i x_i xi(没有换掉那些约束变元 x i x_i xi)。 - Q: 变元换名是为了方便在什么情况下做公式中项替换?
A: 提示:项 t t t对公式 A \mathscr A A中变元 x i x_i xi不自由(比如说 t t t中出现了 x j x_j xj,而 A \mathscr A A中存在 ∀ x j A ( x i ) \forall x_j A(x_i) ∀xjA(xi)结构)时,我们把 ∀ x j B \forall x_j \mathscr B ∀xjB中所有 x j x_j xj换一个名字,比如变成 ∀ x k B ( x j / x k ) \forall x_k\mathscr B(x_j/x_k) ∀xkB(xj/xk). 通过一系列这种操作可以使得项 t t t对公式 A \mathscr A A中变元 x i x_i xi的替换变得安全。 - Q: 对
∀
x
i
A
\forall x_i \mathscr A
∀xiA中变元
x
i
x_i
xi换名成
x
j
x_j
xj的条件:
x
j
x_j
xj不在
A
\mathscr A
A中自由出现,且
x
j
x_j
xj在
A
\mathscr A
A中对
x
i
x_i
xi自由。为什么缺一不可?
A: 如果 x j x_j xj在 A \mathscr A A中自由出现,则把 ∀ x i \forall x_i ∀xi替换成 ∀ x j \forall x_j ∀xj后, x j x_j xj是约束变元,这不是我们希望的语义变化。如果 x j x_j xj在 A \mathscr A A中对 x i x_i xi不自由,那么 A ( x i / x j ) \mathscr A(x_i/x_j) A(xi/xj)部分就出现了我们不期望的语义变化,就更不必说 ∀ x i A \forall x_i \mathscr A ∀xiA整体了。
注:原来的两个不同命题变元变成了相同(名称)的命题变元未必就会造成不良后果。例如 ∀ y ( A ( y ) → ∀ w B ( x , z ) ) \forall y(A(y)\to\forall wB(x,z)) ∀y(A(y)→∀wB(x,z)),把 y y y换成 w w w是可以的。注意这时 w w w没有在 A ( y ) → ∀ w B ( x , z ) A(y)\to\forall wB(x,z) A(y)→∀wB(x,z)中自由出现,且 w w w在 A ( y ) → ∀ w B ( x , z ) A(y)\to\forall wB(x,z) A(y)→∀wB(x,z)中对 y y y自由。
注:两个条件中显然不存在一者推出另一者。
注: x j x_j xj在 A \mathscr A A中对 x i x_i xi自由的一个充分条件是 x j x_j xj不在 A \mathscr A A中约束出现。因此这两条条件的一个充分条件是 x j x_j xj不在 A \mathscr A A中出现。也就是换名直接换一个全新的变元名。 - Q: 把2.中两条条件中
A
\mathscr A
A改成
∀
x
i
A
\forall x_i \mathscr A
∀xiA这个整体,如何?
A: 提示: x j x_j xj对 ∀ x i A \forall x_i \mathscr A ∀xiA中的 x i x_i xi自由,这是平凡的。你不能因为前述事实就弄出 A ( x i / x j ) \mathscr A(x_i/x_j) A(xi/xj),只能弄出 ( ∀ x i A ) ( x i / x j ) (\forall x_i\mathscr A)(x_i/x_j) (∀xiA)(xi/xj). - Q: 如果
B
\mathscr B
B就是
∀
x
i
A
\forall x_i \mathscr A
∀xiA,那么
B
(
x
i
/
x
j
)
\mathscr B(x_i/x_j)
B(xi/xj)就是
∀
x
j
A
(
x
i
/
x
j
)
\forall x_j\mathscr A(x_i/x_j)
∀xjA(xi/xj)嘛?
A: 回忆公式中项替换的定义, B ( x i / x j ) \mathscr B(x_i/x_j) B(xi/xj)中 x i x_i xi并未自由出现,因此替换结果就是 B \mathscr B B. ∀ x j A ( x i / x j ) \forall x_j\mathscr A(x_i/x_j) ∀xjA(xi/xj)应当是换名替换的结果。 - Q: 接0.,既然被换的变元名仍然可能存在,我们如何论证换名替换是可逆的?
A:
首先:把 ∀ x i A \forall x_i \mathscr A ∀xiA换名替换成 ∀ x j A ( x i / x j ) \forall x_j\mathscr A(x_i/x_j) ∀xjA(xi/xj),则留下的那些 x i x_i xi一定是在 A \mathscr A A中约束出现的。
其次:由于初始时, x j x_j xj不在 A \mathscr A A中自由出现,因此 A ( x i / x j ) \mathscr A(x_i/x_j) A(xi/xj)中的那些 x j x_j xj要不然原本在 A \mathscr A A中就约束出现,要不然就是 A \mathscr A A中自由的 x i x_i xi换成的(即:这些 x i x_i xi在 A \mathscr A A中,外层没有 ∀ x i \forall x_i ∀xi. 当然 A \mathscr A A之外确实原本有一个 ∀ x i \forall x_i ∀xi)。
为了验证 x i x_i xi在 A ( x i / x j ) \mathscr A(x_i/x_j) A(xi/xj)中对 x j x_j xj自由,我们关注到第一种 x j x_j xj无需在 A ( x i / x j ) ( x j / x i ) \mathscr A(x_i/x_j)(x_j/x_i) A(xi/xj)(xj/xi)中换成 x i x_i xi,而第二种 x j x_j xj由于外层没有 ∀ x i \forall x_i ∀xi也就自然不会在换成 x i x_i xi时造成麻烦。