Agda大序数(2) 良构序数
交流Q群: 893531731
目录: NonWellFormed.html
本文源码: WellFormed.lagda.md
高亮渲染: WellFormed.html
{-# OPTIONS --without-K --safe #-} {-# OPTIONS --overlapping-instances #-} module NonWellFormed.WellFormed where
前置
本章在内容上延续上一章.
open import NonWellFormed.Ordinal open NonWellFormed.Ordinal.≤-Reasoning
标准库依赖大部分都在上一章出现过. 注意 Agda 有构造子重载, ℕ
的 zero
和 suc
与 Ord
的同名, 但只要类型明确就没有问题. _↩︎_
表示存在左逆, 其强度介于等价和同构之间. MonoSequence₁
是函数对序关系的单调性.
open import Data.Empty using (⊥; ⊥-elim) open import Data.Unit using (⊤; tt) open import Data.Nat as ℕ using (ℕ; zero; suc; z≤n) open import Data.Nat.Properties as ℕ using (m≤n⇒m<n∨m≡n) open import Data.Sum using (_⊎_; inj₁; inj₂) open import Data.Product using (Σ; _×_; _,_; proj₁; proj₂; ∃-syntax) open import Function using (_∘_; _↩_; it) open import Relation.Binary.Definitions using (Monotonic₁) open import Relation.Binary.PropositionalEquality as Eq using (_≡_; _≢_; refl; sym; cong; subst)
良构
我们说序列 f : ℕ → Ord
单调, 如果 f
保持 ℕ.<
到 Ord.<
.
monoSequence : (ℕ → Ord) → Set monoSequence = Monotonic₁ ℕ._<_ _<_
由于要作为 instance参数, 形式上做了一层 record 封装.
record MonoSequence (f : ℕ → Ord) : Set where constructor wrap field unwrap : monoSequence f fm<fn : ∀ {f} → ⦃ MonoSequence f ⦄ → monoSequence f fm<fn = MonoSequence.unwrap it
由单调序列的极限构成的序数我们称为良构序数. 注意这是递归定义, 序列的每一项也要求良构. 平凡地, 零以及良构序数的后继也是良构序数.
WellFormed : Ord → Set WellFormed zero = ⊤ WellFormed (suc α) = WellFormed α WellFormed (lim f) = (∀ {n} → WellFormed (f n)) × MonoSequence f
以下 instance 用于从良构极限序数推出其序列每一项良构以及序列单调.
instance wf⇒wf : ∀ {f} → ⦃ WellFormed (lim f) ⦄ → ∀ {n} → WellFormed (f n) wf⇒wf ⦃ wf ⦄ = proj₁ wf wf⇒mono : ∀ {f} → ⦃ WellFormed (lim f) ⦄ → MonoSequence f wf⇒mono ⦃ wf ⦄ = proj₂ wf
有限序数与 ω
我们看几个简单的例子. 把 ℕ
嵌入到 Ord
可以得到有限序数 ⌜n⌝
.
⌜_⌝ : ℕ → Ord ⌜ zero ⌝ = zero ⌜ suc n ⌝ = suc ⌜ n ⌝
定义 ω
为嵌入函数 ⌜_⌝
的极限.
ω : Ord ω = lim ⌜_⌝
简单的归纳法即可证明任意有限序数良构.
⌜_⌝-wellFormed : ∀ n → WellFormed ⌜ n ⌝ ⌜ zero ⌝-wellFormed = tt ⌜ suc n ⌝-wellFormed = ⌜ n ⌝-wellFormed
引理 ⌜_⌝
是单调的.
证明 即证 m < n
蕴含 ⌜m⌝ < ⌜n⌝
. 只需考虑 n
是后继的情况, 即 m < suc n
, 拆开分别讨论 m < n
和 m = n
并用归纳假设即可. ∎
⌜⌝-monoSequence : MonoSequence ⌜_⌝ ⌜⌝-monoSequence = wrap mono where mono : monoSequence ⌜_⌝ mono {m} {suc n} (ℕ.s≤s m≤n) with (m≤n⇒m<n∨m≡n m≤n) ... | inj₁ m<n = begin-strict ⌜ m ⌝ <⟨ mono m<n ⟩ ⌜ n ⌝ <⟨ <s ⟩ suc ⌜ n ⌝ ∎ ... | inj₂ refl = begin-strict ⌜ m ⌝ <⟨ <s ⟩ suc ⌜ m ⌝ ∎
以上两条引理说明 ω
是良构序数.
ω-wellFormed : WellFormed ω ω-wellFormed = (λ {n} → ⌜ n ⌝-wellFormed) , ⌜⌝-monoSequence
ω
的性质
引理 ω
大于任意有限序数.
instance n≤ω : ∀ {n} → ⌜ n ⌝ ≤ ω n≤ω = f≤l
引理 ω
严格大于任意有限序数.
z<ω : zero < ω z<ω = <-≤-trans z<s (n≤ω {1}) s<ω : ∀ {α} → α < ω → suc α < ω s<ω {α} ((n , d) , ≤) = (suc n , inj₁ tt) , ≤-trans (s≤s ≤) s∸≤ instance n<ω : ∀ {n} → ⌜ n ⌝ < ω n<ω {zero} = z<ω n<ω {suc n} = s<ω n<ω
以下引理将 monoSequence
的 f m < f n
结论特化到 f n < f (suc n)
, 因为它在接下来的证明中经常用到.
fn<fsn : ∀ {f n} → ⦃ MonoSequence f ⦄ → f n < f (suc n) fn<fsn ⦃ wrap mono ⦄ = mono (ℕ.s≤s ℕ.≤-refl)
引理 单调序列的第 n
项不会小于 n
自身.
⌜n⌝≤fn : ∀ {f n} → ⦃ MonoSequence f ⦄ → ⌜ n ⌝ ≤ f n ⌜n⌝≤fn {f} {zero} = z≤ ⌜n⌝≤fn {f} {suc n} = begin suc ⌜ n ⌝ ≤⟨ s≤s ⌜n⌝≤fn ⟩ suc (f n) ≤⟨ <⇒s≤ fn<fsn ⟩ f (suc n) ∎
我们称单调序列的极限为单调极限序数, 它比良构极限序数更宽泛, 但足以证明一些良好的性质. 如:
引理 ω
是最小的单调极限序数.
ω≤l : ∀ {f} → ⦃ MonoSequence f ⦄ → ω ≤ lim f ω≤l = l≤ λ n → ≤f⇒≤l ⌜n⌝≤fn
等价性
引理 ⌜_⌝
是自然数到良构序数的单射.
⌜⌝-injective : ∀ {m n} → ⌜ m ⌝ ≡ ⌜ n ⌝ → m ≡ n ⌜⌝-injective {zero} {zero} eq = refl ⌜⌝-injective {suc m} {suc n} eq = cong suc (⌜⌝-injective (suc-injective eq))
引理 小于 ω
的良构序数被 ⌜_⌝
满射.
⌜⌝-surjective : ∀ {α} → ⦃ WellFormed α ⦄ → α < ω → ∃[ n ] α ≡ ⌜ n ⌝ ⌜⌝-surjective {zero} _ = 0 , refl ⌜⌝-surjective {suc α} s<ω with ⌜⌝-surjective (<-trans <s s<ω) ... | n , refl = suc n , refl ⌜⌝-surjective {lim f} l<ω = ⊥-elim (<⇒≱ l<ω ω≤l)
推论 小于 ω
的良构序数与自然数等价.
∃[<ω]wf↩ℕ : (∃[ α ] α < ω × WellFormed α) ↩ ℕ ∃[<ω]wf↩ℕ = record { to = λ (α , <ω , wf) → proj₁ (⌜⌝-surjective ⦃ wf ⦄ <ω) ; from = λ n → ⌜ n ⌝ , n<ω , ⌜ n ⌝-wellFormed ; to-cong = λ{ refl → refl } ; from-cong = λ{ refl → refl } ; inverseˡ = λ n → ⌜⌝-injective (sym (proj₂ (⌜⌝-surjective ⦃ ⌜ n ⌝-wellFormed ⦄ n<ω))) }
单调极限序数的性质
引理 任意单调极限序数严格大于零.
z<l : ∀ {f} → ⦃ MonoSequence f ⦄ → zero < lim f z<l = <-≤-trans z<ω ω≤l
f<l
是上一章 f≤l
的 _<_
版, 它要求 f
单调.
f<l : ∀ {f n} → ⦃ MonoSequence f ⦄ → f n < lim f f<l = <-≤-trans fn<fsn f≤l
引理 单调序列在其极限内有任意大的项.
证明
- 对于零, 我们有
f 1
大于它. - 对于后继序数
suc α
, 由归纳假设我们有f n
大于α
, 由传递性有f (suc n)
大于suc α
. - 对于极限序数
lim g
, 存在f n
大于lim g
. ∎
∃[n]<fn : ∀ {α f} → ⦃ MonoSequence f ⦄ → α < lim f → ∃[ n ] α < f n ∃[n]<fn {zero} {f} _ = 1 , ≤-<-trans z≤ fn<fsn ∃[n]<fn {suc α} {f} s<l with ∃[n]<fn (<-trans <s s<l) ... | n , <f = suc n , (begin-strict suc α ≤⟨ <⇒s≤ <f ⟩ f n <⟨ fn<fsn ⟩ f (suc n) ∎) ∃[n]<fn {lim g} ((n , d) , l<f) = n , d , l<f
推论 两个单调极限序数的序关系可以反演到它们的序列项.
证明 由 lim f ≤ lim g
有 f n < f (suc n) ≤ lim g
, 套入上一条即得. ∎
module _ {f g} ⦃ mf : MonoSequence f ⦄ ⦃ mg : MonoSequence g ⦄ where ∃[m]fn<gm : lim f ≤ lim g → ∀ n → ∃[ m ] f n < g m ∃[m]fn<gm (l≤ fn≤l) n = ∃[n]<fn (begin-strict f n <⟨ fn<fsn ⟩ f (suc n) ≤⟨ fn≤l (suc n) ⟩ lim g ∎)
推论 可以将 s<ω
的结论一般化到任意单调极限序数.
证明 由 ∃[n]<fn
, 存在 n
使得 α < f n
, 即 suc α ≤ f n
, 又 f n < f (suc n) < lim f
, 由传递性即证. ∎
<l⇒s<l : ∀ {α f} → ⦃ MonoSequence f ⦄ → α < lim f → suc α < lim f <l⇒s<l {α} {f} ⦃ mono ⦄ < with ∃[n]<fn < ... | n , <f = begin-strict suc α ≤⟨ <⇒s≤ <f ⟩ f n <⟨ f<l ⟩ lim f ∎
引理 上一条的逆否命题成立.
证明 与 ∃[m]fn<gm
类似的思路. ∎
l≤s⇒l≤ : ∀ {f α} → ⦃ MonoSequence f ⦄ → lim f ≤ suc α → lim f ≤ α l≤s⇒l≤ {f} {α} ⦃ mono ⦄ (l≤ fn≤s) = l≤ λ n → <s⇒≤ (begin-strict f n <⟨ fn<fsn ⟩ f (suc n) ≤⟨ fn≤s (suc n) ⟩ suc α ∎)
推论 后继无限序数的直接前驱也是无限序数.
证明 这是上一条的直接推论. ∎
ω≤s⇒ω≤ : ∀ {α} → ω ≤ suc α → ω ≤ α ω≤s⇒ω≤ ω≤s = l≤s⇒l≤ ⦃ ⌜⌝-monoSequence ⦄ ω≤s
≤-单调
还有一种更弱的单调序列, 叫做非严格单调.
≤-monoSequence : (ℕ → Ord) → Set ≤-monoSequence = Monotonic₁ ℕ._≤_ _≤_
事实 非严格单调蕴含严格单调.
<⇒≤-mono : ∀ {f} → ⦃ MonoSequence f ⦄ → ≤-monoSequence f <⇒≤-mono ⦃ wrap mono ⦄ ≤ with m≤n⇒m<n∨m≡n ≤ ... | inj₁ < = <⇒≤ (mono <) ... | inj₂ refl = ≤-refl
事实 非严格单调序列的极限与起始无关.
证明 这可看作是上一章 l≈ls
的推广, 用类似思路可证. ∎
module _ {f h} (≤-mono : ≤-monoSequence f) (incr : ∀ n → n ℕ.< h n) where l≈l∘ : lim f ≈ lim (f ∘ h) l≈l∘ = l≤ (λ { ℕ.zero → ≤f⇒≤l {n = 0} (≤-mono z≤n) ; (ℕ.suc n) → ≤f⇒≤l (≤-mono (incr n)) }) , l≤ λ n → ≤f⇒≤l (≤-mono (ℕ.<⇒≤ (incr (h n))))
良构序数的性质
良构序数允许我们建立内涵等词与序关系的联系. 如:
引理 非零良构序数大于零.
≢z⇒>z : ∀ {α} → ⦃ WellFormed α ⦄ → α ≢ zero → α > zero ≢z⇒>z {zero} z≢z = ⊥-elim (z≢z refl) ≢z⇒>z {suc α} _ = inj₁ tt , z≤ ≢z⇒>z {lim f} _ = z<l
引理 外延等于零的良构序数就是零.
≈z⇒≡z : ∀ {α} → ⦃ WellFormed α ⦄ → α ≈ zero → α ≡ zero ≈z⇒≡z {zero} _ = refl ≈z⇒≡z {suc α} (s≤z , _) = ⊥-elim (s≰z s≤z) ≈z⇒≡z {lim f} (l≤z , _) = ⊥-elim (<⇒≱ z<l l≤z)
引理 小于等于零的良构序数就是零.
≤z⇒≡z : ∀ {α} → ⦃ WellFormed α ⦄ → α ≤ zero → α ≡ zero ≤z⇒≡z ≤z = ≈z⇒≡z (≤z , z≤)
良构序数还允许我们证明貌似要排中律才能得到的结果. 如:
引理 良构序数要么是零, 要么大于零.
≡z⊎>z : ∀ α → ⦃ WellFormed α ⦄ → α ≡ zero ⊎ α > zero ≡z⊎>z zero = inj₁ refl ≡z⊎>z (suc α) = inj₂ z<s ≡z⊎>z (lim f) = inj₂ (z<l)
引理 良构序数要么有限, 要么无限.
<ω⊎≥ω : ∀ α → ⦃ WellFormed α ⦄ → α < ω ⊎ α ≥ ω <ω⊎≥ω zero = inj₁ z<ω <ω⊎≥ω (suc α) with <ω⊎≥ω α ... | inj₁ <ω = inj₁ (s<ω <ω) ... | inj₂ ≥ω = inj₂ (≤⇒≤s ≥ω) <ω⊎≥ω (lim f) = inj₂ ω≤l
经典序数
在良构序数的基础上加入排中律可以得到经典序数, 可证 _≤_
的线序性. 这部分内容与主线无关, 且非 --safe
, 我们把它放在了独立的一章.