From 307719de67ae20fcf3fc91db379129e0475f3c36 Mon Sep 17 00:00:00 2001 From: Cotton Seed Date: Fri, 31 Aug 2012 13:44:18 -0400 Subject: [PATCH] Updated link forgetful spectral sequence verification to include ell-grading. --- algebra/module.h | 15 ++++++++ algebra/multivariate_laurentpoly.h | 6 +++ main.cpp | 59 +++++++++++++++++++----------- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/algebra/module.h b/algebra/module.h index b86b7e6..5395c76 100644 --- a/algebra/module.h +++ b/algebra/module.h @@ -82,6 +82,7 @@ class module : public refcounted multivariate_laurentpoly free_poincare_polynomial () const; multivariate_laurentpoly free_delta_poincare_polynomial () const; + multivariate_laurentpoly free_ell_poincare_polynomial () const; ptr > add (basedvector >, 1> compound_summands) const; @@ -1481,6 +1482,20 @@ module::free_delta_poincare_polynomial () const return r; } +template multivariate_laurentpoly +module::free_ell_poincare_polynomial () const +{ + multivariate_laurentpoly 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 set module::gradings () const { diff --git a/algebra/multivariate_laurentpoly.h b/algebra/multivariate_laurentpoly.h index 42747c3..8a08828 100644 --- a/algebra/multivariate_laurentpoly.h +++ b/algebra/multivariate_laurentpoly.h @@ -205,6 +205,12 @@ class multivariate_laurentpoly 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) { if (c != 0) diff --git a/main.cpp b/main.cpp index 827e919..980ab7f 100644 --- a/main.cpp +++ b/main.cpp @@ -816,34 +816,43 @@ test_forgetful_ss () } assert (t == n); - unsigned disj_rank = 1; + printf (" kd w: %d\n", kd.writhe ()); + + multivariate_laurentpoly disj_P = 1; for (unsigned k = 1; k <= n; k ++) { knot_diagram comp (SUBLINK, smallbitset (n, unsigned_2pow (k - 1)), kd); - + + unsigned w = 0; + for (unsigned i = 1; i <= kd.n_crossings; i ++) + { + if (root_comp(u.find (kd.ept_edge (kd.crossings[i][1]))) == k + && root_comp(u.find (kd.ept_edge (kd.crossings[i][2]))) == k) + { + if (kd.is_to_ept (kd.crossings[i][1]) == kd.is_to_ept (kd.crossings[i][4])) + w ++; + else + w --; + } + } + + printf (" % 2d w: %d\n", k, w); + cube c (comp); mod_map d = c.compute_d (1, 0, 0, 0, 0); chain_complex_simplifier s (c.khC, d, 1); assert (s.new_d == 0); - printf (" % 2d: rank %d\n", k, s.new_C->dim ()); + multivariate_laurentpoly P = s.new_C->free_ell_poincare_polynomial (); + printf (" % 2d P: ", k); + display (P); - disj_rank *= s.new_C->dim (); + disj_P *= (P + * multivariate_laurentpoly (1, VARIABLE, 1, w) + ); } - { - knot_diagram comp (SUBLINK, smallbitset (n, unsigned_bitclear (unsigned_fill (n), 1)), kd); - - cube c (comp); - mod_map d = c.compute_d (1, 0, 0, 0, 0); - - chain_complex_simplifier s (c.khC, d, 1); - assert (s.new_d == 0); - - printf (" 11...10: rank %d\n", s.new_C->dim ()); - } - cube c (kd); #if 0 @@ -862,7 +871,10 @@ test_forgetful_ss () chain_complex_simplifier s1 (c.khC, untwisted_d, 1); assert (s1.new_d == 0); - printf ("untwisted rank = %d\n", s1.new_C->dim ()); + multivariate_laurentpoly P1 = s1.new_C->free_ell_poincare_polynomial (); + display (" link P : ", P1); + + display (" disj_P (adj): ", disj_P); mod_map d = untwisted_d; for (unsigned x = 1; x <= kd.n_crossings; x ++) @@ -898,13 +910,16 @@ test_forgetful_ss () chain_complex_simplifier s2 (c.khC, d, -1); assert (s2.new_d == 0); + + multivariate_laurentpoly P2 = (s2.new_C->free_ell_poincare_polynomial () + * multivariate_laurentpoly (1, VARIABLE, 1, kd.writhe ()) + ); + display (" Einf P (adj): ", P2); - printf ("twisted rank = %d\n", s2.new_C->dim ()); - - if (disj_rank == s2.new_C->dim ()) - printf (" %d == %d: YES!\n", disj_rank, s2.new_C->dim ()); + if (disj_P == P2) + printf (" disj_P == Einf P (adj): YES!\n"); else - printf (" %d == %d: NO :-(\n", disj_rank, s2.new_C->dim ()); + printf (" disj_P != Einf P (adj): NO :-(!\n"); } }