16 个版本 (8 个破坏性更新)
0.9.0 | 2019 年 12 月 7 日 |
---|---|
0.8.0 | 2019 年 7 月 28 日 |
0.7.0 | 2019 年 5 月 15 日 |
0.4.0 | 2019 年 1 月 31 日 |
0.1.0 | 2018 年 7 月 16 日 |
596 在 数学
每月 36 次下载
145KB
2.5K SLoC
un_algebra
精选抽象代数结构的简单 Rust 实现。
概要
数学抽象代数建立在丰富的代数结构集合之上。了解这些结构可以帮助非数学家深入了解他们需要与之合作的数学实体--例如,实数、复数、向量、矩阵和排列。根据定义,这些结构必须遵守一系列 公理 和 性质,这些公理和性质反过来又为生成测试提供了丰富的资源。
un_algebra
(_un_derstanding _algebra_) 是 Rust 中所选代数结构的一个简单实现。希望它对第一次学习抽象代数概念的开发者有所帮助。目前这个软件包提供了 magma、半群、拟群、幺半群、群、环和域结构实现,以及集合上的等价和不等关系。
文档
请参阅 https://docs.rs/un_algebra
贡献
请参阅贡献指南。
安装
将 un_algebra
添加到您的 Cargo.toml 依赖项中
[dependencies]
un_algebra = "0.*.0"
稳定性
un_algebra
仍在预版本 1.0 开发中,存在许多悬而未决的设计和实现 问题。破坏性更改可能会影响软件包 API。
生产使用
un_algebra
旨在支持抽象代数结构的自学--它未针对生产环境优化。对于生产环境,我建议使用更复杂的库,如 alga。
兼容性
un_algebra
使用 2018 版本特性,但遗憾的是需要 Rust nightly,因为它使用了(实验性的)外部文档功能。
错误
我不是数学家,所以在un_algebra
中实现的各种结构和它们相应的公理可能并不完全正确。请告诉我任何错误。
公理和性质
un_algebra
中的所有结构特征都有关联的谓词函数,用于实现结构的公理。某些结构还有关联的谓词函数,用于实现结构的派生性质。
这些性质并非绝对必要,因为它们可以从公理中推导出来,但它们确实允许对特征实现进行更丰富的生成测试,尤其是那些使用浮点数的实现。
存储库的公理和性质函数被捆绑到“法则”特征中,为每个公理或相关特征关联的性质提供了通用实现。
示例
un_algebra
实现了Rust标准库中所有整数和浮点类型的相关结构特征,例如,整数类型i8
、i16
、i32
等的加法 群。
Rust标准库不支持复数(ℂ)或有理数(ℚ),所以我使用了[数]存储库中的复数和有理数类型,并实现了这两种数值类型的示例。
此外,存储库的示例目录包含了一些概念的抽象结构实现,例如,有限 域。
示例
Rust的i128
类型形成几个un_algebra
代数结构,首先是加法和乘法玛格纳(具有“包装”或模运算)
use un_algebra::prelude::*;
impl AddMagma for i128 {
fn add(&self, other: &Self) -> Self {
self.wrapping_add(other)
}
}
impl MulMagma for i128 {
fn mul(&self, other: &Self) -> Self {
self.wrapping_mul(other)
}
}
i128
也形成加法和乘法半群
impl AddSemigroup for i128 {}
impl MulSemigroup for i128 {}
以及具有一个和零作为半群单位元的加法和乘法幺半群
impl AddMonoid for i128 {
fn zero() -> Self {
0
}
}
impl MulMonoid for i128 {
fn one() -> Self {
1
}
}
i128
还形成一个加法 群和加法 交换 群(具有“包装”或模负数),但不是一个乘法 群,因为整数没有封闭的除法运算
impl AddGroup for i128 {
fn negate(&self) -> Self {
self.wrapping_neg()
}
}
impl AddComGroup for i128 {}
以及一个环和交换 环
impl Ring for i128 {}
impl CommRing for i128 {}
参考
有关每个结构和其相关公理和性质的更多背景信息,请参阅阅读文档。
许可
本项目采用MIT许可(见LICENSE.txt或https://opensource.org/licenses/MIT)。
依赖项
~4.5MB
~88K SLoC