SteenrodAlgebra

Enum SteenrodAlgebra 

Source
pub enum SteenrodAlgebra {
    AdemAlgebra(AdemAlgebra),
    MilnorAlgebra(MilnorAlgebra),
}

Variants§

§

AdemAlgebra(AdemAlgebra)

§

MilnorAlgebra(MilnorAlgebra)

Implementations§

Source§

impl SteenrodAlgebra

Source

pub fn from_json( json: &Value, algebra_type: AlgebraType, unstable: bool, ) -> Result<Self>

Trait Implementations§

Source§

impl Algebra for SteenrodAlgebra

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.

This defaults to 0 for other kinds of algebra that don’t care about this problem.

Source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.

Source§

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

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

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

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

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

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

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

Converts a basis element into a string for display.

Source§

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§

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

Converts a general element into a string for display.

Source§

impl Bialgebra for SteenrodAlgebra

Source§

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

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

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 From<MilnorAlgebra> for SteenrodAlgebra

Source§

fn from(v: MilnorAlgebra) -> SteenrodAlgebra

Converts to this type from the input type.
Source§

impl GeneratedAlgebra for SteenrodAlgebra

Source§

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

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

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

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

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

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

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<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

Source§

type Error = Error

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

fn try_into(self) -> Result<&'a MilnorAlgebra, 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 TryInto<MilnorAlgebra> for SteenrodAlgebra

Source§

type Error = &'static str

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

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

Performs the conversion.
Source§

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

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

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

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 dimension_unstable( &self, __enum_dispatch_arg_0: i32, __enum_dispatch_arg_1: i32, ) -> usize

Source§

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§

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