Agda大序数(5) 序数算术

Agda大序数(5) 序数算术

交流Q群: 893531731
目录: NonWellFormed.html
本文源码: Arithmetic.lagda.md
高亮渲染: Arithmetic.html

本章打开了 实验性有损合一化 特性, 它可以减少显式标记隐式参数的需要, 而且跟 --safe 是兼容的. 当然它也有一些缺点, 具体这里不会展开.

{-# OPTIONS --without-K --safe --experimental-lossy-unification #-}

module NonWellFormed.Arithmetic where

前置

本章在内容上延续前四章.

open import NonWellFormed.Ordinal
open import NonWellFormed.WellFormed
open import NonWellFormed.Function
open import NonWellFormed.Recursion

以下标准库依赖在前几章都出现过.

open import Level using (0ℓ)
open import Data.Nat as  using (; zero; suc)
import Data.Nat.Properties as 
open import Data.Unit using (tt)
open import Data.Product using (Σ; _×_; _,_; proj₁; proj₂)
open import Function using (id; λ-)
open import Relation.Binary using (_Preserves_⟶_)
open Relation.Binary.Tri
open import Relation.Binary.PropositionalEquality as Eq using (_≡_; refl; cong)

本章需要 ≤-Reasoning≡-Reasoning 两套推理. 由于 step-≡ 对应的 syntax 重名, 我们加上短模块名进行区分: ≡.≡⟨⟩, ≤.≡⟨⟩.

open module  = Eq.≡-Reasoning renaming
  ( begin_          to begin-propeq_
  ; _∎              to _◼)
open module  = NonWellFormed.Ordinal.≤-Reasoning renaming
  ( begin-equality_ to begin-eq_
  ; begin_          to begin-nonstrict_)

本章需要谈论序数上的代数结构.

open import Algebra.Bundles
open import Algebra.Morphism
open import Algebra.Definitions {A = Ord} _≈_
open import Algebra.Structures  {A = Ord} _≈_

序数算术

我们引入序数的加法, 乘法和幂运算.

infixl 6 _+_
infixl 7 _*_
infix 8 _^_

按序数理论的惯例我们用右边的数作为递归次数, 于是加法定义为对左边的数取右边的数那么多次后继. 这与 Agda 的自然数加法正好相反.

_+_ : Ord  Ord  Ord
α + β = rec suc from α by β

由于序数算术不满足交换律, 中缀算符的左右两边所扮演的角色是不对等的. 一旦选取了加法的方向, 乘法和幂运算所递归的函数也随即确定, 即为 _+_*. 相反的方向 (+_*_) 性质会很差, 具体我们后面会考察.

_*_ : Ord  Ord  Ord
α * β = rec (_+ α) from  0  by β

_^_ : Ord  Ord  Ord
α ^ β = rec (_* α) from  1  by β

加法

_+_ 的定义立即有

_ :  {α}  α + zero  α
_ = refl

_ :  {α β}  α + suc β  suc (α + β)
_ = refl

_ :  {α f}  α + lim f  lim λ n  α + f n
_ = refl

有限序数

如所期望的那样, 我们有序数算术版的一加一等于二.

_ :  1  +  1    2 
_ = refl

一般地, 我们有

事实 有限序数加法与自然数加法等价.

⌜⌝+⌜⌝≡⌜+⌝ :  m n   m  +  n    m ℕ.+ n 
⌜⌝+⌜⌝≡⌜+⌝ m zero      = begin-propeq
   m  +  0          ≡.≡⟨⟩
   m                  ≡.≡˘⟨ cong ⌜_⌝ (ℕ.+-identityʳ m) 
   m ℕ.+ 0            
⌜⌝+⌜⌝≡⌜+⌝ m (suc n)   = begin-propeq
   m  + suc  n      ≡.≡⟨⟩
  suc ( m  +  n )   ≡.≡⟨ cong suc (⌜⌝+⌜⌝≡⌜+⌝ m n) 
  suc  m ℕ.+ n        ≡.≡˘⟨ cong ⌜_⌝ (ℕ.+-suc m n) 
   m ℕ.+ suc n        

运算律

我们接着考察序数加法的一般性质.

引理 序数加法满足结合律.

+-assoc : Associative _+_
+-assoc _ _ zero    = ≈-refl
+-assoc α β (suc γ) = s≈s (+-assoc α β γ)
+-assoc α β (lim f) = l≈l (+-assoc α β (f _))

引理 ⌜ 0 ⌝ 是序数加法的幺元.

+-identityˡ : LeftIdentity  0  _+_
+-identityˡ zero    = ≈-refl
+-identityˡ (suc α) = s≈s (+-identityˡ α)
+-identityˡ (lim f) = l≈l (+-identityˡ (f _))

+-identityʳ : RightIdentity  0  _+_
+-identityʳ = λ- ≈-refl

+-identity : Identity  0  _+_
+-identity = +-identityˡ , +-identityʳ

序数加法没有交换律, 反例如下.

_ : ω +  1   suc ω
_ = refl

1+ω≈ω :  1  + ω  ω
1+ω≈ω =                     begin-eq
  lim  n   1  +  n ) ≈⟨ l≈l (≡⇒≈ (⌜⌝+⌜⌝≡⌜+⌝ 1 _)) 
  lim  n   1 ℕ.+ n )   ≈˘⟨ l≈ls ≤s 
  lim  n   n )         

