pub enum SteenrodAlgebra {
AdemAlgebra(AdemAlgebra),
MilnorAlgebra(MilnorAlgebra),
}Variants§
AdemAlgebra(AdemAlgebra)
MilnorAlgebra(MilnorAlgebra)
Implementations§
Trait Implementations§
Source§impl Algebra for SteenrodAlgebra
impl Algebra for SteenrodAlgebra
Source§fn prefix(&self) -> &str
fn prefix(&self) -> &str
A name for the algebra to use in serialization operations. This defaults to “” for algebras that don’t care about this problem.
Source§fn magic(&self) -> u32
fn magic(&self) -> u32
A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have disasterous consequences. So we store the magic in the save files.
This defaults to 0 for other kinds of algebra that don’t care about this problem.
Source§fn prime(&self) -> ValidPrime
fn prime(&self) -> ValidPrime
Returns the prime the algebra is over.
Source§fn compute_basis(&self, __enum_dispatch_arg_0: i32)
fn compute_basis(&self, __enum_dispatch_arg_0: i32)
Computes basis elements up to and including degree.
This function must be called by users before other functions that will involve operations
at degree, so it should be used to update internal data structure in perparation
for such operations.
This function must be idempotent and cheap to call again with the same argument.
Source§fn dimension(&self, __enum_dispatch_arg_0: i32) -> usize
fn dimension(&self, __enum_dispatch_arg_0: i32) -> usize
Returns the dimension of the algebra in degree degree.
Source§fn multiply_basis_elements(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: usize,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: usize,
)
fn multiply_basis_elements( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: usize, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: usize, )
Computes the product r * s of two basis elements, and adds the
result to result.
result is not required to be aligned.
Source§fn multiply_basis_element_by_element(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: usize,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: FpSlice<'_>,
)
fn multiply_basis_element_by_element( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: usize, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: FpSlice<'_>, )
Computes the product r * s of a basis element r and a general element s, and adds the
result to result.
Neither result nor s must be aligned.
Source§fn multiply_element_by_basis_element(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: FpSlice<'_>,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: usize,
)
fn multiply_element_by_basis_element( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: FpSlice<'_>, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: usize, )
Computes the product r * s of a general element r and a basis element s, and adds the
result to result.
Neither result nor r must be aligned.
Source§fn multiply_element_by_element(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: FpSlice<'_>,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: FpSlice<'_>,
)
fn multiply_element_by_element( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: FpSlice<'_>, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: FpSlice<'_>, )
Computes the product r * s of two general elements, and adds the
result to result.
Neither result, s, nor r must be aligned.
Source§fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>
fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>
Returns a list of filtration-one elements in $Ext(k, k)$.
These are the same as indecomposable elements of the algebra.
This function returns a default list of such elements in the format
(name, degree, index) for which we want to compute products with in
the resolutions.
Source§fn basis_element_to_string(
&self,
__enum_dispatch_arg_0: i32,
__enum_dispatch_arg_1: usize,
) -> String
fn basis_element_to_string( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: usize, ) -> String
Converts a basis element into a string for display.
Source§fn basis_element_from_string(
&self,
__enum_dispatch_arg_0: &str,
) -> Option<(i32, usize)>
fn basis_element_from_string( &self, __enum_dispatch_arg_0: &str, ) -> Option<(i32, usize)>
Converts a string to a basis element. This must be a one-sided inverse inverse to
both basis_element_to_string and generator_to_string (if GeneratedAlgebra is
implemented).
If the input is invalid, the function is allowed to return None or nonsense (since it is only required to be a one-sided inverse).
Source§impl Bialgebra for SteenrodAlgebra
impl Bialgebra for SteenrodAlgebra
Source§fn coproduct(
&self,
__enum_dispatch_arg_0: i32,
__enum_dispatch_arg_1: usize,
) -> Vec<(i32, usize, i32, usize)>
fn coproduct( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: usize, ) -> Vec<(i32, usize, i32, usize)>
Computes a coproduct $\Delta(x)$, expressed as
$$ Delta(x)i = \sum_j A{ij} \otimes B_{ij}. $$
The return value is a list of these pairs of basis elements.
x must have been returned by Bialgebra::decompose().
Source§fn decompose(
&self,
__enum_dispatch_arg_0: i32,
__enum_dispatch_arg_1: usize,
) -> Vec<(i32, usize)>
fn decompose( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: usize, ) -> Vec<(i32, usize)>
Decomposes an element of the algebra into a product of elements, each of which we can compute a coproduct on efficiently.
The product is laid out such that the first element of the vector is applied to a module element first when acting on it.
This function is to be used with Bialgebra::coproduct().
This API is motivated by the fact that, in the admissible basis for the Adem algebra, an element naturally decomposes into a product of Steenrod squares, each of which has an easy coproduct formula.
Source§impl Display for SteenrodAlgebra
impl Display for SteenrodAlgebra
Source§impl From<AdemAlgebra> for SteenrodAlgebra
impl From<AdemAlgebra> for SteenrodAlgebra
Source§fn from(v: AdemAlgebra) -> SteenrodAlgebra
fn from(v: AdemAlgebra) -> SteenrodAlgebra
Source§impl From<MilnorAlgebra> for SteenrodAlgebra
impl From<MilnorAlgebra> for SteenrodAlgebra
Source§fn from(v: MilnorAlgebra) -> SteenrodAlgebra
fn from(v: MilnorAlgebra) -> SteenrodAlgebra
Source§impl GeneratedAlgebra for SteenrodAlgebra
impl GeneratedAlgebra for SteenrodAlgebra
Source§fn generators(&self, __enum_dispatch_arg_0: i32) -> Vec<usize>
fn generators(&self, __enum_dispatch_arg_0: i32) -> Vec<usize>
Return generators in degree.
Generators are specified as basis element indices in that degree. The order of the list is not important.
This method need not be fast, because they will only be performed when constructing the module, and will often only involve low dimensional elements.
Source§fn generator_to_string(
&self,
__enum_dispatch_arg_0: i32,
__enum_dispatch_arg_1: usize,
) -> String
fn generator_to_string( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: usize, ) -> String
Returns the name of a generator.
Note: idx is the index within degree’s basis, not the list returned by
GeneratedAlgebra::generators().
By default, this function will forward to Algebra::basis_element_to_string(), but
may be overridden if more concise names are available.
Source§fn decompose_basis_element(
&self,
__enum_dispatch_arg_0: i32,
__enum_dispatch_arg_1: usize,
) -> Vec<(u32, (i32, usize), (i32, usize))>
fn decompose_basis_element( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: usize, ) -> Vec<(u32, (i32, usize), (i32, usize))>
Decomposes an element into generators.
Given a basis element $A$, this function returns a list of triples $(c_i, A_i, B_i)$, such that
$$ A = \sum_i c_i A_i B_i,$$
where either ($A_i$ and $B_i$ are basis elements of strictly smaller degree than $A$), or (one of them is a generator and the other is the identity).
Combined with actions for generators, this allows us to recursively compute the action of an element on a module.
This method need not be fast, because they will only be performed when constructing the module, and will often only involve low dimensional elements.
It is invalid to supply an element that is a generator.
Source§fn generating_relations(
&self,
__enum_dispatch_arg_0: i32,
) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>
fn generating_relations( &self, __enum_dispatch_arg_0: i32, ) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>
Returns relations that the algebra wants checked to ensure the consistency of module.
Relations are encoded as general multi-degree elements which are killed in the quotient: $$ \sum_i c_i \alpha_i \beta_i = 0. $$ where $c_i$ are coefficients and $\alpha_i$ and $\beta_i$ are basis elements of arbitrary degree.
Source§impl PairAlgebra for SteenrodAlgebra
impl PairAlgebra for SteenrodAlgebra
Source§type Element = MilnorPairElement
type Element = MilnorPairElement
Source§fn p_tilde(&self) -> usize
fn p_tilde(&self) -> usize
Source§fn new_pair_element(&self, degree: i32) -> Self::Element
fn new_pair_element(&self, degree: i32) -> Self::Element
Source§fn sigma_multiply_basis(
&self,
result: &mut Self::Element,
coeff: u32,
r_degree: i32,
r_idx: usize,
s_degree: i32,
s_idx: usize,
)
fn sigma_multiply_basis( &self, result: &mut Self::Element, coeff: u32, r_degree: i32, r_idx: usize, s_degree: i32, s_idx: usize, )
result.Source§fn sigma_multiply(
&self,
result: &mut Self::Element,
coeff: u32,
r_degree: i32,
r: FpSlice<'_>,
s_degree: i32,
s: FpSlice<'_>,
)
fn sigma_multiply( &self, result: &mut Self::Element, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: FpSlice<'_>, )
PairAlgebra::sigma_multiply_basis but with non-basis elements.Source§fn a_multiply(
&self,
result: FpSliceMut<'_>,
coeff: u32,
r_degree: i32,
r: FpSlice<'_>,
s_degree: i32,
s: &Self::Element,
)
fn a_multiply( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: &Self::Element, )
result.fn element_to_bytes( &self, elt: &Self::Element, buffer: &mut impl Write, ) -> Result<()>
fn element_from_bytes( &self, degree: i32, buffer: &mut impl Read, ) -> Result<Self::Element>
fn element_is_zero(elt: &Self::Element) -> bool
Source§fn finalize_element(elt: &mut Self::Element)
fn finalize_element(elt: &mut Self::Element)
elt is in the image of the differential. Drop the data recording the
complement of the image of the differential.Source§impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra
impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra
Source§impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra
impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra
Source§impl TryInto<AdemAlgebra> for SteenrodAlgebra
impl TryInto<AdemAlgebra> for SteenrodAlgebra
Source§impl TryInto<MilnorAlgebra> for SteenrodAlgebra
impl TryInto<MilnorAlgebra> for SteenrodAlgebra
Source§impl UnstableAlgebra for SteenrodAlgebra
impl UnstableAlgebra for SteenrodAlgebra
Source§fn multiply_basis_element_by_element_unstable(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: usize,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: FpSlice<'_>,
__enum_dispatch_arg_6: i32,
)
fn multiply_basis_element_by_element_unstable( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: usize, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: FpSlice<'_>, __enum_dispatch_arg_6: i32, )
Computes the product r * s of a basis element r and a general element s, and adds the
result to result.
Neither result nor s must be aligned.
Source§fn multiply_element_by_basis_element_unstable(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: FpSlice<'_>,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: usize,
__enum_dispatch_arg_6: i32,
)
fn multiply_element_by_basis_element_unstable( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: FpSlice<'_>, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: usize, __enum_dispatch_arg_6: i32, )
Computes the product r * s of a general element r and a basis element s, and adds the
result to result.
Neither result nor r must be aligned.
Source§fn multiply_element_by_element_unstable(
&self,
__enum_dispatch_arg_0: FpSliceMut<'_>,
__enum_dispatch_arg_1: u32,
__enum_dispatch_arg_2: i32,
__enum_dispatch_arg_3: FpSlice<'_>,
__enum_dispatch_arg_4: i32,
__enum_dispatch_arg_5: FpSlice<'_>,
__enum_dispatch_arg_6: i32,
)
fn multiply_element_by_element_unstable( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: FpSlice<'_>, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: FpSlice<'_>, __enum_dispatch_arg_6: i32, )
Computes the product r * s of two general elements, and adds the
result to result.
Neither result, s, nor r must be aligned.
fn dimension_unstable( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: i32, ) -> usize
fn multiply_basis_elements_unstable( &self, __enum_dispatch_arg_0: FpSliceMut<'_>, __enum_dispatch_arg_1: u32, __enum_dispatch_arg_2: i32, __enum_dispatch_arg_3: usize, __enum_dispatch_arg_4: i32, __enum_dispatch_arg_5: usize, __enum_dispatch_arg_6: i32, )
Auto Trait Implementations§
impl !Freeze for SteenrodAlgebra
impl RefUnwindSafe for SteenrodAlgebra
impl Send for SteenrodAlgebra
impl Sync for SteenrodAlgebra
impl Unpin for SteenrodAlgebra
impl !UnwindSafe for SteenrodAlgebra
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more