Relabelling

常量域是一个参数,而本书不停地换它:工作语法取载体,无参公式取空类型,第四部取受限载体。本章就是这类更换的工具组,且一次在三个海拔上工作:常量域之间的一个映射,沿语法函子式推送,在含义上分毫不差,还把 Lévy 见证原样携带。与书末诸同伴一样,这套工具在主干上尚无消费者;它的客户随第四部的深层章节到来,届时公式将在内层世界的常量、码的空域与环境载体之间迁徙。

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

module FOL.Manipulation.Relabelling where

open import Base.Prelude
open import Base.Truth
open import FOL.ZFStructure using ( ZFStructure )
open import FOL.Syntax using
  ( Term; con; var; Formula; _∈̇_; _≐_; _∧̇_; _∨̇_; _⇒̇_; ¬̇_; ⊤̇; ⊥̇; ∃̇_; ∀̇_; ∀̇∈; ∃̇∈ )
open import FOL.LevyHierarchy using
  ( Δ₀; δ-∈; δ-≐; δ-∧; δ-∨; δ-⇒; δ-¬; δ-⊤; δ-⊥; δ-∀∈; δ-∃∈
  ; Σₙ; σ-Δ₀; σ-Π; σ-∃; Πₙ; π-Δ₀; π-Σ; π-∀ )
import FOL.Semantics
import Cubical.Data.Empty as Empty

语法层

语法对常量域是函子式的:一个映射 K → K' 沿词项或公式推送,变换常量,不碰其他任何东西。一构造子一子句,各做显然之事。

