SecondaryLift

Trait SecondaryLift 

Source
pub trait SecondaryLift: Sync + Sized {
    type Algebra: PairAlgebra;
    type Source: FreeChainComplex<Algebra = Self::Algebra>;
    type Target: FreeChainComplex<Algebra = Self::Algebra>;
    type Underlying;

    const HIT_GENERATOR: bool = false;
Show 20 methods // Required methods fn underlying(&self) -> Arc<Self::Underlying>; fn algebra(&self) -> Arc<Self::Algebra>; fn source(&self) -> Arc<Self::Source>; fn target(&self) -> Arc<Self::Target>; fn shift(&self) -> Bidegree; fn max(&self) -> BidegreeRange<'_, Self>; fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<Self::Algebra>>; fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>; fn save_dir(&self) -> &SaveDirectory; fn compute_intermediate(&self, g: BidegreeGenerator) -> FpVector; fn composite(&self, s: i32) -> CompositeData<Self::Algebra>; // Provided methods fn prime(&self) -> ValidPrime { ... } fn initialize_homotopies(&self) { ... } fn compute_composites(&self) { ... } fn get_intermediate(&self, g: BidegreeGenerator) -> FpVector { ... } fn compute_partial(&self, s: i32) { ... } fn compute_intermediates(&self) { ... } fn compute_homotopy_step(&self, b: Bidegree) -> Range<i32> { ... } fn compute_homotopies(&self) { ... } fn extend_all(&self) { ... }
}
Expand description

Logic that is common to all secondary lifts.

When lifting a thing to its secondary version, often what we have to do is to specify an explicit homotopy to witnesses that some equation holds. For example, to lift a chain complex, we need a homotopy witnessing the fact that $d^2 \simeq 0$. This homotopy in turn is required to satisfy certain recursive relations.

To specify this lifting problem, one needs to supply two pieces of data. First is the equation that we are trying to witness, which is usually of the form

$$ \sum_i c_i f_i g_i = 0, $$

where $f_i$ and $g_i$ are free module homomorphisms and $c_i$ are constants. This is specified by SecondaryLift::composite.

The next is a compatibility equation, which restricts the λ part of the null-homotopy, and is usually of the form

$$ dh = hd + \mathrm{stuff} $$

The λ part of $hd + \mathrm{stuff}$ is known as the intermediate data, and is what SecondaryLift::compute_intermediate returns.

Provided Associated Constants§

Source

const HIT_GENERATOR: bool = false

Whether the composite can hit generators. This is true for SecondaryChainHomotopy and false for the rest. This is important because for SecondaryResolution, we don’t actually know all the generators if we resolve up to a stem. So in composites for SecondaryResolution, we need to ignore target generators of the same degree uniformly.

Required Associated Types§

Required Methods§

Source

fn underlying(&self) -> Arc<Self::Underlying>

Source

fn algebra(&self) -> Arc<Self::Algebra>

Source

fn source(&self) -> Arc<Self::Source>

Source

fn target(&self) -> Arc<Self::Target>

Source

fn shift(&self) -> Bidegree

Source

fn max(&self) -> BidegreeRange<'_, Self>

Source

fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<Self::Algebra>>

Source

fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>

Source

fn save_dir(&self) -> &SaveDirectory

Source

fn compute_intermediate(&self, g: BidegreeGenerator) -> FpVector

Source

fn composite(&self, s: i32) -> CompositeData<Self::Algebra>

Provided Methods§

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§