Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  eilenberg.gi   Sprache: unbekannt

 

###############################################################
###############################################################
InstallGlobalFunction(EilenbergMacLaneSimplicialFreeAbelianGroup,
function(G,n,m)
local K, L, VectorToWord, M, D, i, j,  dimension, boundary, degeneracy,
MFUN, DFUN;

K:=EilenbergMacLaneSimplicialGroup(G,n,m);;

L:=List([0..m],i->K!.groupsList(i));
L:=List(L,AbelianInvariants);
L:=List(L,Length);

###################################
VectorToWord:=function(v)
local w,i;
w:=[];
for i in [1..Length(v)] do
if not v[i]=0 then Add(w,[i,v[i]]); fi;
od;
return w;
end;
###################################

M:=[];;
for i in [1..m] do
MFUN:=function(i);
M[i]:=[];
for j in [0..i] do
M[i][j+1]:=K!.boundariesList(i,j);
M[i][j+1]:=M[i][j+1]!.MappingGeneratorsImages[2];
M[i][j+1]:=StructuralCopy(M[i][j+1]);
M[i][j+1]:=List(M[i][j+1],Exponents);
M[i][j+1]:=List(M[i][j+1],v->VectorToWord(v));
od;
end;
#MFUN(i);
od;

D:=[];;
for i in [1..m] do  #so we are in degree i-1
DFUN:=function(i);
D[i]:=[];
if L[i]>0 then
for j in [0..i-1] do 
D[i][j+1]:=K!.degeneraciesList(i-1,j);
D[i][j+1]:=D[i][j+1]!.MappingGeneratorsImages[2];
D[i][j+1]:=StructuralCopy(D[i][j+1]);
D[i][j+1]:=List(D[i][j+1],Exponents);
D[i][j+1]:=List(D[i][j+1],v->VectorToWord(v));
od;
fi; 
end;
#DFUN(i);
od;


#####################################
dimension:=function(n);
if n<0 or n>Length(L)-1 then return 0; fi;
return L[n+1];
end;
#####################################

#####################################
boundary:=function(n,j,k); #degree n, boundary map j, generator k
if n<1 or n>Length(L)-1 then return []; fi;
if not IsBound(M[n]) then MFUN(n); fi;
return 1*M[n][j+1][k];
end;
#####################################

#####################################
degeneracy:=function(n,j,k); #degree n, degeneracy map j, generator k
if n<0 or n>Length(L)-2 then return []; fi;
if not IsBound(D[n+1]) then DFUN(n+1); fi;
return 1*D[n+1][j+1][k];
end;
#####################################


return 
Objectify(HapSimplicialFreeAbelianGroup,
                rec(
                dimension:=dimension,
                boundary:=boundary,
                degeneracy:=degeneracy,
                properties:=
                [["length",m],
                ["moorecomplexlength",n],
                ["type", "simplicialFreeAbelianGroup"],
                ["characteristic", 0 ] ]));

end);
###############################################################
###############################################################

