AdemAlgebra

Struct AdemAlgebra 

Source
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

Source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

Constructs a new AdemAlgebra.

Source

pub fn generic(&self) -> bool

Source

pub fn q(&self) -> i32

Source

fn generate_basis_even(&self, max_degree: i32)

Source

fn generate_basis2(&self, max_degree: i32)

Source

fn generate_basis_generic(&self, max_degree: i32)

Source

fn generate_basis_element_to_index_map(&self, max_degree: i32)

Source

pub fn basis_element_from_index( &self, degree: i32, idx: usize, ) -> &AdemBasisElement

Source

pub fn try_basis_element_to_index( &self, elt: &AdemBasisElement, ) -> Option<usize>

Source

pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

Source

fn tail_of_basis_element_to_index( &self, elt: &mut AdemBasisElement, idx: u32, q: u32, ) -> usize

Source

fn generate_multiplication_table_2(&self, max_degree: i32)

Source

fn generate_multiplication_table_2_step( &self, table: &[Vec<FpVector>], n: i32, x: i32, idx: usize, ) -> FpVector

Source

fn generate_multiplication_table_generic(&self, max_degree: i32)

Source

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.

Source

pub fn multiply_inner( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_index: usize, s_degree: i32, s_index: usize, excess: i32, )

Source

pub fn make_mono_admissible( &self, result: FpSliceMut<'_>, coeff: u32, monomial: &mut AdemBasisElement, excess: i32, )

Source

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 result
  • monomial - 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)
Source

fn make_mono_admissible_generic( &self, result: FpSliceMut<'_>, coeff: u32, monomial: &mut AdemBasisElement, idx: i32, leading_degree: i32, excess: i32, stop_early: bool, )

Source

fn decompose_basis_element_2( &self, degree: i32, idx: usize, ) -> Vec<(u32, (i32, usize), (i32, usize))>

Source

fn decompose_basis_element_generic( &self, degree: i32, idx: usize, ) -> Vec<(u32, (i32, usize), (i32, usize))>

Source

pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

Source§

impl AdemAlgebra

Source

fn generate_excess_table(&self, max_degree: i32)

Trait Implementations§

Source§

impl Algebra for AdemAlgebra

Source§

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

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. Read more
Source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
Source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
Source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
Source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
Source§

fn multiply_basis_elements( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_index: usize, s_degree: i32, s_index: usize, )

Computes the product r * s of two basis elements, and adds the result to result. Read more
Source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
Source§

fn basis_element_from_string(&self, elt: &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). Read more
Source§

fn multiply_basis_element_by_element( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r_idx: usize, s_degree: i32, s: FpSlice<'_>, )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
Source§

fn multiply_element_by_basis_element( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s_idx: usize, )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
Source§

fn multiply_element_by_element( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: FpSlice<'_>, )

Computes the product r * s of two general elements, and adds the result to result. Read more
Source§

fn element_to_string(&self, degree: i32, element: FpSlice<'_>) -> String

Converts a general element into a string for display.
Source§

impl Bialgebra for AdemAlgebra

Source§

fn decompose(&self, op_deg: i32, op_idx: 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. Read more
Source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
Source§

impl Display for AdemAlgebra

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<AdemAlgebra> for SteenrodAlgebra

Source§

fn from(v: AdemAlgebra) -> SteenrodAlgebra

Converts to this type from the input type.
Source§

impl GeneratedAlgebra for AdemAlgebra

Source§

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§

fn generator_to_string(&self, degree: i32, _idx: usize) -> String

Returns the name of a generator. Read more
Source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
Source§

fn decompose_basis_element( &self, degree: i32, idx: usize, ) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators. Read more
Source§

impl PairAlgebra for AdemAlgebra

Source§

type Element = MilnorPairElement

An element in the cohomological degree zero part of the pair algebra. This tends to not be a ring over Fp, so we let the algebra specify how it wants to represent the elements.
Source§

fn element_is_zero(_elt: &Self::Element) -> bool

Source§

fn finalize_element(_elt: &mut Self::Element)

Assert that 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

The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said indecomposable.
Source§

fn new_pair_element(&self, _degree: i32) -> Self::Element

Create a new zero element in the given degree.
Source§

fn sigma_multiply_basis( &self, _result: &mut Self::Element, _coeff: u32, _r_degree: i32, _r_idx: usize, _s_degree: i32, _s_idx: usize, )

Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to result.
Source§

fn a_multiply( &self, _result: FpSliceMut<'_>, _coeff: u32, _r_degree: i32, _r: FpSlice<'_>, _s_degree: i32, _s: &Self::Element, )

Compute $A(r, s)$ and write the result to result.
Source§

fn element_to_bytes( &self, _elt: &Self::Element, _buffer: &mut impl Write, ) -> Result<()>

Source§

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<'_>, )

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
Source§

impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

Performs the conversion.
Source§

impl TryInto<AdemAlgebra> for SteenrodAlgebra

Source§

type Error = &'static str

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<AdemAlgebra, <Self as TryInto<AdemAlgebra>>::Error>

Performs the conversion.
Source§

impl UnstableAlgebra for AdemAlgebra

Source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

Source§

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, )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
Source§

fn multiply_element_by_basis_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s_idx: usize, excess: i32, )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
Source§

fn multiply_element_by_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: FpSlice<'_>, excess: i32, )

Computes the product r * s of two general elements, and adds the result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<A> MuAlgebra<false> for A
where A: Algebra,

Source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

Source§

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, )

Source§

fn multiply_element_by_basis_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s_idx: usize, _excess: i32, )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
Source§

fn multiply_element_by_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: FpSlice<'_>, _excess: i32, )

Computes the product r * s of two general elements, and adds the result to result. Read more
Source§

impl<A> MuAlgebra<true> for A
where A: UnstableAlgebra,

Source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

Source§

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, )

Source§

fn multiply_element_by_basis_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s_idx: usize, excess: i32, )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
Source§

fn multiply_element_by_element_unstable( &self, result: FpSliceMut<'_>, coeff: u32, r_degree: i32, r: FpSlice<'_>, s_degree: i32, s: FpSlice<'_>, excess: i32, )

Computes the product r * s of two general elements, and adds the result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V