how can you tell if two lattices are the same

87 Views Asked by At

I'm looking at three different definitions of the $E_8$ lattice :

$G_a$ is the coding theory version

$G_b$ is the root lattice version

$G_c$ is the wiki version

According to this old question the way to check is to

(1) calculate "hermite normal form" (HNF) and see if they're the same

(2) check of $G_1 G_2^{-1}$ is integral and unimodular (det=1).

First problem $G_c$ is not an integral, so I multiplied by $2$ and calculated HNF's using gap :

Ga:=
[ [  4,  0,  0,  0,  2,  2,  2,  2 ],
  [  0,  4,  0,  0,  2,  0,  0,  0 ],
  [  0,  0,  4,  0,  2,  2,  0,  0 ],
  [  0,  0,  0,  4,  0,  2,  2,  0 ],
  [  2,  2,  2,  0,  4,  2,  2,  2 ],
  [  2,  0,  2,  2,  2,  4,  2,  2 ],
  [  2,  0,  0,  2,  2,  2,  4,  2 ],
  [  2,  0,  0,  0,  2,  2,  2,  4 ] ];

Gb:=
[ [   2,   0,  -1,   0,   0,   0,   0,   0 ],
  [   0,   2,   0,  -1,   0,   0,   0,   0 ],
  [  -1,   0,   2,  -1,   0,   0,   0,   0 ],
  [   0,  -1,  -1,   2,  -1,   0,   0,   0 ],
  [   0,   0,   0,  -1,   2,  -1,   0,   0 ],
  [   0,   0,   0,   0,  -1,   2,  -1,   0 ],
  [   0,   0,   0,   0,   0,  -1,   2,  -1 ],
  [   0,   0,   0,   0,   0,   0,  -1,   2 ] ];

Gc:=
[ [    2,   -1,    0,    0,    0,    0,    0,  1/2 ],
  [    0,    1,   -1,    0,    0,    0,    0,  1/2 ],
  [    0,    0,    1,   -1,    0,    0,    0,  1/2 ],
  [    0,    0,    0,    1,   -1,    0,    0,  1/2 ],
  [    0,    0,    0,    0,    1,   -1,    0,  1/2 ],
  [    0,    0,    0,    0,    0,    1,   -1,  1/2 ],
  [    0,    0,    0,    0,    0,    0,    1,  1/2 ],
  [    0,    0,    0,    0,    0,    0,    0,  1/2 ] ];

PrintArray(HermiteNormalFormIntegerMat(Ga));Print("\n");
[ [  2,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  2,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  2,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  2,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  2,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  2,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  2,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  2 ] ]

PrintArray(HermiteNormalFormIntegerMat(Gb));Print("\n");
[ [  1,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  1,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  1,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  1,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  1 ] ]

PrintArray(HermiteNormalFormIntegerMat(2*Gc));Print("\n");
[ [  4,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  2,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  2,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  2,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  2,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  2,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  2,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  1 ] ]

Trying the second method: $G_a G_b^{-1}$ is integral but determinant is $256$. Here I gave up; things don't seem to fit. Does anyone know how this is really done?

1

There are 1 best solutions below

0
On

Your definition is fine if you consider the lattice as a subset of $\mathbb{R}^n$. The issue is that the lattices in your examples are not the same in this way (e.g. $G_a$ does not have the same set of vectors as $G_b$), but under weaker equivalences -- say vectors up to scalar, or Gram matrix up to scalar.

Why is this done? Scaling or base changes might avoid denominators or irrational entries, or make the description of certain objects "easier". They are called the same name, since the for the purposes of the case in which they are considered the weaker equivalence is sufficient. Analogy: Cow/Buffalo/Soy/Almond "Milk".)