signature.sa
Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
--Copyright (C) 2003 Kouji KODAMA
class SIGNATURE
class SIGNATURE is
-- Signature of knot.
mark_braid(braid:BRAID,out gn:INT, out gen_s,out gen_e:ARRAY{INT}) is
-- mark start/end of generator in H1(Seifert surface) to braid word
gen_s:=#(braid.size); gen_s.to_val(0);
gen_e:=#(braid.size); gen_e.to_val(0);
loop string:INT:=1.upto!(braid.index-1);
g1:INT:=0; -- # of generator on current string
last_pos:INT:=0;
loop i::=braid.w.ind!;
if string=braid[i].abs then
if g1>0 then gen_e[i]:=gn+g1; end;
g1:=g1+1; gen_s[i]:=gn+g1; last_pos:=i;
end;
end;
if g1>0 then g1:=g1-1; gen_s[last_pos]:=0; gn:=gn+g1; end;
end;
end;
SeifertMatrix(braid:BRAID):MAT_INTI is
gen_s,gen_e:ARRAY{INT};
gn:INT; -- #of generator of H1(Seifert surface).
mark_braid(braid, out gn, out gen_s, out gen_e);
V:MAT_INTI:=#(gn,gn); V.clear;
loop g:INT:=1.upto!(gn);
i1:INT:=gen_s.index_of(g);
i2:INT:=gen_e.index_of(g);
if braid[i1].sign=1 then V[g-1,g-1]:=V[g-1,g-1]-1.inti; end;
if gen_e[i1]>0 and braid[i1]>0 then V[g-1,gen_e[i1]-1]:=V[g-1,gen_e[i1]-1]+1.inti; end;
loop i:INT:=(i1+1).upto!(i2-1);
if braid[i].abs=braid[i1].abs-1 then
if gen_s[i]>0 then V[g-1,gen_s[i]-1]:=V[g-1,gen_s[i]-1]+1.inti; end;
if gen_e[i]>0 then V[g-1,gen_e[i]-1]:=V[g-1,gen_e[i]-1]-1.inti; end;
-- elsif braid[i].abs=braid[i1].abs+1 then -- Do nothing.
end;
end;
if braid[i2].sign=-1 then V[g-1,g-1]:=V[g-1,g-1]+1.inti; end;
if gen_s[i2]>0 and braid[i2]<0 then V[g-1,gen_s[i2]-1]:=V[g-1,gen_s[i2]-1]-1.inti; end;
end;
return V;
end;
Signature(TCode:TCODE):INTI is
braid:BRAID;
if BRAID_CNV::TCode2Braid(TCode, out braid).not then
#OUT+"Failed to make braid.\n"; return 0.inti;
end;
V::=SeifertMatrix(braid); -- #OUT+"Seifert matrix:\n"+V.str+"\n"; OUT::flush;
return (V+V.trans).signature;
end;
Signature(TCode:TCODE) is
LOGOUT::Title("Signature=",Signature(TCode).str); #LOGOUT+"\n"; LOGOUT::flush;
end;
end;