Added tests for Kh homotopy type: CP^2, mutation invariance, sq1 and
sq2 satisfy adem relations.
This commit is contained in:
parent
307719de67
commit
b17121cf5b
@ -86,6 +86,13 @@ class knot_desc
|
|||||||
std::string name () const;
|
std::string name () const;
|
||||||
unsigned table_crossing_knots () const;
|
unsigned table_crossing_knots () const;
|
||||||
|
|
||||||
|
hash_t hash_self () const
|
||||||
|
{
|
||||||
|
return hash_combine (hash ((int)t),
|
||||||
|
hash_combine (hash (i),
|
||||||
|
hash (j)));
|
||||||
|
}
|
||||||
|
|
||||||
void write_self (writer &w) const;
|
void write_self (writer &w) const;
|
||||||
void show_self () const { printf ("%s", name ().c_str ()); }
|
void show_self () const { printf ("%s", name ().c_str ()); }
|
||||||
void display_self () const { show_self (); newline (); }
|
void display_self () const { show_self (); newline (); }
|
||||||
|
516
main.cpp
516
main.cpp
@ -219,6 +219,7 @@ homological_width (ptr<const module<Z2> > H)
|
|||||||
}
|
}
|
||||||
int dwidth = maxd - mind;
|
int dwidth = maxd - mind;
|
||||||
|
|
||||||
|
assert (is_even (dwidth));
|
||||||
unsigned hwidth = (dwidth / 2) + 1;
|
unsigned hwidth = (dwidth / 2) + 1;
|
||||||
return hwidth;
|
return hwidth;
|
||||||
}
|
}
|
||||||
@ -346,84 +347,6 @@ load (map<knot_desc,
|
|||||||
|
|
||||||
static const int block_size = 100;
|
static const int block_size = 100;
|
||||||
|
|
||||||
void
|
|
||||||
show_st (map<knot_desc,
|
|
||||||
pair<mod_map<Z2>, mod_map<Z2> > > knot_kh_sq,
|
|
||||||
knot_desc desc)
|
|
||||||
{
|
|
||||||
pair<mod_map<Z2>, mod_map<Z2> > p = knot_kh_sq(desc);
|
|
||||||
|
|
||||||
mod_map<Z2> sq1 = p.first;
|
|
||||||
mod_map<Z2> sq2 = p.second;
|
|
||||||
|
|
||||||
printf ("%s ", desc.name ().c_str ());
|
|
||||||
|
|
||||||
assert (sq1.compose (sq1) == 0);
|
|
||||||
assert (sq2.compose (sq2) + sq1.compose (sq2).compose (sq1) == 0);
|
|
||||||
|
|
||||||
ptr<const module<Z2> > H = sq1.domain ();
|
|
||||||
|
|
||||||
map<grading, basedvector<int, 1> > st;
|
|
||||||
|
|
||||||
bool first = 1;
|
|
||||||
set<grading> gs = H->gradings ();
|
|
||||||
for (set_const_iter<grading> gg = gs; gg; gg ++)
|
|
||||||
{
|
|
||||||
grading hq = gg.val (),
|
|
||||||
h1q (hq.h + 1, hq.q),
|
|
||||||
h2q (hq.h + 2, hq.q);
|
|
||||||
|
|
||||||
ptr<const free_submodule<Z2> > H_hq = H->graded_piece (hq),
|
|
||||||
H_h1q = H->graded_piece (h1q),
|
|
||||||
H_h2q = H->graded_piece (h2q);
|
|
||||||
|
|
||||||
mod_map<Z2> S = sq2.restrict (H_hq, H_h2q),
|
|
||||||
A = sq1.restrict (H_hq, H_h1q),
|
|
||||||
B = sq1.restrict (H_h1q, H_h2q);
|
|
||||||
|
|
||||||
ptr<const free_submodule<Z2> > S_im = S.image (),
|
|
||||||
A_ker = A.kernel (),
|
|
||||||
B_im = B.image ();
|
|
||||||
ptr<const free_submodule<Z2> > inter = S_im->intersection (B_im);
|
|
||||||
|
|
||||||
mod_map<Z2> S_res = S.restrict_from (A_ker);
|
|
||||||
ptr<const free_submodule<Z2> > S_res_im = S_res.image ();
|
|
||||||
|
|
||||||
ptr<const free_submodule<Z2> > res_inter = S_res_im->intersection (B_im);
|
|
||||||
|
|
||||||
int r1 = S_im->dim ();
|
|
||||||
int r2 = S_res_im->dim ();
|
|
||||||
int r3 = inter->dim ();
|
|
||||||
int r4 = res_inter->dim ();
|
|
||||||
|
|
||||||
if (r1 == 0
|
|
||||||
&& r2 == 0
|
|
||||||
&& r3 == 0
|
|
||||||
&& r4 == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// printf (" r = (%d, %d, %d, %d)\n", r1, r2, r3, r4);
|
|
||||||
|
|
||||||
int s1 = r2 - r4,
|
|
||||||
s2 = r1 - r2 - r3 + r4,
|
|
||||||
s3 = r4,
|
|
||||||
s4 = r3 - r4;
|
|
||||||
|
|
||||||
if (s1 != 0)
|
|
||||||
{
|
|
||||||
if (first)
|
|
||||||
first = 0;
|
|
||||||
else
|
|
||||||
printf (", ");
|
|
||||||
printf ("(%d, %d) -> (%d, %d, %d, %d)",
|
|
||||||
hq.h, hq.q,
|
|
||||||
s1, s2, s3, s4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newline ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
sage_show (FILE *fp,
|
sage_show (FILE *fp,
|
||||||
std::string prefix,
|
std::string prefix,
|
||||||
@ -669,6 +592,7 @@ convert_knot_sq ()
|
|||||||
// write (w, knot_sq);
|
// write (w, knot_sq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
void
|
void
|
||||||
test_knot_sq ()
|
test_knot_sq ()
|
||||||
{
|
{
|
||||||
@ -697,6 +621,7 @@ compute_kh_sq (const knot_desc &desc)
|
|||||||
{
|
{
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<class R> pair<ptr<const module<R> >, mod_map<R> >
|
template<class R> pair<ptr<const module<R> >, mod_map<R> >
|
||||||
FU_complex (ptr<const module<R> > CF,
|
FU_complex (ptr<const module<R> > CF,
|
||||||
@ -923,12 +848,445 @@ test_forgetful_ss ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Kh homotopy type:
|
||||||
|
- check for CP^2,
|
||||||
|
- mutation invariance
|
||||||
|
- K-theory */
|
||||||
|
|
||||||
|
map<grading, basedvector<int, 1> >
|
||||||
|
compute_st (mod_map<Z2> sq1,
|
||||||
|
mod_map<Z2> sq2)
|
||||||
|
{
|
||||||
|
ptr<const module<Z2> > H = sq1.domain ();
|
||||||
|
|
||||||
|
map<grading, basedvector<int, 1> > st;
|
||||||
|
|
||||||
|
bool first = 1;
|
||||||
|
set<grading> gs = H->gradings ();
|
||||||
|
for (set_const_iter<grading> gg = gs; gg; gg ++)
|
||||||
|
{
|
||||||
|
grading hq = gg.val (),
|
||||||
|
h1q (hq.h + 1, hq.q),
|
||||||
|
h2q (hq.h + 2, hq.q);
|
||||||
|
|
||||||
|
ptr<const free_submodule<Z2> > H_hq = H->graded_piece (hq),
|
||||||
|
H_h1q = H->graded_piece (h1q),
|
||||||
|
H_h2q = H->graded_piece (h2q);
|
||||||
|
|
||||||
|
mod_map<Z2> S = sq2.restrict (H_hq, H_h2q),
|
||||||
|
A = sq1.restrict (H_hq, H_h1q),
|
||||||
|
B = sq1.restrict (H_h1q, H_h2q);
|
||||||
|
|
||||||
|
ptr<const free_submodule<Z2> > S_im = S.image (),
|
||||||
|
A_ker = A.kernel (),
|
||||||
|
B_im = B.image ();
|
||||||
|
ptr<const free_submodule<Z2> > inter = S_im->intersection (B_im);
|
||||||
|
|
||||||
|
mod_map<Z2> S_res = S.restrict_from (A_ker);
|
||||||
|
ptr<const free_submodule<Z2> > S_res_im = S_res.image ();
|
||||||
|
|
||||||
|
ptr<const free_submodule<Z2> > res_inter = S_res_im->intersection (B_im);
|
||||||
|
|
||||||
|
int r1 = S_im->dim ();
|
||||||
|
int r2 = S_res_im->dim ();
|
||||||
|
int r3 = inter->dim ();
|
||||||
|
int r4 = res_inter->dim ();
|
||||||
|
|
||||||
|
int s1 = r2 - r4,
|
||||||
|
s2 = r1 - r2 - r3 + r4,
|
||||||
|
s3 = r4,
|
||||||
|
s4 = r3 - r4;
|
||||||
|
|
||||||
|
if (!s1 && !s2 && !s3 && !s4)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
basedvector<int, 1> s (4);
|
||||||
|
s[1] = s1;
|
||||||
|
s[2] = s2;
|
||||||
|
s[3] = s3;
|
||||||
|
s[4] = s4;
|
||||||
|
|
||||||
|
st.push (hq, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
return st;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_knot_sq ()
|
||||||
|
{
|
||||||
|
const char *knot_sq_files[] = {
|
||||||
|
"knot_sq/rolfsen_sq.dat.gz",
|
||||||
|
"knot_sq/Ksmall_sq.dat.gz",
|
||||||
|
"knot_sq/K11_sq.dat.gz",
|
||||||
|
"knot_sq/K12_sq.dat.gz",
|
||||||
|
"knot_sq/K13_sq.dat.gz",
|
||||||
|
#if 0
|
||||||
|
"knot_sq/K14_sq.dat.gz",
|
||||||
|
"knot_sq/Lsmall_sq.dat.gz",
|
||||||
|
"knot_sq/L11_sq.dat.gz",
|
||||||
|
"knot_sq/L12_sq.dat.gz",
|
||||||
|
"knot_sq/L13_sq.dat.gz",
|
||||||
|
"knot_sq/L14_sq.dat.gz",
|
||||||
|
#endif
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
hashset<knot_desc> mutants;
|
||||||
|
for (unsigned i = 11; i <= 15; i ++)
|
||||||
|
{
|
||||||
|
basedvector<basedvector<unsigned, 1>, 1> groups
|
||||||
|
= mutant_knot_groups (i);
|
||||||
|
for (unsigned j = 1; j <= groups.size (); j ++)
|
||||||
|
{
|
||||||
|
for (unsigned k = 1; k <= groups[j].size (); k ++)
|
||||||
|
mutants += knot_desc (knot_desc::HTW, i, groups[j][k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("|mutants| = %d\n", mutants.card ());
|
||||||
|
|
||||||
|
basedvector<unsigned, 1> width_hist (7);
|
||||||
|
for (unsigned i = 1; i <= width_hist.size (); i ++)
|
||||||
|
width_hist[i] = 0;
|
||||||
|
|
||||||
|
hashmap<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > > mutant_knot_sq,
|
||||||
|
mutant_mknot_sq;
|
||||||
|
|
||||||
|
{
|
||||||
|
gzfile_reader r ("knot_sq/mut_mknot.dat.gz");
|
||||||
|
mutant_mknot_sq = hashmap<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > > (r);
|
||||||
|
|
||||||
|
for (hashmap<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > >::const_iter i = mutant_mknot_sq; i; i ++)
|
||||||
|
{
|
||||||
|
knot_desc desc = i.key ();
|
||||||
|
|
||||||
|
// careful: duplicate code!
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > p = i.val ();
|
||||||
|
|
||||||
|
mod_map<Z2> sq1 = p.first,
|
||||||
|
sq2 = p.second;
|
||||||
|
ptr<const module<Z2> > H = sq1.domain ();
|
||||||
|
|
||||||
|
unsigned w = homological_width (H);
|
||||||
|
assert (w >= 1 && w <= 7);
|
||||||
|
width_hist[w] ++;
|
||||||
|
|
||||||
|
assert (sq1.compose (sq1) == 0);
|
||||||
|
assert (sq2.compose (sq2) == sq1.compose (sq2).compose (sq1));
|
||||||
|
|
||||||
|
map<grading, basedvector<int, 1> > st
|
||||||
|
= compute_st (sq1, sq2);
|
||||||
|
for (map_const_iter<grading, basedvector<int, 1> > i = st; i; i ++)
|
||||||
|
{
|
||||||
|
if (i.val ()[1] != 0)
|
||||||
|
{
|
||||||
|
show (desc); newline ();
|
||||||
|
printf (" > has CP^2\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; knot_sq_files[i]; i ++)
|
||||||
|
{
|
||||||
|
gzfile_reader r (knot_sq_files[i]);
|
||||||
|
|
||||||
|
printf ("loading %s...\n", knot_sq_files[i]);
|
||||||
|
|
||||||
|
unsigned n = r.read_unsigned ();
|
||||||
|
for (unsigned i = 1; i <= n; i ++)
|
||||||
|
{
|
||||||
|
knot_desc desc (r);
|
||||||
|
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > p (r);
|
||||||
|
if (mutants % desc)
|
||||||
|
mutant_knot_sq.push (desc, p);
|
||||||
|
|
||||||
|
mod_map<Z2> sq1 = p.first,
|
||||||
|
sq2 = p.second;
|
||||||
|
ptr<const module<Z2> > H = sq1.domain ();
|
||||||
|
|
||||||
|
unsigned w = homological_width (H);
|
||||||
|
assert (w >= 1 && w <= 7);
|
||||||
|
width_hist[w] ++;
|
||||||
|
|
||||||
|
assert (sq1.compose (sq1) == 0);
|
||||||
|
assert (sq2.compose (sq2) == sq1.compose (sq2).compose (sq1));
|
||||||
|
|
||||||
|
map<grading, basedvector<int, 1> > st
|
||||||
|
= compute_st (sq1, sq2);
|
||||||
|
for (map_const_iter<grading, basedvector<int, 1> > i = st; i; i ++)
|
||||||
|
{
|
||||||
|
if (i.val ()[1] != 0)
|
||||||
|
{
|
||||||
|
show (desc); newline ();
|
||||||
|
printf (" > has CP^2\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("|mutant_knot_sq| = %d\n", mutant_knot_sq.card ());
|
||||||
|
printf ("width_hist:\n");
|
||||||
|
for (unsigned i = 1; i <= width_hist.size (); i ++)
|
||||||
|
{
|
||||||
|
printf (" % 2d: %d\n", i, width_hist[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned missing = 0,
|
||||||
|
compared = 0;
|
||||||
|
for (unsigned i = 11; i <= 15; i ++)
|
||||||
|
{
|
||||||
|
basedvector<basedvector<unsigned, 1>, 1> groups
|
||||||
|
= mutant_knot_groups (i);
|
||||||
|
|
||||||
|
for (unsigned j = 1; j <= groups.size (); j ++)
|
||||||
|
{
|
||||||
|
bool first = 1;
|
||||||
|
|
||||||
|
knot_desc desc_1;
|
||||||
|
ptr<const module<Z2> > H_1;
|
||||||
|
map<grading, basedvector<int, 1> > st_1;
|
||||||
|
|
||||||
|
for (unsigned k = 1; k <= groups[j].size (); k ++)
|
||||||
|
{
|
||||||
|
knot_desc desc (knot_desc::HTW, i, groups[j][k]);
|
||||||
|
|
||||||
|
if (mutant_knot_sq % desc)
|
||||||
|
{
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > p = mutant_knot_sq(desc);
|
||||||
|
|
||||||
|
mod_map<Z2> sq1 = p.first,
|
||||||
|
sq2 = p.second;
|
||||||
|
ptr<const module<Z2> > H = sq1.domain ();
|
||||||
|
|
||||||
|
map<grading, basedvector<int, 1> > st = compute_st (sq1, sq2);
|
||||||
|
|
||||||
|
if (first)
|
||||||
|
{
|
||||||
|
first = 0;
|
||||||
|
desc_1 = desc;
|
||||||
|
H_1 = H;
|
||||||
|
st_1 = st;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (H_1->free_poincare_polynomial ()
|
||||||
|
== H->free_poincare_polynomial ())
|
||||||
|
{
|
||||||
|
if (st_1 != st)
|
||||||
|
{
|
||||||
|
printf ("> DIFFER\n");
|
||||||
|
display (" ", desc_1);
|
||||||
|
display (" ", desc);
|
||||||
|
}
|
||||||
|
compared ++;
|
||||||
|
}
|
||||||
|
else if (mutant_mknot_sq % desc)
|
||||||
|
{
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > mp = mutant_mknot_sq(desc);
|
||||||
|
|
||||||
|
mod_map<Z2> msq1 = mp.first,
|
||||||
|
msq2 = mp.second;
|
||||||
|
ptr<const module<Z2> > mH = msq1.domain ();
|
||||||
|
|
||||||
|
assert (H_1->free_poincare_polynomial ()
|
||||||
|
== mH->free_poincare_polynomial ());
|
||||||
|
|
||||||
|
map<grading, basedvector<int, 1> > mst
|
||||||
|
= compute_st (msq1, msq2);
|
||||||
|
|
||||||
|
if (st_1 != mst)
|
||||||
|
{
|
||||||
|
printf ("> DIFFER\n");
|
||||||
|
display (" ", desc_1);
|
||||||
|
display (" ", desc);
|
||||||
|
}
|
||||||
|
compared ++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
missing ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
missing ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("missing = %d\n", missing);
|
||||||
|
printf ("compared = %d\n", compared);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
compute_mutant_mirrors ()
|
||||||
|
{
|
||||||
|
const char *knot_sq_files[] = {
|
||||||
|
// "knot_sq/K11_sq.dat.gz",
|
||||||
|
// "knot_sq/K12_sq.dat.gz",
|
||||||
|
// "knot_sq/K13_sq.dat.gz",
|
||||||
|
"knot_sq/K14_sq.dat.gz",
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
unsigned minn = 14,
|
||||||
|
maxn = 14;
|
||||||
|
|
||||||
|
hashset<knot_desc> mutants;
|
||||||
|
for (unsigned i = minn; i <= maxn; i ++)
|
||||||
|
{
|
||||||
|
basedvector<basedvector<unsigned, 1>, 1> groups
|
||||||
|
= mutant_knot_groups (i);
|
||||||
|
for (unsigned j = 1; j <= groups.size (); j ++)
|
||||||
|
{
|
||||||
|
for (unsigned k = 1; k <= groups[j].size (); k ++)
|
||||||
|
mutants += knot_desc (knot_desc::HTW, i, groups[j][k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("|mutants| = %d\n", mutants.card ());
|
||||||
|
|
||||||
|
hashmap<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > > mutant_knot_sq;
|
||||||
|
|
||||||
|
for (unsigned i = 0; knot_sq_files[i]; i ++)
|
||||||
|
{
|
||||||
|
gzfile_reader r (knot_sq_files[i]);
|
||||||
|
|
||||||
|
printf ("loading %s...\n", knot_sq_files[i]);
|
||||||
|
|
||||||
|
unsigned n = r.read_unsigned ();
|
||||||
|
for (unsigned i = 1; i <= n; i ++)
|
||||||
|
{
|
||||||
|
knot_desc k (r);
|
||||||
|
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > p (r);
|
||||||
|
if (mutants % k)
|
||||||
|
mutant_knot_sq.push (k, p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("|mutant_knot_sq| = %d\n", mutant_knot_sq.card ());
|
||||||
|
|
||||||
|
map<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > > mknot_kh_sq;
|
||||||
|
for (unsigned i = minn; i <= maxn; i ++)
|
||||||
|
{
|
||||||
|
basedvector<basedvector<unsigned, 1>, 1> groups
|
||||||
|
= mutant_knot_groups (i);
|
||||||
|
for (unsigned j = 1; j <= groups.size (); j ++)
|
||||||
|
{
|
||||||
|
unsigned n = groups[j].size ();
|
||||||
|
|
||||||
|
basedvector<ptr<const module<Z2> >, 1> group_H (n);
|
||||||
|
for (unsigned k = 1; k <= n; k ++)
|
||||||
|
{
|
||||||
|
knot_desc desc (knot_desc::HTW, i, groups[j][k]);
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > p = mutant_knot_sq(desc);
|
||||||
|
group_H[k] = p.first.domain ();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned k = 2; k <= n; k ++)
|
||||||
|
{
|
||||||
|
if (group_H[1]->free_poincare_polynomial ()
|
||||||
|
!= group_H[k]->free_poincare_polynomial ())
|
||||||
|
{
|
||||||
|
knot_desc desc (knot_desc::HTW, i, groups[j][k]);
|
||||||
|
show (desc); newline ();
|
||||||
|
|
||||||
|
knot_diagram kd (MIRROR, desc.diagram ());
|
||||||
|
|
||||||
|
cube<Z2> c (kd);
|
||||||
|
mod_map<Z2> d = c.compute_d (1, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
chain_complex_simplifier<Z2> s (c.khC, d, 1);
|
||||||
|
assert (s.new_d == 0);
|
||||||
|
|
||||||
|
steenrod_square sq (c, d, s);
|
||||||
|
mod_map<Z2> sq1 = sq.sq1 ();
|
||||||
|
mod_map<Z2> sq2 = sq.sq2 ();
|
||||||
|
|
||||||
|
ptr<const module<Z2> > H = sq1.domain ();
|
||||||
|
|
||||||
|
assert (group_H[1]->free_poincare_polynomial ()
|
||||||
|
== H->free_poincare_polynomial ());
|
||||||
|
|
||||||
|
char buf[1000];
|
||||||
|
assert (desc.t == knot_desc::HTW);
|
||||||
|
sprintf (buf, "mknot/K%d_%d.dat.gz", desc.i, desc.j);
|
||||||
|
gzfile_writer w (buf);
|
||||||
|
write (w, desc);
|
||||||
|
write (w, sq1);
|
||||||
|
write (w, sq2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
convert_mknots ()
|
||||||
|
{
|
||||||
|
hashmap<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > > mutant_mknot_sq;
|
||||||
|
|
||||||
|
for (unsigned i = 11; i <= 15; i ++)
|
||||||
|
{
|
||||||
|
basedvector<basedvector<unsigned, 1>, 1> groups
|
||||||
|
= mutant_knot_groups (i);
|
||||||
|
for (unsigned j = 1; j <= groups.size (); j ++)
|
||||||
|
{
|
||||||
|
unsigned n = groups[j].size ();
|
||||||
|
for (unsigned k = 1; k <= n; k ++)
|
||||||
|
{
|
||||||
|
knot_desc desc (knot_desc::HTW, i, groups[j][k]);
|
||||||
|
|
||||||
|
char buf[1000];
|
||||||
|
assert (desc.t == knot_desc::HTW);
|
||||||
|
sprintf (buf, "mknot/K%d_%d.dat.gz", desc.i, desc.j);
|
||||||
|
|
||||||
|
struct stat stat_buf;
|
||||||
|
if (stat (buf, &stat_buf) != 0)
|
||||||
|
{
|
||||||
|
if (errno != ENOENT)
|
||||||
|
{
|
||||||
|
stderror ("stat: %s", buf);
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf ("loading %s...\n", buf);
|
||||||
|
|
||||||
|
gzfile_reader r (buf);
|
||||||
|
|
||||||
|
knot_desc desc_2 (r);
|
||||||
|
assert (desc_2 == desc);
|
||||||
|
|
||||||
|
mod_map<Z2> sq1 (r);
|
||||||
|
mod_map<Z2> sq2 (r);
|
||||||
|
|
||||||
|
mutant_mknot_sq.push (desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > (sq1, sq2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gzfile_writer w ("knot_sq/mut_mknot.dat.gz");
|
||||||
|
write (w, mutant_mknot_sq);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
test_forgetful_ss ();
|
compute_mutant_mirrors ();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
test_knot_sq ();
|
||||||
|
convert_mknots ();
|
||||||
|
|
||||||
|
test_forgetful_ss ();
|
||||||
compute_twistedU ();
|
compute_twistedU ();
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
Loading…
Reference in New Issue
Block a user