haar_lib/algebra/semiring/
mod.rs1pub mod add_mul;
4pub mod add_mul_mod;
5pub mod max_add;
6pub mod min_add;
7pub mod xor_and;
8
9pub trait Semiring {
11 type Element;
13 fn zero(&self) -> Self::Element;
15 fn one(&self) -> Self::Element;
17 fn add(&self, a: Self::Element, b: Self::Element) -> Self::Element;
19 fn mul(&self, a: Self::Element, b: Self::Element) -> Self::Element;
21 fn times(&self, a: Self::Element, n: u64) -> Self::Element;
23}
24
25pub trait Ring: Semiring {
27 fn neg(&self, a: Self::Element) -> Self::Element;
29 fn sub(&self, a: Self::Element, b: Self::Element) -> Self::Element {
31 self.add(a, self.neg(b))
32 }
33}
34
35pub trait Field: Ring {
37 fn inv(&self, a: Self::Element) -> Self::Element;
39 fn div(&self, a: Self::Element, b: Self::Element) -> Self::Element {
41 self.mul(a, self.inv(b))
42 }
43}