增长性, 单调性与合同性

由上一章超限递归的基本性质立即得到序数加法的增长性和单调性.

module _ (α) where

  +-incrʳ-≤ : ≤-increasing (_+ α)
  +-incrʳ-≤ β = rec-from-incr-≤ α (λ- ≤s) β

  +-incrˡ-≤ : ≤-increasing (α +_)
  +-incrˡ-≤ β = rec-by-incr-≤ s≤s (λ- <s) β

  +-incrʳ-< : α >  0   <-increasing (_+ α)
  +-incrʳ-< >z β = rec-from-incr-< >z s≤s (λ- <s) β

  +-monoˡ-≤ : ≤-monotonic (_+ α)
  +-monoˡ-≤  = rec-from-mono-≤ α s≤s 

  +-monoʳ-≤ : ≤-monotonic (α +_)
  +-monoʳ-≤  = rec-by-mono-≤ s≤s (λ- ≤s) 

  +-monoʳ-< : <-monotonic (α +_ )
  +-monoʳ-< < = rec-by-mono-< s≤s (λ- <s) <

注意 只有 _+ 是强增长的, +_ 不保证强增长. 这就是我们在乘法的定义中使用 _+ 的原因.

+-monoˡ-≤ 以及 +-monoʳ-≤ 立即得到 _+_ 的合同性 (congruence).

+-congˡ : LeftCongruent _+_
+-congˡ {α} ( , ) = +-monoʳ-≤ α  , +-monoʳ-≤ α 

+-congʳ : RightCongruent _+_
+-congʳ {α} ( , ) = +-monoˡ-≤ α  , +-monoˡ-≤ α 

+-cong : Congruent₂ _+_
+-cong {α} {β} {γ} {δ} α≈β γ≈δ = begin-eq
  α + γ ≈⟨ +-congˡ γ≈δ 
  α + δ ≈⟨ +-congʳ α≈β 
  β + δ 

代数结构

定理 序数加法构成原群, 半群和幺半群.

+-isMagma : IsMagma _+_
+-isMagma = record
  { isEquivalence = ≈-isEquivalence
  ; ∙-cong        = +-cong
  }

+-isSemigroup : IsSemigroup _+_
+-isSemigroup = record
  { isMagma = +-isMagma
  ; assoc   = +-assoc
  }

+-0-isMonoid : IsMonoid _+_  0 
+-0-isMonoid = record
  { isSemigroup = +-isSemigroup
  ; identity    = +-identity
  }
+-magma : Magma 0ℓ 0ℓ
+-magma = record
  { isMagma = +-isMagma
  }

+-semigroup : Semigroup 0ℓ 0ℓ
+-semigroup = record
  { isSemigroup = +-isSemigroup
  }

+-0-monoid : Monoid 0ℓ 0ℓ
+-0-monoid = record
  { isMonoid = +-0-isMonoid
  }

乘法

