Renaming

一件提前备下的工具:主干至今没有消费它,首批消费者随第四部的深层章节到来。先说变量。

语法章点过一处缺席:没有替换,没有弱化。量词子句直接取扩展语境中的公式体,经典的那套变量搬运装置根本无需存在。本书确实需要的那一点变量挪动,由一个机件包办:变量变换,即沿公式推送一个映射 ρ : Fin n → Fin m,配一条正确性定理,弱化、交换、收缩一并了断。

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

module FOL.Manipulation.Renaming where

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

语法层

进入约束子之下,变量变换须为新约束的变量让位:liftρ ρ 固定变量 0,其余经 ρ 平移。此后沿词项与公式推送变换就是一构造子一子句;注意它只动变量、不碰常量,与上一章的 mapFo 恰好互补。

liftρ :  {n m}  (Fin n  Fin m)  Fin (suc n)  Fin (suc m)
liftρ ρ zero    = zero
liftρ ρ (suc i) = suc (ρ i)

renameTm :  {ℓc} {K : Type ℓc} {n m}  (Fin n  Fin m)  Term K n  Term K m
renameTm ρ (con k) = con k
renameTm ρ (var i) = var (ρ i)

renameFo :  {ℓc} {K : Type ℓc} {n m}  (Fin n  Fin m)  Formula K n  Formula K m
renameFo ρ (t ∈̇ u)  = renameTm ρ t ∈̇ renameTm ρ u
renameFo ρ (t  u)  = renameTm ρ t  renameTm ρ u
renameFo ρ (φ ∧̇ ψ)  = renameFo ρ φ ∧̇ renameFo ρ ψ
renameFo ρ (φ ∨̇ ψ)  = renameFo ρ φ ∨̇ renameFo ρ ψ
renameFo ρ (φ ⇒̇ ψ)  = renameFo ρ φ ⇒̇ renameFo ρ ψ
renameFo ρ (¬̇ φ)    = ¬̇ renameFo ρ φ
renameFo ρ ⊤̇        = ⊤̇
renameFo ρ ⊥̇        = ⊥̇
renameFo ρ (∃̇ φ)    = ∃̇ renameFo (liftρ ρ) φ
renameFo ρ (∀̇ φ)    = ∀̇ renameFo (liftρ ρ) φ
renameFo ρ (∀̇∈ t φ) = ∀̇∈ (renameTm ρ t) (renameFo (liftρ ρ) φ)
renameFo ρ (∃̇∈ t φ) = ∃̇∈ (renameTm ρ t) (renameFo (liftρ ρ) φ)

语义层

变量变换何时保含义?恰当两个环境对相应的变量说同样的话:Agrees ρ γ δ 要求在大环境里查 ρ i 等于在小环境里查 iagrees∷ 表明该条件经得起向两侧同时压入一个新值,即约束子之下发生的事。整个展开对真值代数、结构与常量解释都是泛型的。

module Sat { ℓ'} (𝕋 : TruthAlgebra  ℓ') (𝒮 : ZFStructure 𝕋)
           {ℓc} {K : Type ℓc} (ι : K  ZFStructure.S 𝒮) where

  open TruthAlgebra 𝕋
  open ZFStructure 𝒮

  private module Sem = FOL.Semantics 𝕋 𝒮
  open Sem using ( _^_ )
  open Sem.At K ι using ( _⊨_; ⟦_⟧ )

  Agrees :  {n m}  (Fin n  Fin m)  S ^ m  S ^ n  Type 
  Agrees ρ γ δ =  i  lookup (ρ i) γ  lookup i δ

正确性定理:变换后的公式在大环境中的含义,与原公式在小环境中的相同。先词项,然后照例归纳,每个情形一条同余,约束子情形踩着 agrees∷ 过河。弱化 (插入未用的变量)、交换、收缩全是特例,取相应的 ρ 即得。

  agrees∷ :  {n m} {ρ : Fin n  Fin m} {γ : S ^ m} {δ : S ^ n}
            (x : S)  Agrees ρ γ δ  Agrees (liftρ ρ) (x  γ) (x  δ)
  agrees∷ x ag zero    = refl
  agrees∷ x ag (suc i) = ag i

  ⟦⟧-rename :  {n m} (ρ : Fin n  Fin m) (t : Term K n)
              (γ : S ^ m) (δ : S ^ n)  Agrees ρ γ δ
              renameTm ρ t  γ   t  δ
  ⟦⟧-rename ρ (con k) γ δ ag = refl
  ⟦⟧-rename ρ (var i) γ δ ag = ag i

  ⊨-rename :  {n m} (ρ : Fin n  Fin m) (φ : Formula K n)
             (γ : S ^ m) (δ : S ^ n)  Agrees ρ γ δ
            (γ  renameFo ρ φ)  (δ  φ)
  ⊨-rename ρ (t ∈̇ u)  γ δ ag = cong₂ _∈ˢ_ (⟦⟧-rename ρ t γ δ ag) (⟦⟧-rename ρ u γ δ ag)
  ⊨-rename ρ (t  u)  γ δ ag = cong₂ _≈ˢ_ (⟦⟧-rename ρ t γ δ ag) (⟦⟧-rename ρ u γ δ ag)
  ⊨-rename ρ (φ ∧̇ ψ)  γ δ ag = cong₂ _⊓_ (⊨-rename ρ φ γ δ ag) (⊨-rename ρ ψ γ δ ag)
  ⊨-rename ρ (φ ∨̇ ψ)  γ δ ag = cong₂ _⊔_ (⊨-rename ρ φ γ δ ag) (⊨-rename ρ ψ γ δ ag)
  ⊨-rename ρ (φ ⇒̇ ψ)  γ δ ag = cong₂ _⇒_ (⊨-rename ρ φ γ δ ag) (⊨-rename ρ ψ γ δ ag)
  ⊨-rename ρ (¬̇ φ)    γ δ ag = cong ¬_ (⊨-rename ρ φ γ δ ag)
  ⊨-rename ρ ⊤̇        γ δ ag = refl
  ⊨-rename ρ ⊥̇        γ δ ag = refl
  ⊨-rename ρ (∃̇ φ)    γ δ ag = cong ( S) (funExt  x 
    ⊨-rename (liftρ ρ) φ (x  γ) (x  δ) (agrees∷ x ag)))
  ⊨-rename ρ (∀̇ φ)    γ δ ag = cong ( S) (funExt  x 
    ⊨-rename (liftρ ρ) φ (x  γ) (x  δ) (agrees∷ x ag)))
  ⊨-rename ρ (∀̇∈ t φ) γ δ ag = cong ( S) (funExt  x 
    cong₂ _⇒_ (cong (x ∈ˢ_) (⟦⟧-rename ρ t γ δ ag))
              (⊨-rename (liftρ ρ) φ (x  γ) (x  δ) (agrees∷ x ag))))
  ⊨-rename ρ (∃̇∈ t φ) γ δ ag = cong ( S) (funExt  x 
    cong₂ _⊓_ (cong (x ∈ˢ_) (⟦⟧-rename ρ t γ δ ag))
              (⊨-rename (liftρ ρ) φ (x  γ) (x  δ) (agrees∷ x ag))))

小结

变量变换就是本书全部的变量演算:语法上 renameFo,含义上 ⊨-renameAgrees 点明了「什么都不变」的确切条件。本书的变量机件至此一次到位、整装完毕,静候第四部那些重量级消费者。