File: spunknotcomp.gi

package info (click to toggle)
gap-hap 1.74%2Bds-1
  • links: PTS
  • area: main
  • in suites: sid
  • size: 58,664 kB
  • sloc: xml: 16,678; sh: 197; javascript: 155; makefile: 121; ansic: 47; perl: 24
file content (134 lines) | stat: -rw-r--r-- 5,001 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#DeclareGlobalFunction("SpunKnotCompliment");
#DeclareGlobalFunction("SpunAboutInitialHyperPlane");
###############################################################################
######################## Spinning Knot Complements ############################
###############################################################################
################# Input: an integer pair (n,p) corresponding ##################
######################## to the pth prime knot on n crossings, ################
######################## denoted by K. ########################################
################ Output: a 5-dimensional regular CW-complex S(K*) #############
######################## homotopy equivalent to the complement ################
######################## of the spinning of K* (a knotted arc formed ##########
######################## from K by removing an unknotted segment) #############
######################## about a plane. #######################################
###############################################################################
InstallGlobalFunction(SpunKnotComplement,
function(k)

    local
          d, K, DeletedPair, pair, C, U, C2, omicron;

    d:=[0,0,1,1,2,3,7,21,49,165,552];

    if IsList(k)
        then
        if not (IsInt(k[1]) and IsInt(k[2]) and SignInt(k[1])=1 and SignInt(k[2])=1)
            then
            Error("the input must be a pair of positive integers.\n");
        elif k[1]>11
            then
            Error("only knots with less than 12 crossings are stored in HAP.\n");
        elif k[2]>d[k[1]]
            then
            Error("no such prime knot exists.\n");
        fi;
        K:=PureCubicalKnot(k[1],k[2]);
    elif IsPureComplex(k)
        then
        K:=ShallowCopy(k);
    else
        Error("input must be an integer pair or a knot.\n");
    fi;

    DeletedPair:=function(K)
        # inputs a cubical knot
        # outputs a list of cubical complexes [C,U]
        # C being the complement of K with a certain line removed
        # (except for its end-points)
        # U is a plane intersecting C at just these endpoints
        local
              C, array, 0row, i, pos, a, b, subarray, j;

        C:=PureComplexComplement(K);
        array:=ShallowCopy(C!.binaryArray);
        0row:=0; # location of the line to be altered

        while 0row=0
            do
            for i in [1..Length(array[2])]
                do
                if 0 in array[2][i]
                    then
                    0row:=0row+i;
                    break;
                fi;
            od;
        od;

        pos:=Positions(array[2][0row],0);
        a:=pos[1]; # the endpoints of 0row
        b:=pos[Length(pos)];

        array[2][0row]:=0*ShallowCopy(array[2][0row])+1;
        array[2][0row][a]:=0;
        array[2][0row][b]:=0;
        array[1][0row]:=ShallowCopy(array[2][0row]);

        subarray:=0*ShallowCopy(array); # the plane about which the knot
        subarray[1]:=ShallowCopy(array[1]); # complement will be spun

        return [PureCubicalComplex(array), PureCubicalComplex(subarray)];

    end;

    pair:=DeletedPair(K);
    C:=ShallowCopy(pair[1]);
    U:=ShallowCopy(pair[2]);
    C2:=ContractedComplex(C,U);

    omicron:=RegularCWMap(C2,U);

    return Spin(omicron);

end);
###############################################################################
###############################################################################

###############################################################################
######################## Spinning About Hyperplane ##############################
###############################################################################
################# Input: Pure cubical Complex K ###############################
################ Output: a regular CW-complex S(K) ############################
######################## homotopy equivalent to the space got  ################
######################## by spinning K about the 'initial' hyperplane #########
###############################################################################
InstallGlobalFunction(SpunAboutHyperplane,
function(K)
local U,i,inc;

U:=1*K!.binaryArray;
for i in [2..Length(U)] do    ##CHANGED
U[i]:=0*U[i];
od;
U:=PureCubicalComplex(U);
inc:=RegularCWMap(K,U);

return ContractedComplex(Spin(inc));
end);
###############################################################################
###############################################################################

###############################################################################
###############################################################################
InstallGlobalFunction(SpunLinkComplement,
function(K)
local C,Y;
Y:=PureCubicalKnot(K);
Y:=PureComplexComplement(Y);
Y:=SpunAboutHyperplane(Y);
Y:=ContractedComplex(Y);
return Y;
end);
###############################################################################
###############################################################################