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§
Sourceconst HIT_GENERATOR: bool = false
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§
type Algebra: PairAlgebra
type Source: FreeChainComplex<Algebra = Self::Algebra>
type Target: FreeChainComplex<Algebra = Self::Algebra>
type Underlying
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)
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.