_*_ 的定义立即有

_ :  {α}  α * zero  zero
_ = refl

_ :  {α β}  α * suc β  α * β + α
_ = refl

_ :  {α f}  α * lim f  lim λ n  α * f n
_ = refl

有限序数

事实 有限序数乘法与自然数乘法等价.

⌜⌝*⌜⌝≡⌜*⌝ :  m n   m  *  n    m ℕ.* n 
⌜⌝*⌜⌝≡⌜*⌝ m zero        = begin-propeq
   m  *  0            ≡.≡˘⟨ cong ⌜_⌝ (ℕ.*-zeroʳ m) 
   m ℕ.* 0              
⌜⌝*⌜⌝≡⌜*⌝ m (suc n)     = begin-propeq
   m  * suc  n        ≡.≡⟨⟩
   m  *  n  +  m    ≡.≡⟨ cong (_+  m ) (⌜⌝*⌜⌝≡⌜*⌝ m n) 
   m ℕ.* n  +  m      ≡.≡⟨ ⌜⌝+⌜⌝≡⌜+⌝ (m ℕ.* n) m 
   m ℕ.* n ℕ.+ m        ≡.≡⟨ cong ⌜_⌝ (ℕ.+-comm (m ℕ.* n) m) 
   m ℕ.+ m ℕ.* n        ≡.≡˘⟨ cong ⌜_⌝ (ℕ.*-suc m n) 
   m ℕ.* suc n          

运算律

引理 ⌜ 1 ⌝ 是序数乘法的幺元.

*-identityˡ : LeftIdentity  1  _*_
*-identityˡ zero    = ≈-refl
*-identityˡ (suc α) = begin-eq
   1  * suc α       ≤.≡⟨⟩
  suc ( 1  * α)     ≈⟨ s≈s (*-identityˡ α) 
  suc α               
*-identityˡ (lim f) = l≈l (*-identityˡ (f _))

*-identityʳ : RightIdentity  1  _*_
*-identityʳ α = begin-eq
  α *  1      ≤.≡⟨⟩
  α *  0  + α ≈⟨ +-identityˡ α 
  α             

*-identity : Identity  1  _*_
*-identity = *-identityˡ , *-identityʳ

引理 ⌜ 0 ⌝ 是序数乘法的零元.

*-zeroˡ : LeftZero  0  _*_
*-zeroˡ zero      = ≈-refl
*-zeroˡ (suc α)   = begin-eq
   0  * suc α     ≤.≡⟨⟩
   0  * α +  0  ≈⟨ +-identityʳ ( 0  * α) 
   0  * α         ≈⟨ *-zeroˡ α 
   0              
*-zeroˡ (lim f) = l≤  n  proj₁ (*-zeroˡ (f n))) , z≤

*-zeroʳ : RightZero  0  _*_
*-zeroʳ _ = ≈-refl

*-zero : Zero  0  _*_
*-zero = *-zeroˡ , *-zeroʳ

引理 序数乘法对序数加法满足左分配律.

*-distribˡ-+ : _*_ DistributesOverˡ _+_
*-distribˡ-+ α β zero     = begin-eq
  α * (β +  0 )           ≤.≡⟨⟩
  α * β +  0              ≈˘⟨ +-congˡ (*-zeroʳ (α * β)) 
  α * β + α *  0          
*-distribˡ-+ α β (suc γ)  = begin-eq
  α * (β + suc γ)           ≤.≡⟨⟩
  α * (β + γ) + α           ≈⟨ +-congʳ (*-distribˡ-+ α β γ) 
  α * β + α * γ + α         ≈⟨ +-assoc (α * β) (α * γ) α 
  α * β + (α * γ + α)       ≤.≡⟨⟩
  α * β + (α * suc γ)       
*-distribˡ-+ α β (lim f)  = l≈l (*-distribˡ-+ α β (f _))

引理 序数乘法满足结合律.

