Closely related to totally positive definite lattices are Lorentzian lattices. These are defined over totally real fields, and have exactly one embedding for which the lattice is not positive definite, at which it has a Lorentzian signature (d - 1, 1) in dimension d.
A vector that has negative norm at this distinguished embedding is said to be timelike, while a vector with totally positive norm is spacelike.
Given a number field lattice L over a totally real field, return true f L is Lorentzian and if so, also a return a lattice vector that has negative norm at the given embedding.
Given a lattice field vector v in a Lorentzian lattice L return true if v is timelike (respectively spacelike). If the lattice is not Lorentzian, an error is signaled.
NaturalAction: BoolElt Default: false
Given a number field lattice L and a timelike vector v in it, determine the joint stabilizer. This is computed by determining the stabilizer (automorphism group) of the orthogonal complement of the vector and extending it to the lattice by requiring the vector also to be fixed. In other words, the group A=(Aut)(v direct-sum vperp) is computed. The subgroup of A that stabilizes the lattice is then returned, while A is returned as a second value. If the NaturalAction vararg is set, the transformations are rewritten on the ambient space.
NaturalAction: BoolElt Default: false
Given a number field lattice L and two timelike vectors v and w in it, determine whether there is an automorphism of L that sends w to v, and if so return such an isometry as the second argument. If the NaturalAction vararg is set, transformations are rewritten on the ambient space.
We construct an easy Lorentzian lattice and compute isometries and automorphism group with various timelike vectors.
> K<u> := QuadraticField(5); > G := DiagonalMatrix([-(u+1)/2,1,1,1]); > L := NumberFieldLattice(K,4 : Gram:=G); > IsLorentzian(L); true (1 0 0 0) 1 > v := L![(u+1)/2,(u+1)/2,0,1]; > w := L![(u+1),(u+3)/2,(u+1)/2,(u+3)/2]; > assert IsTimelike(v) and IsTimelike(w); > Norm(v), Norm(w); 1/2*(-u + 1) 1/2*(-u + 1) > b, T := IsIsometric(L,v,w); assert b; T; [ 2*u + 5 1/2*(5*u + 11) u + 2 1/2*(u + 1)] [1/2*(-3*u - 5) 1/2*(-3*u - 7) 1/2*(-u - 3) 1/2*(-u - 1)] [ 1/2*(-u - 1) 1/2*(-u - 1) 1/2*(-u - 1) 0] [ -u - 2 -u - 3 1/2*(-u - 1) 0] > assert T*w eq v; > #AutomorphismGroup(L,L![1,0,1,(3-u)/2]); 16 > #AutomorphismGroup(L,L![1,0,0,0]); 48 > #AutomorphismGroup(L,L![1,1,0,0]); 48 > #AutomorphismGroup(L,L![1,(u-1)/2,(u-1)/2,(u-1)/2]); 120 > s := L![1,0,(u-1)/2,(u-1)/2]; > A, B := AutomorphismGroup(L,s); > #A,#B; // the automorphism group of s+O is larger than L 20 40 > O := OrthogonalComplement(L,s); // s+O has index 5 in L > assert #AutomorphismGroup(O) eq #B; > Norm(Determinant(sub<L|[s]>+O)/Determinant(L)); 25