前束范式的目标不是把量词“看起来整齐”,而是把量词依赖关系显式排成一个序列,为公理证明和归结法做准备。
前束范式
形如
Q1x1Q2x2⋯QnxnM
的公式叫前束范式,其中 Qi∈{∀,∃},而母式 M 不含量词。
任意一阶公式都与某个前束范式逻辑等值,但前束范式通常不唯一。
变换的安全顺序
第一步:消去复杂联结词
A→B≡¬A∨B,
A↔B≡(A→B)∧(B→A).
第二步:把否定推进原子公式
用 De Morgan 律和量词否定律:
¬∀xA≡∃x¬A,
¬∃xA≡∀x¬A.
第三步:标准换名
不同量词不要重复绑定同一个字母,也不要与自由变元重名。
例如
∀xP(x)∨∃xQ(x,y)
先改为
∀uP(u)∨∃vQ(v,y).
换名只改受该量词约束的出现。
第四步:量词外提
若 x 不在 B 中自由出现,则可以使用:
(∀xA)∨B≡∀x(A∨B),
(∃xA)∧B≡∃x(A∧B).
变量自由出现条件不能省。若 x 在 B 中自由出现,外提会改变原来自由变量的含义。
完整算例
把
∀x(A(x)→(∃zB(z)→∃yC(x,y)))
化为前束范式。
先消蕴涵:
∀x(¬A(x)∨¬∃zB(z)∨∃yC(x,y)).
推进否定:
∀x(¬A(x)∨∀z¬B(z)∨∃yC(x,y)).
z,y 不在其他部分自由出现,可以外提:
∀x∀z∃y(¬A(x)∨¬B(z)∨C(x,y)).
量词次序来自原公式的依赖关系,不能为了美观随意交换 ∀z 与 ∃y。
无存在前束范式与 Skolem 范式
对前束范式,从左到右消去存在量词。
不依赖前面的全称变量
∃y∀xP(x,y)
用新常元 c 替换 y:
∀xP(x,c).
依赖前面的全称变量
∀x∃yP(x,y)
y 可以随 x 改变,所以要用新函数 f(x):
∀xP(x,f(x)).
若前面是 ∀x∀z,则新函数必须允许依赖二者:
y=f(x,z).
Skolem 化保持可满足性,而非一般的逻辑等值。新常元或新函数扩展了语言,因此不要写
A≡ASkolem.
正确说法是:
Sat(A)⟺Sat(ASkolem).
数学定义怎样写成谓词公式
序列 xn 收敛到 b:
∀ε(ε>0→∃N(N>0∧∀n(n>N→∣xn−b∣<ε))).
连续、极限和可导的表达都遵循同一顺序:
- “任意精度”对应 ∀ε;
- “可以找到控制量”对应 ∃δ 或 ∃N;
- “此后所有输入都满足误差界”对应内部的 ∀。
把 ∀ε 与 ∃δ 交换,就从“每个精度可选不同控制量”变成“存在一个控制量对所有精度都有效”,含义完全不同。
关系数据库中的逻辑
关系模式中的函数依赖
X→Y
不是命题联结词蕴涵,而是在说:任意两条元组只要在属性集 X 上相等,就必须在 Y 上相等。
可写为
∀t1∀t2(t1[X]=t2[X]→t1[Y]=t2[Y]).
这说明数据库依赖只是谓词逻辑能表达的一类特殊约束。理解量词和关系后,键、依赖和一致性约束就不再只是数据库里的孤立规则。