*-assoc : Associative _*_
*-assoc α β zero    = ≈-refl
*-assoc α β (suc γ) = begin-eq
  α * β * suc γ       ≤.≡⟨⟩
  α * β * γ + α * β   ≈⟨ +-congʳ {α * β} (*-assoc α β γ) 
  α * (β * γ) + α * β ≈˘⟨ *-distribˡ-+ α (β * γ) β 
  α * (β * γ + β)     ≤.≡⟨⟩
  α * (β * suc γ)     
*-assoc α β (lim f) = l≈l (*-assoc α β (f _))

增长性, 单调性与合同性

序数乘法的单调性等需要配合序数加法的相关性质, 且需要注意运算方向和证明顺序都与加法有所不同, 且有些性质需要额外的前提.

首先是从 *_ 的 ≤-单调性推出 _* 的弱增长性.

*-monoʳ-≤ :  α  ≤-monotonic (α *_)
*-monoʳ-≤ α = rec-by-mono-≤ (+-monoˡ-≤ α) (+-incrʳ-≤ α)

*-incrʳ-≤ :  α   α   1    ≤-increasing (_* α)
*-incrʳ-≤ α  α≥1  β = begin-nonstrict
  β                     ≈˘⟨ *-identityʳ β 
  β *  1              ≤⟨ *-monoʳ-≤ β α≥1 
  β * α                 

然后, 类似地, 从 *_ 的 <-单调性推出 _* 的强增长性.

*-monoʳ-< :  α   α >  0    <-monotonic (α *_)
*-monoʳ-< α  α>0  = rec-by-mono-< (+-monoˡ-≤ α) (+-incrʳ-< α α>0)

*-incrʳ-< :  α β   α >  0     β >  1    α < α * β
*-incrʳ-< α β  _   β>1  = begin-strict
  α                         ≈˘⟨ *-identityʳ α 
  α *  1                  <⟨ *-monoʳ-< α β>1 
  α * β                     

注意 只有 _* 是强增长的, *_ 不保证强增长. 这就是我们在幂运算的定义中使用 _* 的原因.

接着是从 _* 的 ≤-单调性推出 *_ 的弱增长性. 注意前者已经无法使用超限递归的相关引理了, 需要直接用归纳法证明.

*-monoˡ-≤ :  α  ≤-monotonic (_* α)
*-monoˡ-≤ zero            _ = z≤
*-monoˡ-≤ (suc α) {β} {γ}  = begin-nonstrict
  β * suc α                   ≤.≡⟨⟩
  β * α + β                   ≤⟨ +-monoʳ-≤ (β * α)  
  β * α + γ                   ≤⟨ +-monoˡ-≤ γ (*-monoˡ-≤ α ) 
  γ * α + γ                   ≤.≡⟨⟩
  γ * suc α                   
*-monoˡ-≤ (lim f) {β} {γ}  = l≤ λ n  ≤f⇒≤l (*-monoˡ-≤ (f n) )

*-incrˡ-≤ :  α   α   1    ≤-increasing (α *_)
*-incrˡ-≤ α  α≥1  β = begin-nonstrict
  β                     ≈˘⟨ *-identityˡ β 
   1  * β             ≤⟨ *-monoˡ-≤ β α≥1 
  α * β                 

最后, 我们用 ≤-单调性证明合同性.

*-congˡ : LeftCongruent _*_
*-congˡ {α} ( , ) = *-monoʳ-≤ α  , *-monoʳ-≤ α 

*-congʳ : RightCongruent _*_
*-congʳ {α} ( , ) = *-monoˡ-≤ α  , *-monoˡ-≤ α 

*-cong : Congruent₂ _*_
*-cong {α} {β} {γ} {δ} α≈β γ≈δ = begin-eq
  α * γ ≈⟨ *-congˡ γ≈δ 
  α * δ ≈⟨ *-congʳ α≈β 
  β * δ 

代数结构

定理 序数乘法构成原群, 半群和幺半群.

*-isMagma : IsMagma _*_
*-isMagma = record
  { isEquivalence = ≈-isEquivalence
  ; ∙-cong        = *-cong
  }

*-isSemigroup : IsSemigroup _*_
*-isSemigroup = record
  { isMagma = *-isMagma
  ; assoc   = *-assoc
  }

*-1-isMonoid : IsMonoid _*_  1 
*-1-isMonoid = record
  { isSemigroup = *-isSemigroup
  ; identity    = *-identity
  }
