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 是无参入口),⊨-map 与 embed-⊨ 认证含义纹丝不动,mapΔ₀ 及其塔搬 Lévy 见证。公式、含义与级别作为一体旅行;将来在诸世界之间迁徙公式的章节,靠的正是这一点。