DeclareOperation("ProjToInjNak", [IsList]);

InstallMethod(ProjToInjNak, "for a representation of a quiver", [IsList],0,function(L)

local list, n, temp1, Liste_d, j, i, k, r, kk;

list:=L;

n:=Size(L);

temp1:=[];

Liste_d:=[];

for j in [1..n] do

            for k in L do

                    r:=(j-k) mod n;

                    if r=0 then r:=n; fi;

                    if k>=L[r] then

                    Append(temp1,[k]);

                    fi;

            od;

    kk:=Minimum(temp1);

    temp1:=[];

    Append(Liste_d,[kk]);

od;

return(Liste_d);

end

);

#Example:

gap> ProjToInjNak([3,2,2,2,1]);

[ 1, 2, 3, 2, 2 ]

DeclareOperation("Specialpoints", [IsList]);

InstallMethod(Specialpoints, "for a representation of a quiver", [IsList],0,function(L)

local list, n, temp1, Liste_d, j, i, k, r, kk;

list:=L;

n:=Size(L);

T:=[1];

U:=Filtered([2..n],x->L[x]>L[x-1]);

Append(T,U);

return(T);

end

);

DeclareOperation("Associatedpointstospecialpoints", [IsList]);

InstallMethod(Associatedpointstospecialpoints, "for a representation of a quiver", [IsList],0,function(L)

local list, n, temp1, Liste_d, j, i, k, r, kk;

list:=L[1];

r:=L[2];

if r=1 then return([1..(list[1]-1)]);

else return([list[r-1]..(list[r]-1)]);

fi;

end

);

DeclareOperation("Specialpointsums", [IsList]);

InstallMethod(Specialpointsums, "for a representation of a quiver", [IsList],0,function(L)

local list, n, temp1, Liste_d, j, i, k, r, kk;

list:=L[1];

r:=L[2];

temp:=[];

for i in Associatedpointstospecialpoints([list,r]) do Append(temp,[r+i]);od;

return(temp);

end

);

DeclareOperation("Specialpointtest", [IsList]);

InstallMethod(Specialpointtest, "for a representation of a quiver", [IsList],0,function(L)

local list, n, temp1, Liste_d, j, i, k, r, kk;

list:=L[1];

r:=L[2];

listtwo:=ProjToInjNak(list);

U:=Specialpointsums([list,r]);

UU:=Filtered(U,x->((list[x]>=list[x-1]) or (listtwo[x-1]=listtwo[x+list[x]-1]-list[x])) );

if (Size(U)=Size(UU)) then

return(1);

else return(0);

fi;

end

);

DeclareOperation("Finaltest", [IsList]);

InstallMethod(Finaltest, "for a representation of a quiver", [IsList],0,function(L)

local list, n, temp1, Liste_d, j, i, k, r, kk;

list:=L;

listezwei:=Specialpoints(list);

temp3:=[];

for i in listezwei do Append(temp3,[Specialpointtest([list,i])]);od;

if (Sum(temp3)=Size(listezwei))

then return(1);

else return(0);

fi;

end

);

#Example:

gap> Finaltest([3,2,2,2,1]);

1