*-magma : Magma 0ℓ 0ℓ
*-magma = record
  { isMagma = *-isMagma
  }

*-semigroup : Semigroup 0ℓ 0ℓ
*-semigroup = record
  { isSemigroup = *-isSemigroup
  }

*-1-monoid : Monoid 0ℓ 0ℓ
*-1-monoid = record
  { isMonoid = *-1-isMonoid
  }

其他引理

α*2≈α+α :  α  α *  2   α + α
α*2≈α+α α     = begin-eq
  α *  2      ≤.≡⟨⟩
  α *  1  + α ≈⟨ +-congʳ (*-identityʳ α) 
  α + α         

幂运算

_^_ 的定义立即有

_ :  {α}  α ^ zero   1 
_ = refl

_ :  {α β}  α ^ suc β  α ^ β * α
_ = refl

_ :  {α f}  α ^ lim f  lim λ n  α ^ f n
_ = refl

有限序数

事实 有限序数幂运算与自然数幂运算等价.

⌜⌝^⌜⌝≡⌜^⌝ :  m n   m  ^  n    m ℕ.^ n 
⌜⌝^⌜⌝≡⌜^⌝ m zero      = refl
⌜⌝^⌜⌝≡⌜^⌝ m (suc n)   = begin-propeq
   m  ^ suc  n      ≡.≡⟨⟩
   m  ^  n  *  m  ≡.≡⟨ cong (_*  m ) (⌜⌝^⌜⌝≡⌜^⌝ m n) 
   m ℕ.^ n  *  m    ≡.≡⟨ ⌜⌝*⌜⌝≡⌜*⌝ (m ℕ.^ n) m 
   m ℕ.^ n ℕ.* m      ≡.≡⟨ cong ⌜_⌝ (ℕ.*-comm (m ℕ.^ n) m) 
   m ℕ.^ suc n        

运算律

引理 ⌜ 1 ⌝ 是序数幂运算的右幺元和左零元.

^-identityʳ : RightIdentity  1  _^_
^-identityʳ α = begin-eq
  α ^  1      ≤.≡⟨⟩
  α ^  0  * α ≈⟨ *-identityˡ α 
  α             

^-zeroˡ : LeftZero  1  _^_
^-zeroˡ zero      = ≈-refl
^-zeroˡ (suc α)   = begin-eq
   1  ^ suc α     ≤.≡⟨⟩
   1  ^ α *  1  ≈⟨ *-identityʳ _ 
   1  ^ α         ≈⟨ ^-zeroˡ α 
   1              
^-zeroˡ (lim f) = l≤  n  proj₁ (^-zeroˡ (f n)))
                , ≤f⇒≤l (proj₂ (^-zeroˡ (f 1)))

零的幂比较奇怪. 首先零的零次幂是一, 这个由定义立即可得. 然后零的后继次幂是乘法右零元的特例.

_ :  α   0  ^ suc α   0 
_ = *-zeroʳ

但是零的极限次幂在我们的构筑中不是良构序数. 例如 zero ^ ω 是如下序列的极限.

zero ^ ⌜ 0 ⌝, zero ^ ⌜ 1 ⌝, zero ^ ⌜ 2 ⌝, …

⌜ 1 ⌝, ⌜ 0 ⌝, ⌜ 0 ⌝, …

当然我们可以无视首项, 把该序列的极限视作零, 就像有些书那样. 这里不做这种处理, 也没有必要.

引理 幂运算对加法满足左分配律, 只不过分配之后转换成了乘法.

^-distribˡ-+-* :  α β γ  α ^ (β + γ)  α ^ β * α ^ γ
^-distribˡ-+-* α β zero    = begin-eq
  α ^ (β + zero)             ≈˘⟨ *-identityʳ _ 
  α ^ β *  1               ≈⟨ *-congˡ (≈-refl { 1 }) 
  α ^ β * α ^  0           
^-distribˡ-+-* α β (suc γ) = begin-eq
  α ^ (β + suc γ)            ≤.≡⟨⟩
  α ^ (β + γ) * α            ≈⟨ *-congʳ (^-distribˡ-+-* α β γ) 
  α ^ β * α ^ γ * α          ≈⟨ *-assoc _ _ _ 
  α ^ β * (α ^ γ * α)        ≈⟨ *-congˡ ≈-refl 
  α ^ β * (α ^ suc γ)        
^-distribˡ-+-* α β (lim f) = l≈l (^-distribˡ-+-* α β (f _))

引理 幂运算满足结合律, 只不过结合之后转换成了乘法.

^-*-assoc :  α β γ  (α ^ β) ^ γ  α ^ (β * γ)
^-*-assoc α β zero    = ≈-refl
^-*-assoc α β (suc γ) = begin-eq
  (α ^ β) ^ suc γ       ≤.≡⟨⟩
  (α ^ β) ^ γ * α ^ β   ≈⟨ *-congʳ (^-*-assoc α β γ) 
  α ^ (β * γ) * α ^ β   ≈˘⟨ ^-distribˡ-+-* α _ _ 
  α ^ (β * γ + β)       ≤.≡⟨⟩
  α ^ (β * suc γ)       
^-*-assoc α β (lim f) = l≈l (^-*-assoc α β (f _))

增长性, 单调性与合同性

幂运算的单调性等性质比乘法的更不规整, 需要更强的额外前提.

首先相对简单的是从 ^_ 的 ≤-单调性到 _^ 的弱增长性.

^-monoʳ-≤ :  α   α   1    ≤-monotonic (α ^_)
^-monoʳ-≤ α = rec-by-mono-≤ (*-monoˡ-≤ α) (*-incrʳ-≤ α)

^-incrʳ-≤ :  α β   α   1    β   1   α  α ^ β
^-incrʳ-≤ α β β≥1 = begin-nonstrict
  α                 ≈˘⟨ ^-identityʳ α 
  α ^  1          ≤⟨ ^-monoʳ-≤ α β≥1 
  α ^ β             

引理 底数不为零的幂运算结果大于零.

^>0 :  {α β}   α   1    α ^ β >  0 
^>0 {α} {β} = begin-strict
   0        <⟨ <s 
   1        ≤.≡⟨⟩
  α ^  0    ≤⟨ ^-monoʳ-≤ α z≤ 
  α ^ β       

^_ 的 <-单调性无法从 rec-by-mono-< 推出, 但可以直接用归纳法证明.

^-monoʳ-< :  α   α >  1    <-monotonic (α ^_)
^-monoʳ-< α  α>1  {β} {suc γ} < =
  let instance α≥1 = <⇒≤ α>1 in begin-strict
  α ^ β                         ≤⟨ ^-monoʳ-≤ α (<s⇒≤ <) 
  α ^ γ                         <⟨ *-incrʳ-< (α ^ γ) α  ^>0  
  α ^ γ * α                     ≤.≡⟨⟩
  α ^ suc γ                     
^-monoʳ-< α {β} {lim f} ((n , d) , ≤f) = begin-strict
  α ^ β                         <⟨ ^-monoʳ-< α (d , ≤f) 
  α ^ f n                       ≤⟨ f≤l 
  α ^ lim f                     

然后容易推出 _^ 的强增长性.

^-incrʳ-< :  α β   α >  1    β >  1   α < α ^ β
^-incrʳ-< α β β>1 = begin-strict
  α                 ≈˘⟨ ^-identityʳ _ 
  α ^  1          <⟨ ^-monoʳ-< α β>1 
  α ^ β             

注意 只有 _^ 是强增长的, ^_ 不保证强增长. 我们会在下一章展示 ^_ 定义的迭代幂次会遇到不动点.

_^ 的 ≤-单调性无法使用超限递归的相关引理, 需要用归纳法证明.

^-monoˡ-≤ :  α  ≤-monotonic (_^ α)
^-monoˡ-≤ zero            _   = ≤-refl
^-monoˡ-≤ (suc α) {β} {γ} β≤γ = begin-nonstrict
  β ^ suc α                     ≤.≡⟨⟩
  β ^ α * β                     ≤⟨ *-monoʳ-≤ _ β≤γ 
  β ^ α * γ                     ≤⟨ *-monoˡ-≤ _ (^-monoˡ-≤ _ β≤γ) 
  γ ^ α * γ                     
