QEtaFundamentalDomain

fundom.spad line 92 [edit on github]

QEtaFundamentalDomain finds a matrix in SL2Z that transforms a given t in the upper half plane of the form t=u + i*v*sqrt(D) where u and v are rational numbers and D is a positive sqarefree integer into an element z=r+i*s*sqrt(D) in the standard fundamental domain.

decomposeIntoSTProduct: Matrix Integer -> FreeGroup Symbol

decomposeIntoSTProduct(m) returns a non-commutative powerproduct fgs in the variables S and T such that m is equal to this product if S is replaced by the matrix [[0,-1],[1,0]] and T by the matrix [[1,1],[0,1]]. Suppose that s:=”S”::Symbol;t:=”T”::Symbol; mat(x:Record(gen:Symbol,exp:ZZ)):Matrix(Integer) == (x.gen=t=>matrix[[1,x.exp],[0,1]];z:=positiveRemainder(x.exp,4); z=0=>unit;z=2=>-unit;z=1=>matrix[[0,-1],[1,0]];matrix[[0,1],[-1,0]]); unit:=matrix[[1,0],[0,1]]; M:=reduce(_*,[mat f for f in factors fgs],unit) then m=M.

toFundamentalDomain: (AlgebraicNumber, PositiveInteger) -> Matrix Integer

If t=(u+v*sqrt(-d))/w where u, v, w, d are integers and d>0, w>0, then toFundamentalDomain(t,k) returns a matrix m such that m is a finite product of powers the matrices S=matrix[[0,-k],[1,0]] and T=matrix[[1,k],[0,1]] such that if a+sqrt(-d)*b=moebiusTransform(m, (u+v*sqrt(-d))/w), then -k/2<=a<k/2 and a^2+b^2*d>=k. The value k=1 corresponds to the group SL2Z whereas k=2 corresponds to the Radu-Wurm group.