Group Abstract Group Abstract

Message Boards Message Boards

0
|
5.3K Views
|
10 Replies
|
5 Total Likes
View groups...
Share
Share this post:

Create the abstract group (or space group) using relators (or generators).

Posted 3 years ago

The table 5.1 of the famous book "The mathematical theory of symmetry in solids" by C. J. Bradley & A. P. Cracknell (called the BC book hereafter), defined the relations, classes, character tables, and matrix representatives for the abstract groups needed in the tabulation of the representations of the 230 space groups. Here you can find a PDF version of the book's most recent 2010 revised edition.

But unfortunately, the book does not provide the multiplication table corresponding to these abstract groups. So, I want to construct the abstract group multiplication table using the group elements symbolically with the help of Wolfram language. For your information, I listed the abstract group information of G^3_8 given in the above book as an example:

enter image description here

And I also represented the corresponding result given by the SpaceGroupIrep package, which can be seen as a Mathematica based database and group theory toolkit built on the above-mentioned book:

enter image description here

Any hints for solving this problem will be highly appreciated.

Regards, HZ

POSTED BY: Hongyi Zhao
10 Replies

It's amazing where our thoughts come from. As from out of the blue while reading a book about a beech wood in England I realized that both myself and Danny overlooked that fact that the space groups are infinite groups. And because they are infinite, so are their multiplication tables.

Including the generators {1, 0, 0}, {0, 1, 0}, and {0, 0, 1} are necessary to form the full group.

My code generates the group elements modulo 1 to keep all the products within the unit cell.

A PDF version of the International Tables is available. The Pcc2 example is on pp. 222-223.

POSTED BY: Robert Nachbar
Posted 3 years ago

Dear @Robert Nachbar,

Thank you very much for your wonderful code snippet. For the question I raised here, I still have the following puzzle:

Your table is based on vector multiplication, but my problem is based on abstract groups. More specifically, you have a vector/matrix based representation of the group's generators/elements/structure relationships, but for abstract groups, the only thing we know is the abstract multiplication relationship between their elements, as listed in BC book. What I want to do is exactly to construct the multiplication table based on these given abstract multiplication relationship among the group elements. This should be done based on the well-known theorems and axioms of group theory and a robust and mature symbolic algebraic system such as Mathematica, without relying on any specific representation, such as matrices.

BTW, here you can find the latest version, i.e., the sixth edition published in 2016 of "International Tables for Crystallography Volume A: Space-group symmetry".

POSTED BY: Hongyi Zhao

This is the code I use:

Options[symmDot] = {Variables -> {\[FormalX], \[FormalY], \[FormalZ]}}; 

