pub struct SchubertCalculus {
pub grassmannian_dim: (usize, usize),
/* private fields */
}Expand description
Schubert calculus engine
Fields§
§grassmannian_dim: (usize, usize)The underlying Grassmannian
Implementations§
Source§impl SchubertCalculus
impl SchubertCalculus
Sourcepub fn grassmannian_dimension(&self) -> usize
pub fn grassmannian_dimension(&self) -> usize
Sourcepub fn intersection_number(
&mut self,
class1: &SchubertClass,
class2: &SchubertClass,
) -> EnumerativeResult<Rational64>
pub fn intersection_number( &mut self, class1: &SchubertClass, class2: &SchubertClass, ) -> EnumerativeResult<Rational64>
Compute intersection number of two Schubert classes
§Contract
requires: class1.grassmannian_dim == class2.grassmannian_dim == self.grassmannian_dim
ensures: result >= 0
ensures: class1.dimension() + class2.dimension() != self.grassmannian_dimension()
=> result == 0Sourcepub fn multi_intersect(
&mut self,
classes: &[SchubertClass],
) -> IntersectionResult
pub fn multi_intersect( &mut self, classes: &[SchubertClass], ) -> IntersectionResult
Intersect multiple Schubert classes
Given classes σ_{λ_1}, …, σ_{λ_m}, compute their intersection number in the Grassmannian Gr(k, n).
§Contract
requires: forall c in classes. c.grassmannian_dim == self.grassmannian_dim
ensures:
- sum(c.codimension() for c in classes) > dim(Gr) => Empty
- sum(c.codimension() for c in classes) == dim(Gr) => Finite(n)
- sum(c.codimension() for c in classes) < dim(Gr) => PositiveDimensionalSourcepub fn lr_cached(
&mut self,
lambda: &Partition,
mu: &Partition,
nu: &Partition,
) -> u64
pub fn lr_cached( &mut self, lambda: &Partition, mu: &Partition, nu: &Partition, ) -> u64
Get or compute LR coefficient with caching
§Contract
ensures: result == lr_coefficient(lambda, mu, nu)
ensures: lr_cached(lambda, mu, nu) == lr_cached(mu, lambda, nu) // symmetrySourcepub fn product(
&mut self,
class1: &SchubertClass,
class2: &SchubertClass,
) -> Vec<(SchubertClass, u64)>
pub fn product( &mut self, class1: &SchubertClass, class2: &SchubertClass, ) -> Vec<(SchubertClass, u64)>
Expand product of two Schubert classes
§Contract
requires: class1.grassmannian_dim == class2.grassmannian_dim == self.grassmannian_dim
ensures: forall (c, coeff) in result. coeff > 0
ensures: product(class1, class2) == product(class2, class1) // commutativitySourcepub fn pieri_multiply(
&self,
schubert_class: &SchubertClass,
special_class: usize,
) -> EnumerativeResult<Vec<SchubertClass>>
pub fn pieri_multiply( &self, schubert_class: &SchubertClass, special_class: usize, ) -> EnumerativeResult<Vec<SchubertClass>>
Multiply two Schubert classes using Pieri’s rule (simplified)
Trait Implementations§
Source§impl Debug for SchubertCalculus
impl Debug for SchubertCalculus
Auto Trait Implementations§
impl Freeze for SchubertCalculus
impl RefUnwindSafe for SchubertCalculus
impl Send for SchubertCalculus
impl Sync for SchubertCalculus
impl Unpin for SchubertCalculus
impl UnwindSafe for SchubertCalculus
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
Mutably borrows from an owned value. Read more