luna-generic
本手册记录 Luna-Flow/luna-generic 计划中的 v0.4.0 版本。
概览
luna-generic 为 Luna 项目提供通用代数 trait 与默认数值类型实例。
当前版本的重点有三项:
FromNat与FromInteger以目标侧 trait 的形式描述从 ℕ、ℤ 出发的唯一同态。Integral是 ℤ 或其商 ℤ/2^k,normalize必须是其典范映射的截面。lift_to与Section把“选取代表元”与同态区分开。
安装
moon add Luna-Flow/luna-generic@0.4.0
然后在你的 moon.pkg 中导入 "Luna-Flow/luna-generic"。本包需要 MoonBit 工具链 0.10 或更新版本(moonc ≥ 0.10)。
页面
本仓库是位于 src 的一个 MoonBit 包,文档中称为 core。它的证书子系统 Hom 与 Section 有自己的页面,称为 hom。
| 部分 | 教程 | API | 设计 |
|---|---|---|---|
core:trait、转换、实例 | 教程 | API | 设计 |
hom:同态与截面 | 教程 | API | 设计 |
导出 Trait
AddMonoid,MulMonoidAddGroup,MulGroupSemiring、Ring、Field(可交换:)FromNat,FromIntegerIntegral,NatNum- 已废弃:
NatHomomorphism、IntegralHomomorphism
导出操作与默认类型
- 操作 trait:
One,Zero,Inverse,Conjugate - 默认数值类型:
Int,Int16,Int64,UInt,UInt16,UInt64,BigInt,Float,Double
整数模型
Integral覆盖有符号整数、无符号整数以及BigIntNat涵盖代表元非负的整数类型:UInt、UInt16与UInt64- 定宽整数是 ℤ/2^k;
FromInteger::from_integer按模 2^k 约化 Integral::normalize以BigInt形式选出一个值的代表元,且from_integer(normalize(x)) == x- 无符号整数实例只到
Semiring
转换
FromInteger::from_integer是从 ℤ 出发的典范映射:对BigInt精确,对定宽整数取模,对Float与Double舍入lift_to(x)提升到代表元后映入目标;它是函数,不是同态NatHomomorphism::from_nat与IntegralHomomorphism::from_integral已废弃,请改用FromNat、FromInteger与lift_to
广义同态
Hom[S, A, B]:保持签名S的映射证书,只能经由Hom::postulate(产生证明义务)、典范映射Hom::from_integer或推理规则构造Section[S, Q, A]:证明一个提升从商的每个类中恰好选出一个代表元的证书;Section::of_integral是整数类型的典范截面- 签名标签:
AddMonoidSig、MulMonoidSig、AddGroupSig、SemiringSig、RingSig - 代数字典
Algebra[S, A]、运算Op[A]、积类型Prod[A, B]、约化见证Reduct[S, T] Hom::check/Hom::check_by以样本测试同态律,支持严格、lax 与近似三种强度- 详见 hom API、教程、设计
接下来读什么
core 教程基于这些 trait 编写小型泛型算法;core API列出所有导出的 trait 与实例;core 设计说明层级与转换为何如此设计。
- 初次接触本包:先读 core 教程,再读 hom 教程。
- 在库中使用:把 core API 与 hom API 放在手边;每个 trait 都列出了实例必须满足的定律。
- 参与贡献:在修改 trait 或添加推理规则之前,请阅读两份设计页面 core 与 hom。
校验
建议的发布前检查:
moon check
moon test