symmDot[s1_List, sn___List, opts : OptionsPattern[]] /; 
  		MatchQ[Dimensions[{s1, sn}], {_, 1 | 2 | 3}] := 
 	Fold[sd[##1, opts] & , s1, {sn}]

sd[s1_, s2_, OptionsPattern[symmDot]] := 
 	s2 /. Thread[Take[OptionValue[Variables], Length[s1]] -> s1]

(s1_List) \[CircleDot] (sn___List) := symmDot[s1, sn]

generateGroup[generators : {{__} ..}, times_ : symmDot] /; 
  		MatchQ[Dimensions[generators], {_, 1 | 2 | 3}] := 
 	Module[{group = generators, new}, 
  		While[
   			MatchQ[
    				new = Complement[
      					Apply[Join, {Outer[times, group, generators, 1], 
         						Outer[times, generators, group, 1]}, {0, 1}] /. 
       							Plus[n : (_Integer | _Rational), a__] :> 
        								Plus[Mod[n, 1], a], 
      					group](* // Echo[#, "|new| ", Length@#&]&*), 
    				{__}], 
   			group = Join[group, new](* // Echo[#, "|group| ", Length]&*)
   			]; 
  		Sort @ group
  		]

I use formal symbols, such as \[FormalX], so that they are guaranteed to be without a value.

Taking the space group Pcc2 (No. 27) as an example, there are two generators:

In[7]:= elements = generateGroup[{{-\[FormalX], -\[FormalY], -\[FormalZ]}, 
   {\[FormalX], -\[FormalY], \[FormalZ] + 1/2}}]

Out[7]= {{-\[FormalX], -\[FormalY], -\[FormalZ]}, {-\[FormalX], \[FormalY], 
  1/2 - \[FormalZ]}, {\[FormalX], -\[FormalY], 
  1/2 + \[FormalZ]}, {\[FormalX], \[FormalY], \[FormalZ]}}

The multiplication table can be generated with Outer:

In[8]:= mulTable = Outer[symmDot, elements, elements, 1]

Out[8]= {{{\[FormalX], \[FormalY], \[FormalZ]}, {\[FormalX], -\
\[FormalY], 1/2 + \[FormalZ]}, {-\[FormalX], \[FormalY], 
   1/2 - \[FormalZ]}, {-\[FormalX], -\[FormalY], -\[FormalZ]}}, {{\
\[FormalX], -\[FormalY], -(1/
     2) + \[FormalZ]}, {\[FormalX], \[FormalY], \[FormalZ]}, {-\
\[FormalX], -\[FormalY], 1 - \[FormalZ]}, {-\[FormalX], \[FormalY], 
   1/2 - \[FormalZ]}}, {{-\[FormalX], \[FormalY], -(1/
     2) - \[FormalZ]}, {-\[FormalX], -\[FormalY], -\[FormalZ]}, {\
\[FormalX], \[FormalY], 1 + \[FormalZ]}, {\[FormalX], -\[FormalY], 
   1/2 + \[FormalZ]}}, {{-\[FormalX], -\[FormalY], -\[FormalZ]}, {-\
\[FormalX], \[FormalY], 1/2 - \[FormalZ]}, {\[FormalX], -\[FormalY], 
   1/2 + \[FormalZ]}, {\[FormalX], \[FormalY], \[FormalZ]}}}

And displayed with TableForm:

TableForm[mulTable, TableHeadings -> {elements, elements}, 
 TableDepth -> 2]

enter image description here

POSTED BY: Robert Nachbar
Posted 2 years ago

Then, let me ask the opposite question: How to identify/find the permissible lattice basis vectors using the space group elements?

POSTED BY: Hongyi Zhao
Posted 2 years ago

I basically solved this problem by applying all the group elements to a particular coordinate, such as {0,0,0}, and then analyzing the lattice corresponding to the resulting vector set, say, by LatticeReduce.

POSTED BY: Hongyi Zhao

I myself would probably try to work with the matrix representations, and maybe use lookup to associate products with group elements. Since you seem to want to se a representation in terms of products, and bearing in mind that these do not necessarily commute, we can do as follows. I work with the example shown (where products do in fact commute).

First define the generators and the relations they satisfy.

gens = {e, p, q, r};
rels = {e ** any_ :> any, any_ ** e :> any, any_ ** any_ :> e, 
   any_ ** p :> p ** any, r ** q -> q ** r};

Next compute products of all pairs.

firstset = 
 Union[Flatten[Outer[NonCommutativeMultiply, gens, gens] /. rels]]

(* Out[12]= {e, p, q, r, p ** q, p ** r, q ** r} *)

Repeat this in order to determine whether we have all possible group elements. Notice this time I use ReplaceAllRepeated since there might need to be more than one pass using the relation rules as replacements.

nextset = 
 Union[Flatten[
   Outer[NonCommutativeMultiply, firstset, firstset] //. rels]]

(* Out[16]= {e, p, q, r, p ** q, p ** r, q ** r, p ** q ** r} *)

Maximum length is 3 (rather than 4). I think that means we have all possible group elements. We can rename them along the lines indicated in the question.

elementnames = Array[c, Length[nextset]];
morerels = Reverse[Thread[nextset -> elementnames]]

(* Out[31]= {p ** q ** r -> c[8], q ** r -> c[7], p ** r -> c[6], 
 p ** q -> c[5], r -> c[4], q -> c[3], p -> c[2], e -> c[1]} *)

We now find all products of these, and use their new names to get the requested product table. Among other things, this will show that we get no new elements from products. Note that I sorted the renamings by length in order to make sure the longest available match is tried first.

multTable = Outer[NonCommutativeMultiply, nextset, nextset] //. rels /. morerels

(* Out[29]= {{c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8]}, {c[2], c[1], c[5], c[6], c[3], c[4], c[8], c[7]}, {c[3], c[5], c[1], c[7], c[2], c[8], c[4], c[6]}, {c[4], c[6], c[7], c[1], c[8], c[2], c[3], c[5]}, {c[5], c[3], c[2], c[8], c[1], c[7], c[6], c[4]}, {c[6], c[4], c[8], c[2], c[7], c[1], c[5], c[3]}, {c[7], c[8], c[4], c[3], c[6], c[5], c[1], c[2]}, {c[8], c[7], c[6], c[5], c[4], c[3], c[2], c[1]}} *)

So this is the product table. I think something like this might work in general, though perhaps there might need to be refinements for more complicated examples.

On a different note, I have received so many edit notifications today that I had to stop following the thread. The responses seem fine, but I've yet to figure out what in the original post has changed during these six or so edits.

POSTED BY: Daniel Lichtblau
Posted 3 years ago

Dear @Daniel Lichtblau,

Thank you very much for your great and insightful code snippet. But I'm not sure if I understand you correctly, and try to comment as follows:

  1. You said "I myself would probably try to work with the matrix representations", but I really can't see what's the matrix used by you here. Furthermore, I want to do this in a symbolic way instead of using the matrix base, that is, the faithful representation of isomorphic matrices.
  2. As for the matrix base (matrices based isomorphic faithful representation), I think it only necessary when we want to do further studies on the properties of a group, for example, generating the characteristic table and irreducible representation table, etc.
POSTED BY: Hongyi Zhao

"You said "I myself would probably try to work with the matrix representations", but I really can't see what's the matrix used by you here."

I didn't use a matrix representation. It's what I would use if this were my problem to tackle.

"Furthermore, I want to do this in a symbolic way instead of using the matrix base, that is, the faithful representation of isomorphic matrices."

What I showed is a symbolic representation.

POSTED BY: Daniel Lichtblau
Posted 3 years ago

@Daniel Lichtblau

I didn't use a matrix representation. It's what I would use if this were my problem to tackle.

Thank you for your confirmation. I got your idea. You mean that for a real problem, the matrix representation will be used. This is also what I would do, and also the final solution to any practical problem.

POSTED BY: Hongyi Zhao

I am not familiar with that book, however, International Tables for Crystallography, Volume A, Space Group Symmetry (online here) has the generators for each of the 230 space groups, and the 17 plane groups and the 2 line groups.

I have used them often to generate all the elements of one of the space groups, and generating the group multiplication table should be a simple matter after that.

It sounds like BC might be a good addition to my library.

POSTED BY: Robert Nachbar
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard