Skip to main content
2 of 5
added 201 characters in body
user avatar
user avatar

Studying finite groups with Euclidean geometry?

Since each finite group $G$ can be considered as a subgroup of the symmetric group, by Cayley's theorem, we might see the elements of $G$ as permutations $\pi$.

Consider for each $\pi \in G$ the set:

$$X(\pi) := \{ (\pi(i),\pi(j)) | 1 \le i < j \le |G| \}$$

Then the Jaccard similarity-kernel, which is positive definite, is:

$$J(\pi,\pi'):= \frac{ |X(\pi) \cap X(\pi')|}{|X(\pi) \cup X(\pi')|}$$

We can consider the matrix

$$M = (J(g,h)_{g,h \in G})$$

ordered somehow by an ordering of $G$.

Since $J$ is a kernel and a similarity, we can write the distance between two elements in $G$ as:

$$d(g,h) = \sqrt{J(g,g) + J(h,h)-2J(g,h)} = \sqrt{2-2J(g,h)}$$

A similarity $s:X\times X \rightarrow \mathbb{R}$ is defined in Encyclopedia of Distances as:

  1. $s(x,y) \ge 0 \forall x,y \in X$

  2. $s(x,y) = s(y,x) \forall x,y \in X$

  3. $s(x,y) \le s(x,x) \forall x,x \in X$

  4. $s(x,y) = s(x,x) \iff x=y$

A positive definite kernel $k$ is a positive definite function on some set $X$.

A "kernel-similarity" is a function $f$ which is a kernel and a similiarity.

One can prove that the above Jaccard function is a kernel-similarity.

My question is, if one can gain any insight for finite groups by studying properties of the Euclidean geometry of the embedded vectors $\phi(g)$.

For instance the matrix $M$ is a Gram-Matrix of linear independent vectors, hence one can look at the volume of these vectors:

$$\operatorname{vol}(G): = \sqrt{\det(M_G)}$$

Here is some SAGEMATH code which implements this:

from sage.matrix.operation_table import OperationTable

def Jaccard(A,B):
    XA = set([ (x,A[x]) for x in range(len(A))])
    XB = set([ (x,B[x]) for x in range(len(A))])
    print(XA,XB)
    return QQ(len(XA.intersection(XB)))/QQ(len(XA.union(XB)))


def distJ(A,B):
    return sqrt(Jaccard(A,A)+Jaccard(B,B)-2*Jaccard(A,B))

import itertools

def Jaccard(A,B):
    pairs = list(itertools.combinations(range(0, len(A)), 2))
    XA = set([ (A[x],A[y]) for x,y in pairs])
    XB = set([ (B[x],B[y]) for x,y in pairs])
    return QQ(len(XA.intersection(XB)))/QQ(len(XA.union(XB)))

def GramMatrix(finiteGroup):
    G = finiteGroup
    O = OperationTable(G,operator.mul,names="elements")
    M = matrix([[ Jaccard(Permutation([xx+1 for xx in x]),Permutation([yy+1 for yy in y])) for x in O.table()] for y in O.table()],ring=QQ) #RDF)
    return M

def regRepr(finiteGroup):
    G = finiteGroup
    O = OperationTable(G,operator.mul,names="elements")
    #print(O.table())
    ll = [ Permutation([xx +1 for xx in x]).to_matrix() for x in O.table()] 
    return ll

rD4 = (regRepr(DihedralGroup(4)))
#print(rD4)
GD4 = GramMatrix(DihedralGroup(4))
vecs = GD4.columns()
print(vecs)
for M in rD4:
    print("--")
    for v in vecs:
      print(v,M*v)
      print(M*v in vecs)

groups = [SymmetricGroup(2),CyclicPermutationGroup(3),CyclicPermutationGroup(4),KleinFourGroup(),CyclicPermutationGroup(5),CyclicPermutationGroup(6),SymmetricGroup(3),QuaternionGroup(),DihedralGroup(5),AlternatingGroup(4),SymmetricGroup(4),DihedralGroup(8)]
for G in groups: #G = DihedralGroup(4)
    print("Group G:=")
    print(G)
    M = GramMatrix(G)
    print("Gram-Matrix:")
    print(M)
    print("cholesky = ")
    print(M.cholesky())
    print("characteristic-polynomial of Gram-Matrix=")
    print(factor(M.charpoly()))
    print("Volume of G:")
    print(sqrt(M.det()))

Thanks for your help!

user6671