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;