3 一阶逻辑:模型论

3.1 谓词和量词

  1. Q: 为什么说命题逻辑\(L\)的表达能力不够?
    A: 比如难以表达“至少有一个A中元素满足某某”。
    注:命题逻辑较容易表达“所有A中元素都满足某某”。
  2. Q: 含有自由变元的陈述和命题逻辑中的命题形式有何共同点?
    A: 由于变元(自由变元或者命题逻辑中命题变元)的取值未知,我们一般情况来说不能对含有自由变元的陈述命题形式直接判断真值。
  3. Q: 如何理解“真值表无法推广到一阶逻辑”?
    A: 量词引入了变元,例如\(\forall x(A(x)\to B(x))\)表示对每个对象\(x\),若\(x\)具有属性\(A\)则具有属性\(B\). 如果\(x\)可能取的有无限多种情况,就无法列表。
    对比之下,命题形式的所有真值指派为有限种。
  4. Q: 主词和自然语言意义上的主语一定是一个意思吗?
    A: 很多时候都是。比如\(x\)是数学家表示成\(A(x)\),主语就是主词,谓语(即系+表)就是谓词。
    但是有些时候两者不一定一致。比如对“\(a\)\(b\)”,可以抽象出一个二元谓词\(A\),从而表示成\(A(a,b)\).
  5. Q: 尝试阐释为什么在实际应用中,全称量词之后常跟一个隐含词,存在量词之后常跟一个合取词,而不是反过来。
    A: 对于全称量词后跟隐含词,其有用于推理的实际意义。而存在量词后跟隐含词\(\exists x(A(x)\to B(x))\)实际意义不显著:具体地,只要\(\exists x(\sim A(x)\vee B(x))\),那命题就为真。
    全称量词跟合取词,表示所有\(x\)都同时满足两条性质,这过于平凡,不能提供什么有关两个谓词之间关系的信息。而存在量词跟合取词则往往富有实际意义,例如作为“反例”否定\(\forall x(A(x)\to\sim B(x))\).
  6. Q: 简单说明如何形式化常见的两类自然语言句子:“所有满足A的都满足B”“一些满足A的满足B”。如果限定只能使用全称量词怎么办?只能使用存在量词呢?
    A: 提示:“所有满足A的都满足B”实际上相当于不存在\(x\)同时满足\(A\)且不满足\(B\). (即:“没有反例”)
    而“一些满足\(A\)的满足\(B\)”也可以理解成“举反例”,也就是并不是所有满足B的都不满足A. (注:也可以并不是所有满足A的都不满足B)
  7. Q: 阐释形式化自然语言中主谓宾结构句子时为什么常常出现\(A(x)\wedge B(y)\wedge C(x,y)\)结构。
    A: 比如学生看书,则“学生”本身就是一种“属性”,需要用一个谓词表示。“书”也同理。而“看”根据3.可以被抽象为二元谓词,即得到结果\(\exists xy(Student(x)\wedge Book(y)\wedge Read(x,y))\).