mapTm :  { ℓ'} {K : Type } {K' : Type ℓ'} {n}
       (K  K')  Term K n  Term K' n
mapTm f (con k) = con (f k)
mapTm f (var i) = var i

mapFo :  { ℓ'} {K : Type } {K' : Type ℓ'} {n}
       (K  K')  Formula K n  Formula K' n
mapFo f (t ∈̇ u)  = mapTm f t ∈̇ mapTm f u
mapFo f (t  u)  = mapTm f t  mapTm f u
mapFo f (φ ∧̇ ψ)  = mapFo f φ ∧̇ mapFo f ψ
mapFo f (φ ∨̇ ψ)  = mapFo f φ ∨̇ mapFo f ψ
mapFo f (φ ⇒̇ ψ)  = mapFo f φ ⇒̇ mapFo f ψ
mapFo f (¬̇ φ)    = ¬̇ mapFo f φ
mapFo f ⊤̇        = ⊤̇
mapFo f ⊥̇        = ⊥̇
mapFo f (∃̇ φ)    = ∃̇ mapFo f φ
mapFo f (∀̇ φ)    = ∀̇ mapFo f φ
mapFo f (∀̇∈ t φ) = ∀̇∈ (mapTm f t) (mapFo f φ)
mapFo f (∃̇∈ t φ) = ∃̇∈ (mapTm f t) (mapFo f φ)

连着两次这样的映射就是一次映射。凡经中间域迁徙一条公式的章节,想要的无非是那个复合;而在语法被定义之处证它,代价是十二次同余,却省得此后每一章各写一遍。两个词项情形都是 refl,因为变元不携带常量,而常量的变换就是把映射施用上去。

mapTm-comp :  { ℓ' ℓ''} {K : Type } {K' : Type ℓ'} {K'' : Type ℓ''} {n}
             (f : K  K') (g : K'  K'') (t : Term K n)
            mapTm g (mapTm f t)  mapTm  k  g (f k)) t
mapTm-comp f g (con k) = refl
mapTm-comp f g (var i) = refl

mapFo-comp :  { ℓ' ℓ''} {K : Type } {K' : Type ℓ'} {K'' : Type ℓ''} {n}
             (f : K  K') (g : K'  K'') (φ : Formula K n)
            mapFo g (mapFo f φ)  mapFo  k  g (f k)) φ
mapFo-comp f g (t ∈̇ u)  = cong₂ _∈̇_ (mapTm-comp f g t) (mapTm-comp f g u)
mapFo-comp f g (t  u)  = cong₂ _≐_ (mapTm-comp f g t) (mapTm-comp f g u)
mapFo-comp f g (φ ∧̇ ψ)  = cong₂ _∧̇_ (mapFo-comp f g φ) (mapFo-comp f g ψ)
mapFo-comp f g (φ ∨̇ ψ)  = cong₂ _∨̇_ (mapFo-comp f g φ) (mapFo-comp f g ψ)
mapFo-comp f g (φ ⇒̇ ψ)  = cong₂ _⇒̇_ (mapFo-comp f g φ) (mapFo-comp f g ψ)
mapFo-comp f g (¬̇ φ)    = cong ¬̇_ (mapFo-comp f g φ)
mapFo-comp f g ⊤̇        = refl
mapFo-comp f g ⊥̇        = refl
mapFo-comp f g (∃̇ φ)    = cong ∃̇_ (mapFo-comp f g φ)
mapFo-comp f g (∀̇ φ)    = cong ∀̇_ (mapFo-comp f g φ)
mapFo-comp f g (∀̇∈ t φ) = cong₂ ∀̇∈ (mapTm-comp f g t) (mapFo-comp f g φ)
mapFo-comp f g (∃̇∈ t φ) = cong₂ ∃̇∈ (mapTm-comp f g t) (mapFo-comp f g φ)

走动最勤的实例:从没有常量的域进入任何常量域。语法章介绍过无参公式,即以空类型为常量域的数据轴;与句子一样,本书不为它另设名字,类型 Formula (⊥* {ℓ}) n 已经说完全部。从空类型可以推出一切,库的消去子 Empty.rec* 说的正是这句话,沿它变换,无参公式便嵌入任意常量域上的语法。

embed :  { ℓ'} {K : Type ℓ'} {n}  Formula (⊥* {}) n  Formula K n
embed = mapFo Empty.rec*

含义层

沿 f : K → K' 变换常量后在 ι 下求值,与直接在 ι ∘ f 下求值相同;下文带 标记的满足与释义,就是在该复合解释处打开的泛型语义。一次结构归纳,每个情形都是同余;两个词项情形干脆是 refl

module _ { ℓ'} (𝕋 : TruthAlgebra  ℓ') (𝒮 : ZFStructure 𝕋) where

  open TruthAlgebra 𝕋
  open ZFStructure 𝒮
  open FOL.Semantics 𝕋 𝒮 using ( module At; _^_ )

  module _ {ℓc ℓd} {K : Type ℓc} {K' : Type ℓd} (f : K  K') (ι : K'  S) where

    open At K' ι using ( _⊨_; ⟦_⟧ )
    open At K  k  ι (f k)) using () renaming ( _⊨_ to _⊨∘_ ; ⟦_⟧ to ⟦_⟧∘ )

    ⟦⟧-map :  {n} (t : Term K n) (γ : S ^ n)
             mapTm f t  γ   t ⟧∘ γ
    ⟦⟧-map (con k) γ = refl
    ⟦⟧-map (var i) γ = refl

    ⊨-map :  {n} (φ : Formula K n) (γ : S ^ n)
           (γ  mapFo f φ)  (γ ⊨∘ φ)
    ⊨-map (t ∈̇ u)  γ = cong₂ _∈ˢ_ (⟦⟧-map t γ) (⟦⟧-map u γ)
    ⊨-map (t  u)  γ = cong₂ _≈ˢ_ (⟦⟧-map t γ) (⟦⟧-map u γ)
    ⊨-map (φ ∧̇ ψ)  γ = cong₂ _⊓_ (⊨-map φ γ) (⊨-map ψ γ)
    ⊨-map (φ ∨̇ ψ)  γ = cong₂ _⊔_ (⊨-map φ γ) (⊨-map ψ γ)
    ⊨-map (φ ⇒̇ ψ)  γ = cong₂ _⇒_ (⊨-map φ γ) (⊨-map ψ γ)
    ⊨-map (¬̇ φ)    γ = cong ¬_ (⊨-map φ γ)
    ⊨-map ⊤̇        γ = refl
    ⊨-map ⊥̇        γ = refl
    ⊨-map (∃̇ φ)    γ = cong ( S) (funExt  x  ⊨-map φ (x  γ)))
    ⊨-map (∀̇ φ)    γ = cong ( S) (funExt  x  ⊨-map φ (x  γ)))
    ⊨-map (∀̇∈ t φ) γ = cong ( S) (funExt  x 
      cong₂ _⇒_ (cong (x ∈ˢ_) (⟦⟧-map t γ)) (⊨-map φ (x  γ))))
    ⊨-map (∃̇∈ t φ) γ = cong ( S) (funExt  x 
      cong₂ _⊓_ (cong (x ∈ˢ_) (⟦⟧-map t γ)) (⊨-map φ (x  γ))))

