(* :Title: framedDGA, Version 1, 7 July 2004 *) (* :Author: Lenhard Ng, American Institute of Mathematics and Stanford University *) (* :Summary: This is the noncommutative version of the Mathematica package to calculate framed knot contact homology. This package accompanies `Framed knot contact homology', arXiv:math.GT/0407071, and can be downloaded from the author's homepage at . It requires installing the NCAlgebra package from . Save this file as `framedDGA.m', and then input the package by typing `< If[m == j, 1, 0], {m, 1, n}], {i, 1, n}, {j, 1, n}]; PhiRmod[n_, list_] := Table[phimatrixmod[n + 1, list][[ n + 1,j]] /. Table[a[n + 1, m] -> If[m == i, 1, 0], {m, 1, n}], {i, 1, n}, {j, 1, n}]; PhiL[list_] := PhiLmod[size[list], list]; PhiR[list_] := PhiRmod[size[list], list]; trivialA[n_] := Table[ If[i == j, -1 - \[Mu], If[i > j, a[i, j], a[i, j] \[Mu]]], {i, 1, n}, {j, 1, n}]; vect[list_, ll_] := Table[If[i == 1, ll, 1], {i, 1, size[list]}]; diag[list_] := Table[If[i == j, list[[i]], 0], {i, 1, Length[list]}, {j, 1, Length[list]}]; phinew[list_] := MatMult[diag[vect[list, \[Lambda]]], PhiL[ list], trivialA[size[list]], PhiR[list], diag[vect[list, 1/\[Lambda]]]]; dBframed[list_] := trivialA[size[list]] - MatMult[diag[vect[list, \[Lambda]]], PhiL[list], trivialA[size[list]]]; dCframed[list_] := trivialA[size[list]] - MatMult[trivialA[size[list]], PhiR[list], \ diag[vect[list, 1/\[Lambda]]]]; trivialB[n_] := Table[b[i, j], {i, 1, n}, {j, 1, n}]; trivialC[n_] := Table[c[i, j], {i, 1, n}, {j, 1, n}]; dDframed[list_] := -MatMult[IdentityMatrix[size[ list]] - MatMult[diag[vect[list, \[Lambda]]], PhiL[list]], trivialC[size[list]]] \ + MatMult[trivialB[size[list]], IdentityMatrix[size[list]] - MatMult[ PhiR[list], diag[vect[list, 1/\[Lambda]]]]]; dEframed[list_] := Table[b[i, i] + MatMult[diag[vect[list, \[Lambda]]], PhiL[list], trivialC[size[list]]][[i, i]], {i, 1, size[list]}]; writhe[list_] := Sum[If[list[[i]] > 0, 1, -1], {i, 1, Length[list]}]; dB[list_] := dBframed[list] /. {\[Lambda] -> \[Lambda] \[Mu]^(-writhe[list])}; dC[list_] := dCframed[list] /. {\[Lambda] -> \[Lambda] \[Mu]^(-writhe[list])}; dD[list_] := dDframed[list] /. {\[Lambda] -> \[Lambda] \[Mu]^(-writhe[list])}; dE[list_] := dEframed[list] /. {\[Lambda] -> \[Lambda] \[Mu]^(-writhe[list])}; cordalg[list_] := {dB[list],dC[list]}; d[list_] := Module[{}, Print["The differential for the 0-framed knot DGA of ", list, " is given by:"]; For[i = 1, i < size[list] + 1, i++, For[j = 1, j < size[list] + 1, j++, Print["\[PartialD] b[", i, ",", j, "] = ", NCExpand[dB[list][[i,j]]]]]]; For[i = 1, i < size[list] + 1, i++, For[j = 1, j < size[list] + 1, j++, Print["\[PartialD] c[", i, ",", j, "] = ", NCExpand[dC[list][[i,j]]]]]]; For[i = 1, i < size[list] + 1, i++, For[j = 1, j < size[list] + 1, j++, Print["\[PartialD] d[", i, ",", j, "] = ", NCExpand[dD[list][[i,j]]]]]]; For[i = 1, i < size[list] + 1, i++, Print["\[PartialD] e[", i, "] = ", NCExpand[ dE[list][[i]]]]]]; alist[n_] := Flatten[Table[Table[{a[i, j], a[j, i]}, {j, i + 1, n}], {i, 1, n - 1}]]; base[n_, d_] := Table[IntegerDigits[i, d, n], {i, 0, d^n - 1}]; shift[coll_, d_] := Table[Table[coll[[i,j]] + Floor[d/2] - d + 1, {j, 1, Length[coll[[1]]]}], {i, 1, Length[coll]}]; full[n_, d_] := shift[base[n, d], d]; eval[expr_, set_, list_, l_, m_] := expr /. Flatten[{Table[{list[[i]] -> set[[i]]}, {i, 1, Length[list]}], \[Lambda]->l, \[Mu]->m}]; cull[n_, expr_, coll_, d_, l_, m_] := Flatten[Table[If[Mod[Numerator[eval[expr, coll[[i]], alist[n], l, m]], d] == 0, {coll[[i]]}, {}], {i, 1, Length[coll]}], 1]; Auglist[{}, n_, d_, l_, m_] := full[n*(n - 1), d]; Auglist[list_, n_, d_, l_, m_] := cull[n, list[[1]], Auglist[trunc[list], n, d, l, m], d, l, m]; Augmod[list_, n_, d_, l_, m_] := If[ {GCD[d, l], GCD[d, m]} == {1, 1}, Length[Auglist[Flatten[list], n, d, l, m]], Print[ "The values for \[Lambda] and \[Mu] must be relatively prime to the modulus." ]]; Aug[list_, p_, l_, m_] := Augmod[list, Length[list[[1]]], p, l, m];