Gauge Field Theories on Discrete Principal Fibre Bundles
Author
Matthew Maddock
Title
Gauge Field Theories on Discrete Principal Fibre Bundles
Description
A exploration of gauge field theories on discrete fibre bundles.
Category
Essays, Posts & Presentations
Keywords
Physics, group theory, discrete mathematics
URL
http://www.notebookarchive.org/2021-07-60v9k7r/
DOI
https://notebookarchive.org/2021-07-60v9k7r
Date Added
2021-07-13
Date Last Modified
2021-07-13
File Size
1.45 megabytes
Supplements
Rights
Redistribution rights reserved



WOLFRAM SUMMER SCHOOL 2021
CreateFibreBundleGraph
CreateFibreBundleGraph
This is the plan for this function, we are going to construct a function CreateFibreBundleGraph[baseSpace_Graph, group_, connection_] where the inputs are the three ingredients that one needs to construct a fibre bundle, the base space (a graph), a gauge group (list of group generators or built-in group) and a connection (an element of the gauge group) which defines all the connections on the bundle. We will want to generalise this so that one can define a connection for each edge and compute the corresponding bundle.
The plan now is to write a function that can do this, the function will output a graph that represents a discrete approximation to a continuous fibre bundle. Since the output of this function a graph so it is uniquely defined by a set of vertices V and edges E. We will need to decide how we want to name the vertices (and therefore the edges). I will chose to name the vertices as strings that follow the convention e.g. 1-f where 1 corresponds to the vertex 1 in the base space and f corresponds to an element in the fibre. If the base space B has n vertices and the fibre F has m vertices then the graph corresponding to the fibre bundle FB will have m·n vertices.
The plan now is to write a function that can do this, the function will output a graph that represents a discrete approximation to a continuous fibre bundle. Since the output of this function a graph so it is uniquely defined by a set of vertices V and edges E. We will need to decide how we want to name the vertices (and therefore the edges). I will chose to name the vertices as strings that follow the convention e.g. 1-f where 1 corresponds to the vertex 1 in the base space and f corresponds to an element in the fibre. If the base space B has n vertices and the fibre F has m vertices then the graph corresponding to the fibre bundle FB will have m·n vertices.
From Cayley’s theorem we know that every finite group is isomorphic to a subgroup of the permutation group. Therefore any discrete group which a user wants to use to approximate a continuous gauge group can be represented as a subgroup of some permutation group. Permutations can be represented in Mathematica as System`Cycles and any permutation can be represented as a disjoint union of cycles (Cycle Decomposition Theorem) therefore any discrete group can be naturally represented in Mathematica. Expression of this form (List of Cycles) will be the input for the gauge group.
The base space can be any graph, one of the cool applications of this function is to use some graph (or hypergraph) produced from the Wolfram model as the base space graph. Interesting!!!
The function below will be used to find the matrix representation of a permutation, this is important because the matrix representation of a permutation appears explicitly in the adjacency matrix of the fibre bundle.
The base space can be any graph, one of the cool applications of this function is to use some graph (or hypergraph) produced from the Wolfram model as the base space graph. Interesting!!!
The function below will be used to find the matrix representation of a permutation, this is important because the matrix representation of a permutation appears explicitly in the adjacency matrix of the fibre bundle.
In[]:=
?PermutationListPermutationList[Cycles[{{}}]]PermutationList[Cycles[{{1,2,3,4,5,6}}]]
Out[]=
Symbol | |
PermutationList[perm] returns a permutation list representation of permutation perm.PermutationList[perm,len] returns a permutation list of length len. | |
Out[]=
{}
Out[]=
{2,3,4,5,6,1}
In[]:=
PermToMat[a_,group_]:=If[PermutationList@a==={},IdentityMatrix[GroupOrder[group]],PermutationList@a//{Sort@#,#}&@#&//Transpose//Thread[Rule[#,1]]&//SparseArray[#,{GroupOrder[group],GroupOrder[group]}]&]
Now we will now create a example of inputs for our function
We now want a way to keep track of the connection associated with each edge in the base space.This function keeps track of the connection for each edge in the base space. This function will be incorporated later to construct more interesting bundles.
In[]:=
Clear[bConnection]bConnection::uasge="bConnection[basespace_Graph, connection_List] returns an associative array with keys that correspond to the edges of basespace and the labels the chosen connection for each edge. The input connection must be a list where each elements corresponds to the connection for each edge in basespace. If connection is a single entry then this connection is used for every edge.";bConnection[basespace_Graph,connection_]:=Module[{vert,edg},vert=basespace//VertexList;edg=basespace//EdgeList;Thread[Rule[edg,connection]]];
Now this is where the magic happens, here is CreateFibreBundleGraph[baseSpace_Graph, group_, connection_], this function uses the adjacency matrix of the base space and the adjacency matrix of the Cayley Graph that corresponds to the gauge group. We will use some nice built-in functions to do this.
In[]:=
Clear[CreateFibreBundleGraph]CreateFibreBundleGraph[baseSpace_Graph,groupGenerators_List,connection_]:=Module[{Group,adjbase,adjGroup,adjBundle,FibreBundle},Group=groupGenerators//PermutationGroup;adjbase=AdjacencyMatrix[baseSpace]//Normal;adjGroup=Group//CayleyGraph//UndirectedGraph//AdjacencyMatrix//Normal;adjBundle=adjbase/.0->a/.1->Normal[PermToMat[connection,Group]]//ReplacePart[#,{i_,i_}->adjGroup]&//#/.a->ConstantArray[0,{Group//GroupElements//Length,Group//GroupElements//Length}]&//ArrayFlatten//UpperTriangularize//(#+Transpose[#])&;FibreBundle=AdjacencyGraph[adjBundle]]
In[]:=
baseSpace=GridGraph[{5,5,5}];%//GraphPlot3Dgaugegroup=CyclicGroup[6]//GroupElements//{#[[2]]}&;%//PermutationGroup;%//GroupElements;conn=%[[1]];%%%//CayleyGraph//UndirectedGraphbConnection[baseSpace,conn]CreateFibreBundleGraph[baseSpace,gaugegroup,conn];%//GraphPlot3D
Out[]=
Out[]=
Out[]=
Out[]=
In[]:=
CreateFibreBundleGraph[GridGraph[{3}],gaugegroup,Cycles[{{1,2,3,4,5,6}}]];%//GraphPlot3D
Out[]=
In[]:=
baseSpace=GridGraph[{2,2,2}];%//GraphPlot3Dgaugegroup=CyclicGroup[6]//GroupElements//{#[[2]]}&;%//PermutationGroup//GroupElements;conn=%[[1]];CreateFibreBundleGraph[baseSpace,gaugegroup,conn];%//GraphPlot3D
Out[]=
Out[]=
Now the final part of the game is to to relabel the vertices of the fibre bundle so that the fibres can be easily read off. Not that it only works for Fibres that has no more than 26 vertices
In[]:=
Clear[RelabelGraph]RelabelGraph[g_Graph,base_Graph,GroupGenerators_List]:=Module[{group,fibres,labels,rules,vert,edg},group=GroupGenerators//PermutationGroup;fibres=Alphabet[][[1;;GroupOrder[group]]]//Table[i-#,{i,base//VertexList}]&;labels=fibres//Flatten;rules=Thread[Rule[g//VertexList,labels]];vert=g//VertexList//#/.rules&;edg=g//EdgeList//#/.rules&;HighlightGraph[Graph[vert,edg],fibres]]
In[]:=
base=GridGraph[{6}];gaugegroup=CyclicGroup[6]//GroupElements//{#[[2]]}&group=gaugegroup//PermutationGroup%//GroupOrderconn=Cycles[{{}}]
Out[]=
{Cycles[{{1,2,3,4,5,6}}]}
Out[]=
PermutationGroup[{Cycles[{{1,2,3,4,5,6}}]}]
Out[]=
6
Out[]=
Cycles[{}]
In[]:=
graph=CreateFibreBundleGraph[base,gaugegroup,Cycles[{{1,2,3,4,5,6}}]];%//GraphPlot3D%%//RelabelGraph[#,base,gaugegroup]&;%//GraphPlot3D%%//VertexList%%%//EdgeList
Out[]=
Out[]=
Out[]=
{1-a,1-b,1-c,1-d,1-e,1-f,2-a,2-b,2-c,2-d,2-e,2-f,3-a,3-b,3-c,3-d,3-e,3-f,4-a,4-b,4-c,4-d,4-e,4-f,5-a,5-b,5-c,5-d,5-e,5-f,6-a,6-b,6-c,6-d,6-e,6-f}
Out[]=
{1-a1-b,1-a1-f,1-a2-b,1-b1-c,1-b2-c,1-c1-d,1-c2-d,1-d1-e,1-d2-e,1-e1-f,1-e2-f,1-f2-a,2-a2-b,2-a2-f,2-a3-b,2-b2-c,2-b3-c,2-c2-d,2-c3-d,2-d2-e,2-d3-e,2-e2-f,2-e3-f,2-f3-a,3-a3-b,3-a3-f,3-a4-b,3-b3-c,3-b4-c,3-c3-d,3-c4-d,3-d3-e,3-d4-e,3-e3-f,3-e4-f,3-f4-a,4-a4-b,4-a4-f,4-a5-b,4-b4-c,4-b5-c,4-c4-d,4-c5-d,4-d4-e,4-d5-e,4-e4-f,4-e5-f,4-f5-a,5-a5-b,5-a5-f,5-a6-b,5-b5-c,5-b6-c,5-c5-d,5-c6-d,5-d5-e,5-d6-e,5-e5-f,5-e6-f,5-f6-a,6-a6-b,6-a6-f,6-b6-c,6-c6-d,6-d6-e,6-e6-f}
In[]:=
base=GridGraph[{3,3}];gaugegroup=CyclicGroup[6]//GroupElements//{#[[2]]}&group=gaugegroup//PermutationGroup%//GroupOrderconn=Cycles[{{}}]
Out[]=
{Cycles[{{1,2,3,4,5,6}}]}
Out[]=
PermutationGroup[{Cycles[{{1,2,3,4,5,6}}]}]
Out[]=
6
Out[]=
Cycles[{}]
In[]:=
graph=CreateFibreBundleGraph[base,gaugegroup,Cycles[{{1,2,3,4,5,6}}]];%//GraphPlot3D%%//RelabelGraph[#,base,gaugegroup]&;%//GraphPlot3D%%//VertexList%%%//EdgeList
Out[]=
Out[]=
Out[]=
{1-a,1-b,1-c,1-d,1-e,1-f,2-a,2-b,2-c,2-d,2-e,2-f,3-a,3-b,3-c,3-d,3-e,3-f,4-a,4-b,4-c,4-d,4-e,4-f,5-a,5-b,5-c,5-d,5-e,5-f,6-a,6-b,6-c,6-d,6-e,6-f,7-a,7-b,7-c,7-d,7-e,7-f,8-a,8-b,8-c,8-d,8-e,8-f,9-a,9-b,9-c,9-d,9-e,9-f}
Out[]=
{1-a1-b,1-a1-f,1-a2-b,1-a4-b,1-b1-c,1-b2-c,1-b4-c,1-c1-d,1-c2-d,1-c4-d,1-d1-e,1-d2-e,1-d4-e,1-e1-f,1-e2-f,1-e4-f,1-f2-a,1-f4-a,2-a2-b,2-a2-f,2-a3-b,2-a5-b,2-b2-c,2-b3-c,2-b5-c,2-c2-d,2-c3-d,2-c5-d,2-d2-e,2-d3-e,2-d5-e,2-e2-f,2-e3-f,2-e5-f,2-f3-a,2-f5-a,3-a3-b,3-a3-f,3-a6-b,3-b3-c,3-b6-c,3-c3-d,3-c6-d,3-d3-e,3-d6-e,3-e3-f,3-e6-f,3-f6-a,4-a4-b,4-a4-f,4-a5-b,4-a7-b,4-b4-c,4-b5-c,4-b7-c,4-c4-d,4-c5-d,4-c7-d,4-d4-e,4-d5-e,4-d7-e,4-e4-f,4-e5-f,4-e7-f,4-f5-a,4-f7-a,5-a5-b,5-a5-f,5-a6-b,5-a8-b,5-b5-c,5-b6-c,5-b8-c,5-c5-d,5-c6-d,5-c8-d,5-d5-e,5-d6-e,5-d8-e,5-e5-f,5-e6-f,5-e8-f,5-f6-a,5-f8-a,6-a6-b,6-a6-f,6-a9-b,6-b6-c,6-b9-c,6-c6-d,6-c9-d,6-d6-e,6-d9-e,6-e6-f,6-e9-f,6-f9-a,7-a7-b,7-a7-f,7-a8-b,7-b7-c,7-b8-c,7-c7-d,7-c8-d,7-d7-e,7-d8-e,7-e7-f,7-e8-f,7-f8-a,8-a8-b,8-a8-f,8-a9-b,8-b8-c,8-b9-c,8-c8-d,8-c9-d,8-d8-e,8-d9-e,8-e8-f,8-e9-f,8-f9-a,9-a9-b,9-a9-f,9-b9-c,9-c9-d,9-d9-e,9-e9-f}
In[]:=
base=GridGraph[{5,5,5}];gaugegroup=CyclicGroup[6]//GroupElements//{#[[2]]}&group=gaugegroup//PermutationGroup%//GroupOrderconn=Cycles[{{}}]
Out[]=
{Cycles[{{1,2,3,4,5,6}}]}
Out[]=
PermutationGroup[{Cycles[{{1,2,3,4,5,6}}]}]
Out[]=
6
Out[]=
Cycles[{}]
In[]:=
graph=CreateFibreBundleGraph[base,gaugegroup,Cycles[{{1,2,3,4,5,6}}]];%//GraphPlot3D%%//RelabelGraph[#,base,gaugegroup]&;%//GraphPlot3D
Out[]=
Out[]=
Functions that do not have a home at the moment.
Functions that do not have a home at the moment.
In[]:=
Clear[bFibres]bFibres::usage="bFibres[basespace_Graph, group_Graph] returns an associative array with keys that correspond to the vertices of basespace and the labels are given by the fibres given by group. The group must be a list of group elements or a built-in group.";bFibres[basespace_Graph,group_List]:=Module[{vert,G},vert=basespace//VertexList;<|Thread[Rule[vert,G]]|>/.G->group];bFibres[basespace_Graph,group_]:=Module[{vert,G},vert=basespace//VertexList;<|Thread[Rule[vert,G]]|>/.G->GroupElements[group]];
In[]:=
baseSpace=GridGraph[{3,3}];gaugegroup=CyclicGroup[6]//GroupElementsbFibres[baseSpace,gaugegroup]bFibres[baseSpace,CyclicGroup[6]]
Out[]=
{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]}
Out[]=
1{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},2{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},3{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},4{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},5{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},6{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},7{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},8{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},9{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]}
Out[]=
1{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},2{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},3{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},4{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},5{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},6{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},7{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},8{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]},9{Cycles[{}],Cycles[{{1,2,3,4,5,6}}],Cycles[{{1,3,5},{2,4,6}}],Cycles[{{1,4},{2,5},{3,6}}],Cycles[{{1,5,3},{2,6,4}}],Cycles[{{1,6,5,4,3,2}}]}
In[]:=
Clear[bConnection]bConnection::uasge="bConnection[basespace_Graph, connection_List] returns an associative array with keys that correspond to the edges of basespace and the labels the chosen connection for each edge. The input connection must be a list where each elements corresponds to the connection for each edge in basespace. If connection is a single entry then this connection is used for every edge.";bConnection[basespace_Graph,connection_]:=Module[{vert,edg},vert=basespace//VertexList;edg=baseSpace//EdgeList;Thread[Rule[edg,connection]]];
In[]:=
bConnection[baseSpace,GroupElements[CyclicGroup[6]][[1]]]bConnection[baseSpace,GroupElements[CyclicGroup[5]][[2]]]
Out[]=
{12Cycles[{}],14Cycles[{}],23Cycles[{}],25Cycles[{}],36Cycles[{}],45Cycles[{}],47Cycles[{}],56Cycles[{}],58Cycles[{}],69Cycles[{}],78Cycles[{}],89Cycles[{}]}
Out[]=
{12Cycles[{{1,2,3,4,5}}],14Cycles[{{1,2,3,4,5}}],23Cycles[{{1,2,3,4,5}}],25Cycles[{{1,2,3,4,5}}],36Cycles[{{1,2,3,4,5}}],45Cycles[{{1,2,3,4,5}}],47Cycles[{{1,2,3,4,5}}],56Cycles[{{1,2,3,4,5}}],58Cycles[{{1,2,3,4,5}}],69Cycles[{{1,2,3,4,5}}],78Cycles[{{1,2,3,4,5}}],89Cycles[{{1,2,3,4,5}}]}


Cite this as: Matthew Maddock, "Gauge Field Theories on Discrete Principal Fibre Bundles" from the Notebook Archive (2021), https://notebookarchive.org/2021-07-60v9k7r

Download