无参公式等候的推论:经 embed 进入任何常量域,含义不变。数据轴与工作语法共享同一套语义,无一事需证两遍。(带 标记的满足经 Empty.rec* 解读空常量域。)

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

    open At K ι using ( _⊨_ )
    open At (⊥* {ℓe})  b  ι (Empty.rec* b)) using () renaming ( _⊨_ to _⊨∅_ )

    embed-⊨ :  {n} (φ : Formula (⊥* {ℓe}) n) (γ : S ^ n)
             (γ  embed φ)  (γ ⊨∅ φ)
    embed-⊨ = ⊨-map Empty.rec* ι

Lévy 见证层

变换常量保持公式的结构,Lévy 见证遂逐构造子随行。正是这条小引理,将让绝对性论证携着 Δ₀ 见证跨越常量域的更换。

mapΔ₀ :  {ℓc ℓd} {K : Type ℓc} {K' : Type ℓd} (f : K  K')
        {n} {φ : Formula K n}  Δ₀ φ  Δ₀ (mapFo f φ)
mapΔ₀ f δ-∈ = δ-∈
mapΔ₀ f δ-≐ = δ-≐
mapΔ₀ f (δ-∧ c d) = δ-∧ (mapΔ₀ f c) (mapΔ₀ f d)
mapΔ₀ f (δ-∨ c d) = δ-∨ (mapΔ₀ f c) (mapΔ₀ f d)
mapΔ₀ f (δ-⇒ c d) = δ-⇒ (mapΔ₀ f c) (mapΔ₀ f d)
mapΔ₀ f (δ-¬ c)   = δ-¬ (mapΔ₀ f c)
mapΔ₀ f δ-⊤ = δ-⊤
mapΔ₀ f δ-⊥ = δ-⊥
mapΔ₀ f (δ-∀∈ c) = δ-∀∈ (mapΔ₀ f c)
mapΔ₀ f (δ-∃∈ c) = δ-∃∈ (mapΔ₀ f c)

引理经互归纳延伸到整座交替之塔,叶位复用 mapΔ₀

mutual
  mapΣₙ :  {ℓc ℓd} {K : Type ℓc} {K' : Type ℓd} (f : K  K')
          {k n} {φ : Formula K n}  Σₙ k φ  Σₙ k (mapFo f φ)
  mapΣₙ f (σ-Δ₀ d) = σ-Δ₀ (mapΔ₀ f d)
  mapΣₙ f (σ-Π p)  = σ-Π (mapΠₙ f p)
  mapΣₙ f (σ-∃ s)  = σ-∃ (mapΣₙ f s)

  mapΠₙ :  {ℓc ℓd} {K : Type ℓc} {K' : Type ℓd} (f : K  K')
          {k n} {φ : Formula K n}  Πₙ k φ  Πₙ k (mapFo f φ)
  mapΠₙ f (π-Δ₀ d) = π-Δ₀ (mapΔ₀ f d)
  mapΠₙ f (π-Σ s)  = π-Σ (mapΣₙ f s)
  mapΠₙ f (π-∀ p)  = π-∀ (mapΠₙ f p)

小结

一个常量域映射,三个海拔的搬运:mapFo 搬语法 (embed 是无参入口),⊨-mapembed-⊨ 认证含义纹丝不动,mapΔ₀ 及其塔搬 Lévy 见证。公式、含义与级别作为一体旅行;将来在诸世界之间迁徙公式的章节,靠的正是这一点。