多类逻辑中的多类一阶逻辑的语义与翻译
我们先明确基础概念。多类逻辑(Many-Sorted Logic)是对经典一阶逻辑的自然扩展,在经典逻辑中,所有量词(∀, ∃)的取值范围是同一个全域。但在多类逻辑中,全域被预先划分为多个不相交的、称为“类”的子集。每个变量、函数符号和谓词符号都被赋予一个或多个“类”的说明,称为类型。这使得我们可以更自然、更精确地形式化那些讨论不同种类对象(如数字、集合、点、线等)的数学陈述。
第一步:理解多类逻辑的语法(签名与公式)
-
多类签名:一个多类签名 Σ 包含以下部分:
- 一个非空的类集合 S。每个元素 s ∈ S 称为一个类。
- 一个变量集,其中每个变量 x 都被赋予一个类,记为 x: s。
- 一个函数符号集,其中每个函数符号 f 都被赋予一个类声明,形如 f: s₁ × s₂ × ... × sₙ → s。这表示 f 接受 n 个参数,其类依次为 s₁ 到 sₙ,并返回一个类为 s 的值。当 n=0 时,f: → s 是一个类为 s 的常量符号。
- 一个谓词符号集,其中每个谓词符号 P 被赋予一个类声明,形如 P ⊆ s₁ × s₂ × ... × sₙ。这表示 P 是一个 n 元关系,其参数必须依次具有类 s₁ 到 sₙ。等号“=”是一个特殊的谓词符号,对每个类 s,都有一个对应的等式符号 =ₛ,其声明为 =ₛ ⊆ s × s。
-
项与公式:在给定签名 Σ 和变量赋值下,归纳定义:
- 项:每个变量 x: s 是一个类为 s 的项。如果 f: s₁ × ... × sₙ → s 是一个函数符号,且 t₁, ..., tₙ 是类分别为 s₁, ..., sₙ 的项,则 f(t₁, ..., tₙ) 是一个类为 s 的项。
- 原子公式:如果 P ⊆ s₁ × ... × sₙ 是一个谓词符号,且 t₁, ..., tₙ 是类匹配的项,则 P(t₁, ..., tₙ) 是一个原子公式。如果 t 和 r 是同类 s 的项,则 (t =ₛ r) 是一个原子公式。
- 复合公式:原子公式通过逻辑连接词(¬, ∧, ∨, →)和带类限制的量词组合而成。量词形式为 (∀x: s)φ 和 (∃x: s)φ,表示“对所有类为 s 的 x,...”和“存在一个类为 s 的 x,...”。
第二步:定义多类逻辑的语义(结构与满足关系)
-
多类结构:对于一个签名 Σ,一个多类结构 M 为每个类 s ∈ S 指定一个非空集合 Mₛ,称为类 s 的论域。不同类的论域是互不相交的。此外:
- 对每个函数符号 f: s₁ × ... × sₙ → s,M 为其指定一个函数 fᴹ: Mₛ₁ × ... × Mₛₙ → Mₛ。
- 对每个谓词符号 P ⊆ s₁ × ... × sₙ,M 为其指定一个关系 Pᴹ ⊆ Mₛ₁ × ... × Mₛₙ。
-
变量赋值与解释:一个变量赋值 σ 为每个变量 x: s 指定一个值 σ(x) ∈ Mₛ。在此基础上,可以递归地将任何项 t 解释为 M 中的一个元素 ⟦t⟧ᴹ, σ,将任何公式 φ 解释为真值 ⟦φ⟧ᴹ, σ ∈ {真,假}。其定义与一阶逻辑类似,关键区别在于:
- 项的解释必须落在其声明类对应的论域中。
- 量词 (∀x: s)φ 在 M 下为真,当且仅当,对于所有 d ∈ Mₛ,将 x 赋值为 d 后 φ 为真。注意,这里的量化范围仅限于 Mₛ,而不是整个结构的并集。
第三步:从多类逻辑到经典一序逻辑的翻译
这是理解多类逻辑表达能力的关键。我们可以将任何一个多类逻辑的理论,系统性地、保真地翻译成一个经典(单类)一阶逻辑的理论。这证明了多类逻辑并没有增加本质的表达能力,但它提供了更便利、更结构化的形式化工具。
-
基本思路:在经典一阶逻辑中,我们只有一个论域 U。为了“模拟”多个类,我们为原始签名中的每一个类 s 引入一个一元谓词符号 Pₛ(x)。公式 Pₛ(t) 在解释中为真,意味着“项 t 所代表的对象属于类 s”。
-
翻译过程:给定一个多类签名 Σ,我们构造一个经典一阶逻辑签名 Σ*,它包含:
- 原 Σ 中所有的函数符号和谓词符号(但忽略其类声明)。
- 对每个类 s ∈ S,添加一个一元谓词符号 Pₛ。
- 添加一个特殊的二元谓词符号 Eq(用于模拟不同类上的等号)。
现在,定义一个递归的翻译函数 Trans,将多类项和公式映射为经典一阶公式:
- 项:翻译项本身(如 f(x) 仍为 f(x)),但我们需要用公式来保证项的“类正确性”。
- 原子公式:
- Trans(P(t₁, ..., tₙ)) = P(Trans(t₁), ..., Trans(tₙ)) ∧ P_{s₁}(Trans(t₁)) ∧ ... ∧ P_{sₙ}(Trans(tₙ))
(这同时断言了谓词 P 成立,且每个参数都具有正确的类。) - Trans(t =ₛ r) = Eq(Trans(t), Trans(r)) ∧ Pₛ(Trans(t)) ∧ Pₛ(Trans(r))
(这里我们用单个谓词 Eq 模拟所有类上的等号,并断言两个对象都属于类 s。)
- Trans(P(t₁, ..., tₙ)) = P(Trans(t₁), ..., Trans(tₙ)) ∧ P_{s₁}(Trans(t₁)) ∧ ... ∧ P_{sₙ}(Trans(tₙ))
- 量词公式:
- Trans((∀x: s) φ) = ∀x (Pₛ(x) → Trans(φ))
- Trans((∃x: s) φ) = ∃x (Pₛ(x) ∧ Trans(φ))
(这精确地将量化范围限制在满足 Pₛ 的那些对象上,即“类 s 的对象”。)
- 逻辑连接词的翻译是直接的,例如 Trans(¬φ) = ¬Trans(φ)。
-
非空性公理:为了让翻译等价,我们必须向翻译后的理论中添加一组额外的非空性公理:对每个类 s ∈ S,添加公理 ∃x Pₛ(x)。这确保了每个类在解释中都不是空的,符合多类结构的要求。
-
等价性定理:可以严格证明,一个多类语句 φ 在某个多类结构 M 中为真,当且仅当,其翻译 Trans(φ) 连同所有非空性公理,在对应的经典结构 M* 中为真(其中 M* 的论域是所有 Mₛ 的并集,Pₛᴹ* 被解释为 Mₛ,Eq 被解释为所有类上等式的并集)。
总结:多类逻辑通过语法上的“类”声明,为建模不同种类的对象提供了更清晰、更不易出错的框架。其语义通过为每个类指定独立的论域来实现。虽然它在表达力上等价于经典一阶逻辑(通过引入类谓词和非空性公理的翻译),但在实践(如程序验证、形式化数学、知识表示)中,它能带来更简洁的表述、更自然的推理和更高效的自动化处理,因为许多“类正确性”的约束在语法层面就已经被强制或简化了。