Semantics

把语法变成含义需要三样东西:被谈论的结构 𝒮、常量的解释,以及给自由变量赋值的环境。第一样连同它取值的真值代数是本章整体的参数;泛型开发按作用域纪律的安排,经抽象的 𝕋 说话。

{-# OPTIONS --cubical --safe --guardedness #-}

open import Base.Prelude
open import Base.Truth
open import FOL.ZFStructure using ( ZFStructure )

module FOL.Semantics { ℓ'} (𝕋 : TruthAlgebra  ℓ') (𝒮 : ZFStructure 𝕋) where

open import FOL.Syntax using
  ( Term; con; var
  ; Formula; _∈̇_; _≐_; _∧̇_; _∨̇_; _⇒̇_; ¬̇_; ⊤̇; ⊥̇; ∃̇_; ∀̇_; ∀̇∈; ∃̇∈ )

open TruthAlgebra 𝕋
open ZFStructure 𝒮

环境

先备一件行头。要对带 n 个自由变量的公式求值,每个变量都需要一个来自载体的取值:一份赋值表,即环境,全书写作 γ。其类型记为 S ^ n,长度为 n 的向量,对齐传统上标记号 $S^n$ (_^_ 读作「幂」);它只是记号。

infixl 30 _^_

_^_ :  {ℓ''}  Type ℓ''    Type ℓ''
A ^ n = Vec A n

求值与满足

剩下那样原料,常量解释 ι : K → S,由内部模块 At 一次固定:日常工作在一个固定的 ι 下进行 (典范情形以载体自身为常量域,ι 取恒等),偶尔需要跨解释的引理,如本章末那几条,则以限定名访问。

module At {ℓc} (K : Type ℓc) (ι : K  S) where

两个记号都直接来自教科书:⟦_⟧ 读作「取值」,_⊨_ 读作「满足」,环境在左,写 γ ⊨ φ。词项求值要么问 ι (常量),要么查环境 (变量)。满足关系是对十二个构造子的一次结构递归。

  ⟦_⟧ :  {n}  Term K n  S ^ n  S
   con k  γ = ι k
   var i  γ = lookup i γ

  infix 6 _⊨_

  _⊨_ :  {n}  S ^ n  Formula K n  Ω
  γ  (t ∈̇ u)  =  t  γ ∈ˢ  u  γ
  γ  (t  u)  =  t  γ ≈ˢ  u  γ
  γ  (φ ∧̇ ψ)  = (γ  φ)  (γ  ψ)
  γ  (φ ∨̇ ψ)  = (γ  φ)  (γ  ψ)
  γ  (φ ⇒̇ ψ)  = (γ  φ)  (γ  ψ)
  γ  (¬̇ φ)    = ¬ (γ  φ)
  γ  ⊤̇        = 
  γ  ⊥̇        = 
  γ  (∃̇ φ)    =  S  x  (x  γ)  φ)
  γ  (∀̇ φ)    =  S  x  (x  γ)  φ)
  γ  (∀̇∈ t φ) =  S  x  (x ∈ˢ  t  γ)  ((x  γ)  φ))
  γ  (∃̇∈ t φ) =  S  x  (x ∈ˢ  t  γ)  ((x  γ)  φ))

看各子句的右端:每一条都恰好是真值代数的对应运算,作用在子公式的含义上。对象合取的含义就是宿主合取,对象量词的含义就是载体上的 ,中间没有任何翻译层。于是带 n 个自由变量的公式,含义是一个 S ^ n → Ω 型的函数,与宿主语言直接写出的谓词刻意同形;两者之间的桥编在书末,而这份忠实性将让那座桥的每一块板都归于一行同余。

两条有界子句值得再看一眼:它们的量化被钉在 ⟦ t ⟧ γ 的成员上。语法章许诺过,全部量词皆有界的公式在结构之间表现驯良;那份驯良物理上就住在这两行里,后面的章节将一次次回到这里。

小结

含义就是结构递归:⟦_⟧ 给词项取值,γ ⊨ φ 落进真值代数,每条子句恰是对应的代数运算,分毫不多。带 n 个自由变量的公式,含义是 S ^ n → Ω 型函数,与宿主谓词同形。公式与谓词之间尚缺一座桥;它编在书末,静候需求转入量产的那一天。