UpdateGSO:=function(v) local d,m,vs,f,i,j,mu; d:=Length(v); m:=IdentityMat(d,1); vs:=[]; for i in [1..d] do f:=v[i]; for j in [1..i-1] do mu:=v[i]*vs[j]/(vs[j]*vs[j]); m[i][j]:=mu; f:=f-mu*vs[j]; od; vs[i]:=f; od; return [m,List(vs,i->i^2)]; end; Round:=function(a) return SignInt(a)*Int(AbsInt(a)+1/2); end;