Updated link forgetful spectral sequence verification to include
ell-grading.
This commit is contained in:
parent
6e46c5a8ce
commit
307719de67
@ -82,6 +82,7 @@ class module : public refcounted
|
|||||||
|
|
||||||
multivariate_laurentpoly<Z> free_poincare_polynomial () const;
|
multivariate_laurentpoly<Z> free_poincare_polynomial () const;
|
||||||
multivariate_laurentpoly<Z> free_delta_poincare_polynomial () const;
|
multivariate_laurentpoly<Z> free_delta_poincare_polynomial () const;
|
||||||
|
multivariate_laurentpoly<Z> free_ell_poincare_polynomial () const;
|
||||||
|
|
||||||
ptr<const direct_sum<R> >
|
ptr<const direct_sum<R> >
|
||||||
add (basedvector<ptr<const module<R> >, 1> compound_summands) const;
|
add (basedvector<ptr<const module<R> >, 1> compound_summands) const;
|
||||||
@ -1481,6 +1482,20 @@ module<R>::free_delta_poincare_polynomial () const
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class R> multivariate_laurentpoly<Z>
|
||||||
|
module<R>::free_ell_poincare_polynomial () const
|
||||||
|
{
|
||||||
|
multivariate_laurentpoly<Z> r;
|
||||||
|
for (unsigned i = 1; i <= free_rank (); i ++)
|
||||||
|
{
|
||||||
|
grading hq = generator_grading (i);
|
||||||
|
multivariate_laurent_monomial m;
|
||||||
|
m.push_exponent (1, hq.h - hq.q);
|
||||||
|
r.muladdeq (1, m);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
template<class R> set<grading>
|
template<class R> set<grading>
|
||||||
module<R>::gradings () const
|
module<R>::gradings () const
|
||||||
{
|
{
|
||||||
|
@ -205,6 +205,12 @@ class multivariate_laurentpoly
|
|||||||
coeffs.push (monomial (VARIABLE, i), c);
|
coeffs.push (monomial (VARIABLE, i), c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
multivariate_laurentpoly (T c, variable, unsigned i, int e)
|
||||||
|
{
|
||||||
|
if (c != 0)
|
||||||
|
coeffs.push (monomial (VARIABLE, i, e), c);
|
||||||
|
}
|
||||||
|
|
||||||
multivariate_laurentpoly (T c, const monomial &m)
|
multivariate_laurentpoly (T c, const monomial &m)
|
||||||
{
|
{
|
||||||
if (c != 0)
|
if (c != 0)
|
||||||
|
51
main.cpp
51
main.cpp
@ -816,24 +816,27 @@ test_forgetful_ss ()
|
|||||||
}
|
}
|
||||||
assert (t == n);
|
assert (t == n);
|
||||||
|
|
||||||
unsigned disj_rank = 1;
|
printf (" kd w: %d\n", kd.writhe ());
|
||||||
|
|
||||||
|
multivariate_laurentpoly<Z> disj_P = 1;
|
||||||
for (unsigned k = 1; k <= n; k ++)
|
for (unsigned k = 1; k <= n; k ++)
|
||||||
{
|
{
|
||||||
knot_diagram comp (SUBLINK, smallbitset (n, unsigned_2pow (k - 1)), kd);
|
knot_diagram comp (SUBLINK, smallbitset (n, unsigned_2pow (k - 1)), kd);
|
||||||
|
|
||||||
cube<R> c (comp);
|
unsigned w = 0;
|
||||||
mod_map<R> d = c.compute_d (1, 0, 0, 0, 0);
|
for (unsigned i = 1; i <= kd.n_crossings; i ++)
|
||||||
|
{
|
||||||
chain_complex_simplifier<R> s (c.khC, d, 1);
|
if (root_comp(u.find (kd.ept_edge (kd.crossings[i][1]))) == k
|
||||||
assert (s.new_d == 0);
|
&& root_comp(u.find (kd.ept_edge (kd.crossings[i][2]))) == k)
|
||||||
|
{
|
||||||
printf (" % 2d: rank %d\n", k, s.new_C->dim ());
|
if (kd.is_to_ept (kd.crossings[i][1]) == kd.is_to_ept (kd.crossings[i][4]))
|
||||||
|
w ++;
|
||||||
disj_rank *= s.new_C->dim ();
|
else
|
||||||
|
w --;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
printf (" % 2d w: %d\n", k, w);
|
||||||
knot_diagram comp (SUBLINK, smallbitset (n, unsigned_bitclear (unsigned_fill (n), 1)), kd);
|
|
||||||
|
|
||||||
cube<R> c (comp);
|
cube<R> c (comp);
|
||||||
mod_map<R> d = c.compute_d (1, 0, 0, 0, 0);
|
mod_map<R> d = c.compute_d (1, 0, 0, 0, 0);
|
||||||
@ -841,7 +844,13 @@ test_forgetful_ss ()
|
|||||||
chain_complex_simplifier<R> s (c.khC, d, 1);
|
chain_complex_simplifier<R> s (c.khC, d, 1);
|
||||||
assert (s.new_d == 0);
|
assert (s.new_d == 0);
|
||||||
|
|
||||||
printf (" 11...10: rank %d\n", s.new_C->dim ());
|
multivariate_laurentpoly<Z> P = s.new_C->free_ell_poincare_polynomial ();
|
||||||
|
printf (" % 2d P: ", k);
|
||||||
|
display (P);
|
||||||
|
|
||||||
|
disj_P *= (P
|
||||||
|
* multivariate_laurentpoly<Z> (1, VARIABLE, 1, w)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
cube<R> c (kd);
|
cube<R> c (kd);
|
||||||
@ -862,7 +871,10 @@ test_forgetful_ss ()
|
|||||||
chain_complex_simplifier<R> s1 (c.khC, untwisted_d, 1);
|
chain_complex_simplifier<R> s1 (c.khC, untwisted_d, 1);
|
||||||
assert (s1.new_d == 0);
|
assert (s1.new_d == 0);
|
||||||
|
|
||||||
printf ("untwisted rank = %d\n", s1.new_C->dim ());
|
multivariate_laurentpoly<Z> P1 = s1.new_C->free_ell_poincare_polynomial ();
|
||||||
|
display (" link P : ", P1);
|
||||||
|
|
||||||
|
display (" disj_P (adj): ", disj_P);
|
||||||
|
|
||||||
mod_map<R> d = untwisted_d;
|
mod_map<R> d = untwisted_d;
|
||||||
for (unsigned x = 1; x <= kd.n_crossings; x ++)
|
for (unsigned x = 1; x <= kd.n_crossings; x ++)
|
||||||
@ -899,12 +911,15 @@ test_forgetful_ss ()
|
|||||||
chain_complex_simplifier<R> s2 (c.khC, d, -1);
|
chain_complex_simplifier<R> s2 (c.khC, d, -1);
|
||||||
assert (s2.new_d == 0);
|
assert (s2.new_d == 0);
|
||||||
|
|
||||||
printf ("twisted rank = %d\n", s2.new_C->dim ());
|
multivariate_laurentpoly<Z> P2 = (s2.new_C->free_ell_poincare_polynomial ()
|
||||||
|
* multivariate_laurentpoly<Z> (1, VARIABLE, 1, kd.writhe ())
|
||||||
|
);
|
||||||
|
display (" Einf P (adj): ", P2);
|
||||||
|
|
||||||
if (disj_rank == s2.new_C->dim ())
|
if (disj_P == P2)
|
||||||
printf (" %d == %d: YES!\n", disj_rank, s2.new_C->dim ());
|
printf (" disj_P == Einf P (adj): YES!\n");
|
||||||
else
|
else
|
||||||
printf (" %d == %d: NO :-(\n", disj_rank, s2.new_C->dim ());
|
printf (" disj_P != Einf P (adj): NO :-(!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user