3.2 一阶语言

  1. Q: 逻辑符号和非逻辑符号的区别是什么?
    A: 非逻辑符号(函项符、谓词符)的含义根据语义的赋予(解释)的不同而不同。比如你可以让\(Phil(x)\)指代“\(x\)是哲学家”,也可以让\(Phil(x)\)指代“\(x\)是费城人”。
  2. Q: 为什么\(+,-,>,<,=,\exists,\wedge,\vee\)都是技术性符号?
    A: 提示:有的是二元函项符,有的是二元谓词符(即二元关系)。
    可以用\(\forall,\sim,\to\)等定义\(\exists,\wedge,\vee\).
  3. Q: 常元和函项符有何联系?函项符和谓词符有何联系?
    A: 常元可以看成0元函项符。
    把原子公式\(A_j^n(t_1,\cdots,t_n)\)中每一项递归地展开,则原子公式可以抽象地写成(这里抽象出了一个实际含义可能极度复杂\(m\)元谓词\(B_{j'}^m\)\(B_{j'}^m(x_1,\cdots,x_m)\),其中\(x_i\)是变元。这说明其实函项符也可以看作技术性符号,即形式上可以把所有原子公式(从而所有公式)只用谓词表示。
    注意函项符值域是论域,相比之下谓词值域是\(\{0,1\}\).
    当然,还有一种思想:把\(n\)元函项符看作\(n+1\)元谓词符。这也可以说明只有谓词符就够了。具体严格说明“够了”需要后面的知识。
  4. Q: 为了定义项和公式,除了定义递归的出口(对于项是变元和常元,对于公式是原子公式),还需要作出什么定义?
    A: 递归的法则(对于项是用函项符,对于公式是用连接符或量词,即\((\forall x_i)\mathscr A\)这样)。
    并且还要专门说明递归的出口和递归的法则确定了所有可能的项(公式)集合,没有其它的项(公式)。
    注:用量词构造公式时,量词后紧跟的变元可能不出现在公式中,即\((\forall x)(A(y))\). 当然这样做在实际中并不常用。参见“约束变元”。
  5. Q: 为什么说命题语言\(\mathscr L_0\)是一阶语言\(\mathscr L\)的子语言?
    A: 在\(\mathscr L\)如果不含有量词和项(即:不含常元、变元、函项符),即所有公式都是0元谓词符(即“命题符”),那就是\(\mathscr L_0\).
    注意:回忆我们提到过谓词是非逻辑记号,其具体含义(何时为真)可以自己指定。那0元谓词的含义(真假)当然也可以自己指定。这个角度帮助我们理解:0元谓词可以看作命题变元。
    注意:当然也可以脱离“命题真假”这样的语义,纯粹从形式上理解。之前我们提过这些形式系统除了表示一般的二值逻辑,还能表示三值逻辑,乃至各种实际语义。
  6. Q: 为什么“扩展”一阶语言时,要把可数个常元、谓词、函项等人为分出多个(有限整数个)“系列”,每个系列都为可数个?
    A: 提示:type signature.

复杂度和权重

  1. Q: 闭项的复杂度一定低吗?
    A: 根据定义,不一定。闭项只是说不含变元,只含常元。但其中可能含有许多函项符。
    然而在实际应用中,有时可以用一个具体的常元代替或近似代替闭项(比如:求出函数值),这样一来复杂度(项中出现函项符个数)就是0了。
    注:约定0元函项符或常元不算入复杂度。
  2. Q: 每个项\(t\)权重都是-1,且\(t\)任意初始(真)子段的权重都非负这一事实和什么数据结构有关?
    A: 提示:想象栈中初始有一个元素\(0\),读取\(f_a^3t_1f_b^2t_2t_3t_4\)时:
    对于\(f_a^3\),把0取出再放入\(a_1,a_2,a_3\).
    对于\(t_1\),取出\(a_1\).
    对于\(f_b^2\),取出\(a_2\)再放入\(b_1,b_2\).
    对于\(t_2\),取出\(b_1\).
    对于\(t_3\),取出\(b_2\).
    对于\(t_4\),取出\(a_3\).
    当然栈和递归(或说归纳法)本质是相同的。
  3. Q: 公式的权重为-1这一事实证明和2.有何异同?
    A: 用前缀表达式书写,则\(\to,\sim\)实际上可以和谓词一并统一用2.的方法处理(注意\(\to,\sim\)分别是二元、一元运算符)。
    注:全称量词是定义在\(\{变元\}\times\{公式\}\)这个笛卡尔积上的二元运算符,则也可以如此处理。
  4. Q: 权重和“技术性符号不必要”有何联系?
    A: 提示:用“栈”的简单操作和性质即可良定义所有项和公式(用前缀表达式,如\(f_1^2 t_1t_2\)这样),无需技术性符号(括号,逗号等)
  5. Q: 公式的复杂度定义中,\(\sim\)\(\forall\)为何都加1?之前难道不是说\(\sim\)是一元运算符而\(\forall\)是二元吗?
    A: \((\forall x)\mathscr A\)这样可以看成关于\(\mathscr A\)的一元运算符。
    注:实际上,公式的复杂度等于总的子公式个数-1.(显然每个\(\sim,\forall\)多引入一个子公式;每个\(\to\)多引入两个子公式。归纳即可证明)