123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- module symchrep;
- %
- % Symmetry Package
- %
- % Author : Karin Gatermann
- % Konrad-Zuse-Zentrum fuer
- % Informationstechnik Berlin
- % Heilbronner Str. 10
- % W-1000 Berlin 31
- % Germany
- % Email: Gatermann@sc.ZIB-Berlin.de
- % symchrep.red
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % functions for representations in iternal structure
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- symbolic procedure mk!_internal(representation);
- % transfers the user given representation structure to the
- % internal structure
- begin
- scalar group,elems,generators,repgenerators,g,res;
- group:=get!_group!_out(representation);
- elems:=get!*elements(group);
- generators:=get!*generators(group);
- repgenerators:=mk!_rep!_relation(representation,generators);
- if not(hard!_representation!_check!_p(group,repgenerators)) then
- rederr("this is no representation");
- res:=for each g in elems collect
- list(g,
- mk!_rep!_mat(
- get!*elem!*in!*generators(group,g),
- repgenerators)
- );
- return append(list(group),res);
- end;
- symbolic procedure hard!_representation!_check!_p(group,repgenerators);
- % repgenerators -- ((g1,matg1),(g2,matg2),...)
- begin
- scalar checkp;
- checkp:=t;
- for each relation in get!*generator!*relations(group) do
- if not(relation!_check!_p(relation,repgenerators)) then
- checkp:=nil;
- return checkp;
- end;
- symbolic procedure relation!_check!_p(relation,repgenerators);
- begin
- scalar mat1,mat2;
- mat1:=mk!_relation!_mat(car relation, repgenerators);
- mat2:=mk!_relation!_mat(cadr relation, repgenerators);
- return equal!+matrices!+p(mat1,mat2);
- end;
- symbolic procedure mk!_relation!_mat(relationpart,repgenerators);
- begin
- scalar mat1,g;
- mat1:=mk!+unit!+mat(get!+row!+nr(cadr car repgenerators));
- for each g in relationpart do
- mat1:=mk!+mat!+mult!+mat(mat1,get!_mat(g,repgenerators));
- return mat1;
- end;
- symbolic procedure get!_mat(elem,repgenerators);
- begin
- scalar found,res;
- if elem='id then
- return mk!+unit!+mat(get!+row!+nr(cadr car repgenerators));
- found:=nil;
- while ((length(repgenerators)>0) and (null found)) do
- <<
- if elem = caar repgenerators then
- <<
- res:=cadr car repgenerators;
- found := t;
- >>;
- repgenerators:=cdr repgenerators;
- >>;
- if found then return res else
- rederr("error in get_mat");
- end;
- symbolic procedure mk!_rep!_mat(generatorl,repgenerators);
- % returns the representation matrix (internal structure)
- % of a group element represented in generatorl
- begin
- scalar mat1;
- mat1:=mk!+unit!+mat(get!+row!+nr(cadr(car(repgenerators))));
- for each generator in generatorl do
- mat1:=mk!+mat!+mult!+mat(mat1,
- get!_rep!_of!_generator(
- generator,repgenerators)
- );
- return mat1;
- end;
- symbolic procedure get!_rep!_of!_generator(generator,repgenerators);
- % returns the representation matrix (internal structure)
- % of the generator
- begin
- scalar found,mate,ll;
- if (generator='id) then return mk!+unit!+mat(
- get!+row!+nr(cadr(car(repgenerators))));
- found:=nil;
- ll:=repgenerators;
- while (not(found) and (length(ll)>0)) do
- <<
- if (caar(ll)=generator) then
- <<
- found:=t;
- mate:=cadr(car(ll));
- >>;
- ll:=cdr ll;
- >>;
- if found then return mate else
- rederr(" error in get rep of generators");
- end;
- symbolic procedure get!_group!_in(representation);
- % returns the group of the internal data structure representation
- begin
- return car representation;
- end;
- symbolic procedure eli!_group!_in(representation);
- % returns the internal data structure representation without group
- begin
- return cdr representation;
- end;
- symbolic procedure get!_rep!_matrix!_in(elem,representation);
- % returns the matrix of the internal data structure representation
- begin
- scalar found,mate,replist;
- found:=nil;
- replist:=cdr representation;
- while (null(found) and length(replist)>0) do
- <<
- if ((caar(replist)) = elem) then
- <<
- mate:=cadr(car (replist));
- found:=t;
- >>;
- replist:=cdr replist;
- >>;
- if found then return mate else
- rederr("error in get representation matrix");
- end;
- symbolic procedure get!_dimension!_in(representation);
- % returns the dimension of the representation (internal data structure)
- % output is an integer
- begin
- return change!+sq!+to!+int(mk!+trace(get!_rep!_matrix!_in('id,
- representation)));
- end;
- symbolic procedure get!_rep!_matrix!_entry(representation,elem,z,s);
- % get a special value of the matrix representation of group
- % get the matrix of this representatiuon corresponding
- % to the element elem
- % returns the matrix element of row z and column s
- begin
- return get!+mat!+entry(
- get!_rep!_matrix!_in(elem,representation),
- z,s) ;
- end;
- symbolic procedure mk!_resimp!_rep(representation);
- begin
- scalar group,elem,res;
- group:=get!_group!_in(representation);
- res:=for each elem in get!*elements(group) collect
- list(elem,mk!+resimp!+mat(get!_rep!_matrix!_in(elem,representation)));
- return append(list(group),res);
- end;
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % functions for characters in iternal structure
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- symbolic procedure get!_char!_group(char1);
- % returns the group of the internal data structure character
- begin
- return car char1;
- end;
- symbolic procedure get!_char!_dim(char1);
- % returns the dimension of the internal data structure character
- % output is an integer
- begin
- return change!+sq!+to!+int(get!_char!_value(char1,'id));
- end;
- symbolic procedure get!_char!_value(char1,elem);
- % returns the value of an element
- % of the internal data structure character
- begin
- scalar found,value,charlist;
- found:=nil;
- charlist:=cdr char1;
- while (null(found) and length(charlist)>0) do
- <<
- if ((caar(charlist)) = elem) then
- <<
- value:=cadr(car (charlist));
- found:=t;
- >>;
- charlist := cdr charlist;
- >>;
- if found then return value else
- rederr("error in get character element");
- end;
- endmodule;
- end;
|