^-monoˡ-≤ (lim f) {β} {γ} β≤γ = l≤ λ n  ≤f⇒≤l (^-monoˡ-≤ (f n) β≤γ)

^_ 的弱增长性又是个特殊的性质, 它无法从 ^-monoˡ-≤ 推出, 但可以直接用归纳法证明.

^-incrˡ-≤ :  α β   β >  1    α  β ^ α
^-incrˡ-≤ zero    β         = ≤s
^-incrˡ-≤ (suc α) β  β>1   = begin-nonstrict
  suc α                       ≤⟨ s≤s (^-incrˡ-≤ α β) 
  suc (β ^ α)                 ≤.≡⟨⟩
  β ^ α +  1                ≤⟨ +-monoʳ-≤ (β ^ α) (<⇒s≤ (^>0  <⇒≤ β>1 ⦄)) 
  β ^ α + β ^ α               ≈˘⟨ α*2≈α+α _ 
  β ^ α *  2                ≤⟨ *-monoʳ-≤ (β ^ α) (<⇒s≤ β>1) 
  β ^ α * β                   ≤.≡⟨⟩
  β ^ suc α                   
^-incrˡ-≤ (lim f) β         = l≤l λ n  begin-nonstrict
  f n                         ≤⟨ ^-incrˡ-≤ (f n) β 
  β ^ f n                     

幂运算的合同性只有半边是无条件的, 另一半要求底数不为零.

^-congʳ : RightCongruent _^_
^-congʳ {α} ( , ) = ^-monoˡ-≤ α  , ^-monoˡ-≤ α 

^-congˡ :  {α}   α   1    (α ^_) Preserves _≈_  _≈_
^-congˡ {α} ( , ) = ^-monoʳ-≤ α  , ^-monoʳ-≤ α 

代数结构

定理 底数不为零的 ^_ 是加法半群到乘法半群的群同态, 也是加法幺半群到乘法幺半群的群同态.

^-semigroup-morphism :  {α}   α   1    (α ^_) Is +-semigroup -Semigroup⟶ *-semigroup
^-semigroup-morphism = record
  { ⟦⟧-cong = ^-congˡ
  ; ∙-homo  = ^-distribˡ-+-* _
  }

^-monoid-morphism :  {α}   α   1    (α ^_) Is +-0-monoid -Monoid⟶ *-1-monoid
^-monoid-morphism = record
  { sm-homo = ^-semigroup-morphism
  ; ε-homo  = ≈-refl
  }

序数嵌入

定理 右侧运算 +_, *_, ^_ 都是序数嵌入.

+-normal :  α  normal (α +_)
+-normal α = +-monoʳ-≤ α , +-monoʳ-< α , rec-ct

*-normal :  α   α >  0    normal (α *_)
*-normal α = *-monoʳ-≤ α , *-monoʳ-< α , rec-ct

^-normal :  α   α >  1    normal (α ^_)
^-normal α  α>1  = ^-monoʳ-≤ α  <⇒≤ α>1  , ^-monoʳ-< α , rec-ct

注意 左侧运算 _+, _*, _^ 不是序数嵌入.

保良构性

定理 右侧运算 +_, *_, ^_ 都保良构.

+-wfp :  {α}  WellFormed α  wf-preserving (α +_)
+-wfp wfα = rec-wfp wfα s≤s (λ- <s) id

*-wfp :  {α}  WellFormed α  α >  0   wf-preserving (α *_)
*-wfp {α} wfα α>0 = rec-wfp tt (+-monoˡ-≤ α) (+-incrʳ-< α α>0)  wfx  +-wfp wfx wfα)

^-wfp :  {α}  WellFormed α   α >  1    wf-preserving (α ^_)
^-wfp {α} wfα {zero} _ = tt
^-wfp {α} wfα  α>1  {suc β} wfβ = *-wfp (^-wfp wfα wfβ) (^>0  <⇒≤ α>1 ⦄) wfα
^-wfp {α} wfα {lim f} (wfn , wrap mono) = ^-wfp wfα wfn , wrap λ m<n  ^-monoʳ-< α (mono m<n)

注意 左侧运算 _+, _*, _^ 不保良构.

其他引理

引理 加法结合律和乘法结合律可以推广到任意有限元.

+-assoc-n :  α n  α + α *  n   α *  n  + α
+-assoc-n α zero      = ≈-sym (+-identityˡ α)
+-assoc-n α (suc n)   = begin-eq
  α + α * suc  n      ≤.≡⟨⟩
  α + (α *  n  + α)   ≈˘⟨ +-assoc _ _ _ 
  α + α *  n  + α     ≈⟨ +-congʳ (+-assoc-n α n) 
  α * suc  n  + α     

*-assoc-n :  α n  α * α ^  n   α ^  n  * α
*-assoc-n α zero      = begin-eq
  α *  1              ≈⟨ *-identityʳ α 
  α                     ≈˘⟨ *-identityˡ α 
   1  * α             
*-assoc-n α (suc n)   = begin-eq
  α * α ^ suc  n      ≤.≡⟨⟩
  α * (α ^  n  * α)   ≈˘⟨ *-assoc _ _ _ 
  α * α ^  n  * α     ≈⟨ *-congʳ (*-assoc-n α n) 
  α ^ suc  n  * α     

以下引理会在后续章节处理 ω 指数塔的时候用到, 其证明是迄今为止各种引理的集大成.

引理 ω的幂对加法有吸收律.

ω^-absorb-+ :  {α β}   WellFormed β   α < β  ω ^ α + ω ^ β  ω ^ β
ω^-absorb-+ {α} {suc β} α<β =
    l≤  n                    begin-nonstrict
      ω ^ α + ω ^ β *  n      ≤⟨ +-monoˡ-≤ _ (^-monoʳ-≤ ω (<s⇒≤ α<β)) 
      ω ^ β + ω ^ β *  n      ≈⟨ +-assoc-n _ _ 
      ω ^ β *  n  + ω ^ β     ≤.≡⟨⟩
      ω ^ β * suc  n          ≤⟨ *-monoʳ-≤ _ (<⇒≤ (n<ω {suc n})) 
      ω ^ β * ω                 ≤.≡⟨⟩
      ω ^ suc β                 )
  , l≤  n                    begin-nonstrict
      ω ^ β *  n              ≤⟨ +-incrˡ-≤ _ _ 
      ω ^ α + ω ^ β *  n      ≤⟨ +-monoʳ-≤ _ (*-monoʳ-≤ _ (<⇒≤ n<ω)) 
      ω ^ α + ω ^ β * ω         ≤.≡⟨⟩
      ω ^ α + ω ^ suc β         )
ω^-absorb-+ {α} {lim f}  wf  α<l with ∃[n]<fn α<l
... | (m , α<fm) = l≤ helper , l≤ λ n  ≤f⇒≤l (+-incrˡ-≤ _ _) where
  helper :  n  ω ^ α + ω ^ f n  lim  n  ω ^ f n)
  helper n with (ℕ.<-cmp m n)
  ... | tri< m<n _ _  = ≤f⇒≤l ( begin-nonstrict
        ω ^ α + ω ^ f n         ≤⟨ proj₁ (ω^-absorb-+ {β = f n} α<fn) 
        ω ^ f n                 )
    where α<fn = let (_ , wrap mono) = wf in <-trans α<fm (mono m<n)
  ... | tri≈ _ refl _ = ≤f⇒≤l ( begin-nonstrict
        ω ^ α + ω ^ f n         ≤⟨ proj₁ (ω^-absorb-+ α<fm) 
        ω ^ f n                 )
  ... | tri> _ _ n<m  = ≤f⇒≤l ( begin-nonstrict
        ω ^ α + ω ^ f n         ≤⟨ +-monoʳ-≤ _ (^-monoʳ-≤ _ fn≤fm) 
        ω ^ α + ω ^ f m         ≤⟨ proj₁ (ω^-absorb-+ α<fm) 
        ω ^ f m                 )
    where fn≤fm = let (_ , wrap mono) = wf in <⇒≤ (mono n<m)