pub struct AdemAlgebra {
p: ValidPrime,
generic: bool,
unstable_enabled: bool,
even_basis_table: OnceVec<Vec<AdemBasisElement>>,
basis_table: OnceVec<Vec<AdemBasisElement>>,
basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
excess_table: OnceVec<Vec<usize>>,
}Expand description
An Algebra implementing the Steenrod algebra, using the Adem basis.
Fields§
§p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>degree -> index -> AdemBasisElement
basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>degree -> AdemBasisElement -> index
multiplication_table: OnceVec<Vec<Vec<FpVector>>>degree -> first square -> admissible sequence idx -> result
excess_table: OnceVec<Vec<usize>>Implementations§
Source§impl AdemAlgebra
impl AdemAlgebra
Sourcepub fn new(p: ValidPrime, unstable_enabled: bool) -> Self
pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self
Constructs a new AdemAlgebra.
pub fn generic(&self) -> bool
pub fn q(&self) -> i32
fn generate_basis_even(&self, max_degree: i32)
fn generate_basis2(&self, max_degree: i32)
fn generate_basis_generic(&self, max_degree: i32)
fn generate_basis_element_to_index_map(&self, max_degree: i32)
pub fn basis_element_from_index( &self, degree: i32, idx: usize, ) -> &AdemBasisElement
pub fn try_basis_element_to_index( &self, elt: &AdemBasisElement, ) -> Option<usize>
pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize
fn tail_of_basis_element_to_index( &self, elt: &mut AdemBasisElement, idx: u32, q: u32, ) -> usize
fn generate_multiplication_table_2(&self, max_degree: i32)
fn generate_multiplication_table_2_step( &self, table: &[Vec<FpVector>], n: i32, x: i32, idx: usize, ) -> FpVector
fn generate_multiplication_table_generic(&self, max_degree: i32)
Sourcefn generate_multiplication_table_generic_step(
&self,
table: &[Vec<FpVector>],
n: i32,
x: i32,
idx: usize,
) -> FpVector
fn generate_multiplication_table_generic_step( &self, table: &[Vec<FpVector>], n: i32, x: i32, idx: usize, ) -> FpVector
This function expresses $Sq^x$ (current) in terms of the admissible basis and returns
the result as an FpVector, where (current) is the admissible monomial of degree $n - qx$
(so that $Sq^x)$ (current) has degree $n$) and index idx.
Here $Sq^x$ means $P^{x/2}$ if $x$ is even and $\beta P^{(x-1)/2}$ if $x$ is odd.
Note that x is always positive.
pub fn multiply_inner( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_index: usize, s_degree: i32, s_index: usize, excess: i32, )
pub fn make_mono_admissible( &self, result: FpSliceMut<'_>, coeff: u32, monomial: &mut AdemBasisElement, excess: i32, )
Sourcefn make_mono_admissible_2(
&self,
result: FpSliceMut<'_>,
monomial: &mut AdemBasisElement,
idx: i32,
leading_degree: i32,
excess: i32,
stop_early: bool,
)
fn make_mono_admissible_2( &self, result: FpSliceMut<'_>, monomial: &mut AdemBasisElement, idx: i32, leading_degree: i32, excess: i32, stop_early: bool, )
Reduce a Steenrod monomial at the prime 2.
§Arguments:
algebra- an Adem algebra. This would be a method of class AdemAlgebra.result- Where we put the resultmonomial- a not necessarily admissible Steenrod monomial which we will reduce. We destroy monomial->Ps.idx- the only index to check for inadmissibility in the input (we assume that we’ve gotten our input as a product of two admissible sequences.)leading_degree- the degree of the squares between 0 and idx (so of length idx + 1)
fn make_mono_admissible_generic( &self, result: FpSliceMut<'_>, coeff: u32, monomial: &mut AdemBasisElement, idx: i32, leading_degree: i32, excess: i32, stop_early: bool, )
fn decompose_basis_element_2( &self, degree: i32, idx: usize, ) -> Vec<(u32, (i32, usize), (i32, usize))>
fn decompose_basis_element_generic( &self, degree: i32, idx: usize, ) -> Vec<(u32, (i32, usize), (i32, usize))>
pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)
Source§impl AdemAlgebra
impl AdemAlgebra
fn generate_excess_table(&self, max_degree: i32)
Trait Implementations§
Source§impl Algebra for AdemAlgebra
impl Algebra for AdemAlgebra
Source§fn prefix(&self) -> &str
fn prefix(&self) -> &str
Source§fn magic(&self) -> u32
fn magic(&self) -> u32
Source§fn prime(&self) -> ValidPrime
fn prime(&self) -> ValidPrime
Source§fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>
fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>
Source§fn compute_basis(&self, max_degree: i32)
fn compute_basis(&self, max_degree: i32)
degree. Read moreSource§fn dimension(&self, degree: i32) -> usize
fn dimension(&self, degree: i32) -> usize
degree.Source§fn multiply_basis_elements(
&self,
result: FpSliceMut<'_>,
coeff: u32,
r_degree: i32,
r_index: usize,
s_degree: i32,
s_index: usize,
)
fn multiply_basis_elements( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_index: usize, s_degree: i32, s_index: usize, )
Source§fn basis_element_to_string(&self, degree: i32, idx: usize) -> String
fn basis_element_to_string(&self, degree: i32, idx: usize) -> String
Source§fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>
fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>
GeneratedAlgebra is
implemented). Read moreSource§fn multiply_basis_element_by_element(
&self,
result: FpSliceMut<'_>,
coeff: u32,
r_degree: i32,
r_idx: usize,
s_degree: i32,
s: FpSlice<'_>,
)
fn multiply_basis_element_by_element( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_idx: usize, s_degree: i32, s: FpSlice<'_>, )
r * s of a basis element r and a general element s, and adds the
result to result. Read moreSource§fn multiply_element_by_basis_element(
&self,
result: FpSliceMut<'_>,
coeff: u32,
r_degree: i32,
r: FpSlice<'_>,
s_degree: i32,
s_idx: usize,
)
fn multiply_element_by_basis_element( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s_idx: usize, )
r * s of a general element r and a basis element s, and adds the
result to result. Read moreSource§fn multiply_element_by_element(
&self,
result: FpSliceMut<'_>,
coeff: u32,
r_degree: i32,
r: FpSlice<'_>,
s_degree: i32,
s: FpSlice<'_>,
)
fn multiply_element_by_element( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: FpSlice<'_>, )
Source§impl Bialgebra for AdemAlgebra
impl Bialgebra for AdemAlgebra
Source§impl Display for AdemAlgebra
impl Display for AdemAlgebra
Source§impl From<AdemAlgebra> for SteenrodAlgebra
impl From<AdemAlgebra> for SteenrodAlgebra
Source§fn from(v: AdemAlgebra) -> SteenrodAlgebra
fn from(v: AdemAlgebra) -> SteenrodAlgebra
Source§impl GeneratedAlgebra for AdemAlgebra
impl GeneratedAlgebra for AdemAlgebra
Source§fn generating_relations(
&self,
degree: i32,
) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>
fn generating_relations( &self, degree: i32, ) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>
We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because they generate all relations.
Source§impl PairAlgebra for AdemAlgebra
impl PairAlgebra for AdemAlgebra
Source§type Element = MilnorPairElement
type Element = MilnorPairElement
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§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 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>
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§impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra
impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra
Source§impl TryInto<AdemAlgebra> for SteenrodAlgebra
impl TryInto<AdemAlgebra> for SteenrodAlgebra
Source§impl UnstableAlgebra for AdemAlgebra
impl UnstableAlgebra for AdemAlgebra
fn dimension_unstable(&self, degree: i32, excess: i32) -> usize
fn multiply_basis_elements_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_index: usize, s_degree: i32, s_index: usize, excess: i32, )
Source§fn multiply_basis_element_by_element_unstable(
&self,
result: FpSliceMut<'_>,
coeff: u32,
r_degree: i32,
r_idx: usize,
s_degree: i32,
s: FpSlice<'_>,
excess: i32,
)
fn multiply_basis_element_by_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_idx: usize, s_degree: i32, s: FpSlice<'_>, excess: i32, )
r * s of a basis element r and a general element s, and adds the
result to result. Read moreAuto Trait Implementations§
impl !Freeze for AdemAlgebra
impl RefUnwindSafe for AdemAlgebra
impl Send for AdemAlgebra
impl Sync for AdemAlgebra
impl Unpin for AdemAlgebra
impl !UnwindSafe for AdemAlgebra
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