###############################################################
###############################################################
InstallGlobalFunction(E1HomologyPage,
function(K,q,l)
local dimension, boundary, facemap, negativefacemap,properties, bases, dims, len, BoundRec, degs, x, y, i, n, newbases, newdims;

len:=Minimum(EvaluateProperty(K,"length") , l);
bases:=[];
dims:=[];
BoundRec:=[];
for n in [0..len] do
dims[n+1]:=NrCombinations([1..K!.dimension(n)],q);
bases[n+1]:=Combinations([1..K!.dimension(n)],q) ;
BoundRec[n+1]:=[];
od;

#################################################
############### WARNING:  THIS IS ONLY VALID FOR E-M COMPLEXES!!!!
newbases:=[];
newdims:=[];
newbases[1]:=bases[1];
newdims[1]:=dims[1];
for n in [1..len] do
degs:=[];
for x in bases[n] do
for i in [0..n-1] do
y:=List(x,k->K!.degeneracy(n-1,i,k)[1][1]);
y:=SSortedList(y);
Add(degs,y);
od;
od;
degs:=SSortedList(degs);
newbases[n+1]:=Difference(bases[n+1],degs);
newbases[n+1]:=SSortedList(newbases[n+1]);
newdims[n+1]:=Length(newbases[n+1]);

od;

bases:=newbases;
dims:=newdims;
################ WARNING: FINISHED
###########################################

###########################
dimension:=function(n)
local p;
if n>len or n<0 then return 0; fi;
return dims[n+1];
end;
###########################
facemap:=function(n,i,k)
local c,d,F,newF,x,y,yy,j,m,s, z,ans,pos;

c:=bases[n+1][k];
d:=[];     
for x in c do
y:=K!.boundary(n,i,x);
yy:=[];
for z in y do
s:=SignInt(z[2]);
for j in [1..AbsInt(z[2])] do
Add(yy,[z[1],s]);
od;
od;
Unbind(y);
Add(d,yy);
od;


d:=Cartesian(d);

ans:=[];

for y in d do
s:=Product(List(y,a->a[2]));
y:=List(y,a->a[1]);
yy:=y;
y:=SortedList(y);  
#RT:=RT-Runtime();  #THIS TAKES A CRAZY AMOUNT OF TIME USING POSITION()
pos:=PositionSorted(bases[n],y);
if IsBound(bases[n][pos]) then 
     if not bases[n][pos]=y then pos:=fail; fi;
else pos:=fail;
fi; 
#RT:=RT+Runtime();
if not pos=fail then 
yy:=List(yy,i->PositionSorted(y,i));
s:=s*SignPerm(PermList(yy)); 
Add(ans, [pos,s]);
fi;
od;

return ans;
end;
###########################
negativefacemap:=function(n,i,k)
local ans;
ans:=facemap(n,i,k);
ans:=List(ans,x->[x[1],-x[2]]);
return ans;
end;
###########################
boundary:=function(n,k)
local b, i;
if not IsBound(BoundRec[n+1][k]) then 
b:=[];
for i in [0..n] do
if IsEvenInt(i) then Append(b,facemap(n,i,k));
else Append(b,negativefacemap(n,i,k)); fi;
od;
BoundRec[n+1][k]:=b;
fi;
return BoundRec[n+1][k];
end;
###########################

return
Objectify(HapSparseChainComplex,
                rec(
                dimension:=dimension,
                boundary:=boundary,
bases:=bases,
                properties:=
                [["length",EvaluateProperty(K,"length")],
                ["connected",true],
                ["type", "chainComplex"],
                ["characteristic", 0] ]));

end);
###############################################################
###############################################################


###############################################################
###############################################################
InstallGlobalFunction(HomologySimplicialFreeAbelianGroup,
function(K,n)
local p, q, H, D, ans, mlen, bool;

bool:=false;

if n<0 then return []; fi;
if n=0 then return [0]; fi;

mlen:=EvaluateProperty(K,"moorecomplexlength");
ans:=[];
for  p in [0..n-1] do
   q:=n-p;
   if p<=q*mlen then
if p+1>EvaluateProperty(K,"length") then bool:=true; fi;
      D:=ContractedComplex(E1HomologyPage(K,q,p+1));
      H:= Homology(D,p) ;
      if Length(H)>0 then 
         Append(ans,H);
      fi;
   fi;
od;

#if n>=EvaluateProperty(K,"length") then
if bool then 
Print("WARNING: The computed answer is guaranteed only to be a summand of the correct answer. You'll need to use more terms of the simplicial abelian group to make sure there is no other summand.\n");
fi;

return ans;
end);
###############################################################
###############################################################

#####################################################################
InstallOtherMethod(Homology,
"integral homology of simplicial free abelian group",
[IsHapSimplicialFreeAbelianGroup,IsInt],
function(K,n) return HomologySimplicialFreeAbelianGroup(K,n);
end);
#####################################################################

[ Dauer der Verarbeitung: 0.35 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge