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


Quellverzeichnis  slac.gi   Interaktion und
Portierbarkeitunbekannt

 
InstallMethod( SolvableLieAlgebra,  "for a field and a list", true,
   [ IsField, IsList ], 0, 

function( F, data )

   local d, no, a, b, S, L;

   if not Length( data ) >= 2 then 
      Error("<data> has to have length at least two"); 
   fi;
   if not IsPosInt( data[1] ) then
      Error("the first element of <data> has to be a positive integer");
   else
      d:= data[1];
      if not d in [1,2,3,4] then
         Error("the dimension has to be 1,2,3, or 4");
      fi;
   fi;
   no:= data[2];
   if d=1 then
       if no > 1 then
           Error( "the second element of <data> has to be <= 1" );
       fi;
   elif d=2 then
      if no > 2 then
         Error("the second element of <data> has to be <= 2");
      fi;
   elif d=3 then
      if no > 4 then
         Error("the second element of <data> has to be <= 4");
      fi;
   else
      if not no in [1..14] then
         Error("the second element of <data> has to be <= 14");
      fi;
    fi;
   if Length( data ) >=3 then
      a:= data[3];
   fi;
   if Length( data ) >= 4 then
      b:= data[4];
   fi;
   
   if d = 1 then
       S:= EmptySCTable( 1, Zero(F), "antisymmetric" );
       L := LieAlgebraByStructureConstants( F, S );
       L!.arg := data;
       return L;
   elif d = 2 then
      if no=1 then
         S:= EmptySCTable( 2, Zero(F), "antisymmetric" );
         L := LieAlgebraByStructureConstants( F, S );
         L!.arg := data;
         return L;
      else
         S:= EmptySCTable( 2, Zero(F), "antisymmetric" );
         SetEntrySCTable( S, 2, 1, [One(F),1] );
         L := LieAlgebraByStructureConstants( F, S );
         L!.arg := data;
         return L;
      fi;
   elif d=3 then
      if no=1 then
         S:= EmptySCTable( 3, Zero(F), "antisymmetric" );
         L := LieAlgebraByStructureConstants( F, S );
         L!.arg := data;
         return L;
      elif no=2 then
         S:= EmptySCTable( 3, Zero(F), "antisymmetric" );
         SetEntrySCTable( S, 3, 1, [One(F),1] );
         SetEntrySCTable( S, 3, 2, [One(F),2] );
         L := LieAlgebraByStructureConstants( F, S );
         L!.arg := data;
         return L;
      elif no=3 then
         S:= EmptySCTable( 3, Zero(F), "antisymmetric" );
         SetEntrySCTable( S, 3, 1, [One(F),2] );
         SetEntrySCTable( S, 3, 2, [a,1,One(F),2] );
         L := LieAlgebraByStructureConstants( F, S );     
         L!.arg := data;
         return L;
      else
         S:= EmptySCTable( 3, Zero(F), "antisymmetric" );
         SetEntrySCTable( S, 3, 1, [One(F),2] );
         SetEntrySCTable( S, 3, 2, [a,1] );
         L := LieAlgebraByStructureConstants( F, S );
         L!.arg := data;
         return L;
      fi;
   else
      if no=1 then
         S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
         L := LieAlgebraByStructureConstants( F, S );
         L!.arg := data;
         return L;
      elif no=2 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),1] );
           SetEntrySCTable( S, 4, 2, [One(F),2] );
           SetEntrySCTable( S, 4, 3, [One(F),3] );
           L := LieAlgebraByStructureConstants( F, S );   
           L!.arg := data;
           return L;
      elif no=3 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),1] );
           SetEntrySCTable( S, 4, 2, [One(F),3] );
           SetEntrySCTable( S, 4, 3, [-a,2,a+One(F),3] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no = 4 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 2, [One(F),3] );
           SetEntrySCTable( S, 4, 3, [One(F),3] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no = 5 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 2, [One(F),3] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no = 6 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),2] );
           SetEntrySCTable( S, 4, 2, [One(F),3] );
           SetEntrySCTable( S, 4, 3, [a,1,b,2,One(F),3] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no = 7 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),2] );
           SetEntrySCTable( S, 4, 2, [One(F),3] );
           SetEntrySCTable( S, 4, 3, [a,1,b,2] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no=8 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 1, 2, [One(F),2] );
           SetEntrySCTable( S, 3, 4, [One(F),4] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no=9 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),1,a,2] );
           SetEntrySCTable( S, 4, 2, [One(F),1] );
           SetEntrySCTable( S, 3, 1, [One(F),1] );
           SetEntrySCTable( S, 3, 2, [One(F),2] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no=10 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),2] );
           SetEntrySCTable( S, 4, 2, [a,1] );
           SetEntrySCTable( S, 3, 1, [One(F),1] );
           SetEntrySCTable( S, 3, 2, [One(F),2] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no=11 then
           if Characteristic(F) <> 2 then
              Error( "The characteristic of F has to be 2 for L4_11");
           fi;

           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),1] );
           SetEntrySCTable( S, 4, 2, [b,2] );
           SetEntrySCTable( S, 4, 3, [One(F)+b,3] );
           SetEntrySCTable( S, 3, 1, [One(F),2] );
           SetEntrySCTable( S, 3, 2, [a,1] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no=12 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),1] );
           SetEntrySCTable( S, 4, 2, [2*One(F),2] );
           SetEntrySCTable( S, 4, 3, [One(F),3] );
           SetEntrySCTable( S, 3, 1, [One(F),2] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      elif no=13 then
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [One(F),1,a,3] );
           SetEntrySCTable( S, 4, 2, [One(F),2] );
           SetEntrySCTable( S, 4, 3, [One(F),1] );
           SetEntrySCTable( S, 3, 1, [One(F),2] );
           L := LieAlgebraByStructureConstants( F, S );   
           L!.arg := data;
           return L;
      else
           S:= EmptySCTable( 4, Zero(F), "antisymmetric" );
           SetEntrySCTable( S, 4, 1, [a,3] );
           SetEntrySCTable( S, 4, 3, [One(F),1] );
           SetEntrySCTable( S, 3, 1, [One(F),2] );
           L := LieAlgebraByStructureConstants( F, S );
           L!.arg := data;
           return L;
      fi;
   fi;

end );

InstallMethod( NilpotentLieAlgebra,  "for a field and a list", true,
   [ IsField, IsList ], 0, 

function( F, data )

   local L, d, no, a, ff, arg,
         N1_1, N2_1, N3_1, N3_2, N4_1, N4_2, N4_3, N5_1, N5_2, N5_3, 
         N5_4, N5_5, N5_6, N5_7, N5_8, N5_9, N6_1, N6_2, N6_3, N6_4, 
         N6_5, N6_6, N6_7, N6_8, N6_9, N6_10, N6_11, N6_12, N6_13, N6_14, 
         N6_15, N6_16, N6_17, N6_18, N6_19, N6_20, N6_21, N6_22, N6_23, N6_24, 
         N6_25, N6_26, N6_27, N6_28, N6_29, N6_30, N6_31, N6_32, N6_33, N6_34, 
         N6_35, N6_36 ;

N1_1 := function( F )
    local T;
    T := EmptySCTable( 1, Zero(F), "antisymmetric" );
    return LieAlgebraByStructureConstants( F, T );
end;

N2_1 := function( F )
    local T;
    T := EmptySCTable( 2, Zero(F), "antisymmetric" );
    return LieAlgebraByStructureConstants( F, T );
end;

N3_1 := function( F )
    local T;
    T := EmptySCTable( 3, Zero(F), "antisymmetric" );
    return LieAlgebraByStructureConstants( F, T );
end;

N3_2 := function( F )
    local T;
    T := EmptySCTable( 3, Zero(F), "antisymmetric" );
    SetEntrySCTable( T, 1, 2, [1,3] );
    return LieAlgebraByStructureConstants( F, T );
end;

N4_1 := function( F )
    local T;
    T := EmptySCTable( 4, Zero(F), "antisymmetric" );
    return LieAlgebraByStructureConstants( F, T );
end;

N4_2 := function( F )
    local T;
    T := EmptySCTable( 4, Zero(F), "antisymmetric" );
    SetEntrySCTable( T, 1, 2, [1,3] );
    return LieAlgebraByStructureConstants( F, T );
end;

N4_3 := function( F )
    local T;
    T := EmptySCTable( 4, Zero(F), "antisymmetric" );
    SetEntrySCTable( T, 1, 2, [1,3] );
    SetEntrySCTable( T, 1, 3, [1,4] );
    return LieAlgebraByStructureConstants( F, T );
end;

N5_1:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_2:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_3:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_4:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,5] );
   SetEntrySCTable( T, 3, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_5:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 2, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_6:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_7:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_8:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,4] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N5_9:= function( F )

   local T;
   T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_1:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_2:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_3:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_4:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,5] );
   SetEntrySCTable( T, 3, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_5:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 2, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_6:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_7:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_8:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,4] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_9:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_10:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,6] );
   SetEntrySCTable( T, 4, 5, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_11:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,6] );
   SetEntrySCTable( T, 2, 3, [1,6] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_12:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,6] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_13:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,5] );
   SetEntrySCTable( T, 3, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_14:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   SetEntrySCTable( T, 3, 4, [-1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_15:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   SetEntrySCTable( T, 2, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_16:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   SetEntrySCTable( T, 3, 4, [-1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_17:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 3, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_18:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_19:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,4] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,6] );
   SetEntrySCTable( T, 3, 5, [a,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_20:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,4] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_21:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,6] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   SetEntrySCTable( T, 2, 5, [a,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_22:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,5] );
   SetEntrySCTable( T, 1, 3, [1,6] );
   SetEntrySCTable( T, 2, 4, [a,6] );
   SetEntrySCTable( T, 3, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_23:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 4, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_24:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 4, [a,6] );
   SetEntrySCTable( T, 2, 3, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,5] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_25:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_26:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,4] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 2, 3, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_27:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 2, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_28:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 3, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_29:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,5,1,6] );
   SetEntrySCTable( T, 3, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_30:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 3, [1,5,1,6] );
   SetEntrySCTable( T, 2, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_31:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 3, [1,5,a,6] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   SetEntrySCTable( T, 3, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_32:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 4, [1,5] );
   SetEntrySCTable( T, 2, 3, [a,6] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   SetEntrySCTable( T, 3, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_33:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,4] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 2, 5, [1,6] );
   SetEntrySCTable( T, 3, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_34:= function( F )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,4] );
   SetEntrySCTable( T, 1, 5, [1,6] );
   SetEntrySCTable( T, 2, 3, [1,5] );
   SetEntrySCTable( T, 2, 4, [1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_35:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,5] );
   SetEntrySCTable( T, 1, 3, [1,6] );
   SetEntrySCTable( T, 2, 4, [a,6] );
   SetEntrySCTable( T, 3, 4, [1,5,1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

N6_36:= function( F, a )

   local T;
   T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
   SetEntrySCTable( T, 1, 2, [1,3] );
   SetEntrySCTable( T, 1, 3, [1,5] );
   SetEntrySCTable( T, 1, 4, [a,6] );
   SetEntrySCTable( T, 2, 3, [1,6] );
   SetEntrySCTable( T, 2, 4, [1,5,1,6] );
   return LieAlgebraByStructureConstants( F, T );

end;

   if not Length( data ) >= 2 then 
      Error("<data> has to have length at least two"); 
   fi;
   if not IsPosInt( data[1] ) then
      Error("the first element of <data> has to be a positive integer");
   else
      d:= data[1];
      if not d in [1,2,3,4,5,6] then
         Error("the dimension has to be an integer from 1 to 6");
      fi;
   fi;
   no:= data[2];
   if d=1 then
       if no > 1 then
           Error( "the second element of <data> has to be <= 1" );
       fi;
   elif d=2 then
       if no > 1 then
           Error( "the second element of <data> has to be <= 1" );
       fi;
   elif d=3 then
       if no > 2 then
           Error( "the second element of <data> has to be <= 2" );
       fi;
   elif d=4 then
       if no > 3 then
           Error( "the second element of <data> has to be <= 3" );
       fi;
   elif d=5 then
       if no > 9 then
           Error("the second element of <data> has to be <= 9");
       fi;
   else
       if no > 36  then
           Error("the second element of <data> has to be <= 36");
       fi;
   fi;

   if Length( data ) >= 3 then a:= data[3]; fi;
   
   if d = 1 then
       ff := [N1_1];
       L := CallFuncList( ff[no], [ F ] );
       L!.arg := data;
       return L;
   elif d = 2 then
       ff := [N2_1];
       L := CallFuncList( ff[no], [ F ] );
       L!.arg := data;
       return L;
   elif d = 3 then
       ff := [N3_1,N3_2];
       L := CallFuncList( ff[no], [ F ] );
       L!.arg := data;
       return L;
  elif d = 4 then
       ff := [N4_1,N4_2,N4_3];
       L := CallFuncList( ff[no], [ F ] );
       L!.arg := data;
       return L;
   elif d = 5 then
      ff:= [ N5_1, N5_2, N5_3, N5_4, N5_5, N5_6, N5_7, N5_8, N5_9 ];
      L := CallFuncList( ff[no], [ F ] );
      L!.arg := data;
      return L;
  else
      ff:= [ N6_1, N6_2, N6_3, N6_4, N6_5, N6_6, N6_7, N6_8, N6_9, N6_10,
             N6_11, N6_12, N6_13, N6_14, N6_15, N6_16, N6_17, N6_18, N6_19,
             N6_20, N6_21, N6_22, N6_23, N6_24, N6_25, N6_26, N6_27, N6_28,
             N6_29, N6_30, N6_31, N6_32, N6_33, N6_34, N6_35, N6_36];
      if no in [19,21,22,24,31,32,35,36] then
         arg:= [F,a];
      else
         arg:= [F];
      fi;
      L := CallFuncList( ff[no], arg );
      L!.arg := data;
      return L;
   fi;
         
end );

BindGlobal("LieAlgDBHelper", rec());

LieAlgDBHelper.isomN:= function( L, x1, x2, x3, x4 )

      # Here the xi satisfy the commutation relations of N;
      # we produce the isomorphism with M_0^13...

      local F, y1, y2, y3, y4, name, K, f;

      F:= LeftActingDomain( L );

      if Characteristic(F) <> 3 then
         y1:= x1+x2;
         y2:= 3*x1-(3/2*One(F))*x2;
         y3:= x1+x2-x3+2*x4;
         y4:= x3;
      else
         y1:= x2;
         y2:= x1+x2;
         y3:= x1-x2+x3+x4;
         y4:= x1-x2+x3;
      fi;
      name:= "L4_13( ";
      Append( name, LieAlgDBField2String( F ) );
      Append( name, ", " );
      Append( name, String( Zero(F) ) );
      Append( name, " )" );
      K:= SolvableLieAlgebra( F, [4,13, Zero(F)] );
      f:= AlgebraHomomorphismByImages(K,L,Basis(K),[y1,y2,y3,y4]);
      return rec( name:= [ name, [ Zero(F) ] ], isom:= f );

end;

LieAlgDBHelper.isomM9:= function( L, x1, x2, x3, x4, a )

      # The xi satisfy the commutation rules of M9a; we return 
      # the isomorphism with either N, M8 or M9a

      local F, T, pol, facs, dd, id, f, name, K, c, exp, prim, ef, b, q, i;

      F:= LeftActingDomain( L );

      if Characteristic(F) <> 2 and a = (-1/4)*One(F) then

         return LieAlgDBHelper.isomN( L, x1, x2, x3, x4 );

      fi;

      T:= Indeterminate( F);
      pol:= T^2-T-a;
      facs:= Factors( pol );

      if Length( facs ) = 2 then
         #direct sum...
         dd:= DirectSumDecomposition( L );
         id:= LieAlgebraIdentification( dd[1] );
         f:= id.isomorphism;
         x1:= Image( f, Basis( Source(f) )[2] );
         x2:= Image( f, Basis( Source(f) )[1] );
         id:= LieAlgebraIdentification( dd[2] );
         f:= id.isomorphism;
         x3:= Image( f, Basis( Source(f) )[2] );
         x4:= Image( f, Basis( Source(f) )[1] );
         name:= "L4_8( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,8] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
         return rec( name:= [ name, [] ], isom:= f );     
      else

         if HasIsFinite(F) and IsFinite(F) then
            # for M9 we let b be the smallest power of the primitive root
            # such that T^2-T-b has no roots in F
            q:= Size( F );
            prim:= PrimitiveRoot( F );
            for i in [1..q-1] do
                if Length(Factors( T^2-T-prim^i ) ) = 1 then
                   b:= prim^i;
                   break;
                fi;
            od;
            
            if Characteristic(F) > 2 then
               c:= (b+One(F)/4)/(a+One(F)/4);
               exp:= LogFFE( c, PrimitiveRoot(F) );
               c:= PrimitiveRoot(F)^(exp/2);
               x1:= c*x1+((One(F)-c)/2)*x2;
               x4:= ((One(F)-c)/2)*x3+c*x4;
            else
               facs:= Factors( T^2+T+a+b );
               ef:= ExtRepPolynomialRatFun( facs[1] );
               if Length( ef[1] ) = 0 then
                  c:= -ef[2];
               else
                  c:= Zero( F );
               fi;
               x1:= x1+c*x2;
               x4:= c*x3+x4;
            fi;
         else
            b:= a;
         fi;
         name:= "L4_9( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, ", " );
         Append( name, String( b ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,9, b] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
         return rec( name:= [ name, [ b ] ], isom:= f );
      fi;

end;

LieAlgDBHelper.isomM10:= function( L, x1, x2, x3, x4, a )

      # the xi satisfy the commutation rels of M10(a)

      local f, b, y1, y2, y3, y4, name, K, F;

      F:= LeftActingDomain( L );
      if HasIsFinite(F) and IsFinite(F) then
         f:= Inverse( FrobeniusAutomorphism(F) );
         b:= Image( f, a );
         y1:= x1;
         y2:= b*x1+x2;
         y3:= x3;
         y4:= b*x3+x4;
         name:= "L4_13( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, ", " );
         Append( name, String( Zero(F) ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,13, Zero(F)] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                       [y1,y2,y1+y2+y4,y1+y2+y3]);
         return rec( name:= [ name, [Zero(F)] ], isom:= f );
      else
         name:= "L4_10( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, ", " );
         Append( name, String( a ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,10, a] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
         return rec( name:= [ name, [a] ], isom:= f );
      fi;
end;

LieAlgDBHelper.isomM11:= function( L, x1, x2, x3, x4, a, b )

      local name, K, f, gam, eps, del, y1, y2, y3, y4, F;

      F:= LeftActingDomain(L);
                  
      if b = Zero(F) then
         name:= "L4_11( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, ", " );
         Append( name, String( a ) );
         Append( name, ", " );
         Append( name, String( b ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,11,a, b] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
         return rec( name:= [ name, [a,b] ], isom:= f );
      elif HasIsFinite(F) and IsFinite(F) then
         f:= Inverse( FrobeniusAutomorphism(F) );
         gam:= Image( f, b/(a*(b^2+One(F))) );
         eps:= Image( f, 1/a );
         del:= 1/(1+b);
         y1:= a*gam*x1+b*del*x2;
         y2:= a*eps*b*del*x1+a*gam*eps*x2;
         y3:= eps*x3;
         y4:= gam*x3+del*x4;
         name:= "L4_11( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, ", " );
         Append( name, String( One(F) ) );
         Append( name, ", " );
         Append( name, String( Zero(F) ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,11, One(F), Zero(F)] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),[y1,y2,y3,y4]);
         return rec( name:= [ name, [One(F),Zero(F)] ],isom:= f);
      else 
         name:= "L4_11( ";
         Append( name, LieAlgDBField2String( F ) );
         Append( name, ", " );
         Append( name, String( a ) );
         Append( name, ", " );
         Append( name, String( b ) );
         Append( name, " )" );
         K:= SolvableLieAlgebra( F, [4,11, a, b] );
         f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
         return rec( name:= [ name, [a,b] ], isom:= f );
      fi;     
end;

LieAlgDBHelper.solv_type:= function( L )

     local n, F, sp, k, BL, b, x1, x2, x3, x4, c1, c2, K, f, name, par, 
           id, num, c3, c4, mat, is_diag, i, j, facs, ev, s, t, sol, 
           sevec, tevec, cfs, u, v, w, found, y1, y2, y3, y4,  u1, u3, 
           v1, v3, a, D, adM, adK, dd, bK, b_adK, ef, ev1, ev2, mp, q, C, 
           R, exp;

     n:= Dimension( L );
     F:= LeftActingDomain( L );
     sp:= LieDerivedSubalgebra( L );

     k:= 1;
     BL:= Basis( L );
     while Dimension( sp ) < n-1 do
         if not BL[k] in sp then
            b:= ShallowCopy( BasisVectors( Basis(sp) ) );
            Add( b, BL[k] );
            sp:= Subspace( L, b );
         fi;
         k:= k+1;
     od;

     b:= Basis( sp );

     if n = 2 then

        x1:= b[1];
        for k in [1,2] do
            if not BL[k] in sp then
               x2:= BL[k];
               break;
            fi;
        od;
        
        if x1*x2 = Zero(L) then
           name:= "L2_1( ";
           Append( name, LieAlgDBField2String( F ) );
           Append( name, " )" );
           K:= SolvableLieAlgebra( F, [2,1] );
           f:= AlgebraHomomorphismByImages( K, L, Basis(K), Basis(L) );
           return rec( name:= [ name, [] ], isom:= f );
        fi;

        c1:= Coefficients( b, x2*x1 );
        x2:= x2/c1[1];
        name:= "L2_2( ";
        Append( name, LieAlgDBField2String( F ) );
        Append( name, " )" );
        K:= SolvableLieAlgebra( F, [2,2] );
        f:= AlgebraHomomorphismByImages( K, L, Basis(K), [x1,x2] );
        return rec( name:= [ name, [] ], isom:= f );

     elif n = 3 then

        x1:= b[1]; x2:= b[2];
        if x1*x2 <> Zero(L) then
           # Here [L,L] has dimension 1, and its centralizer
           # has dimension 2, and it contains [L,L].
           sp:= LieCentralizer( L, LieDerivedSubalgebra(L) );
           b:= Basis( sp );
           x1:= Basis(sp)[1];
           x2:= Basis(sp)[2];
        fi;

        for k in [1..3] do
            if not BL[k] in sp then
               x3:= BL[k];
               break;
            fi;
        od;

        if x1*x3 = Zero(L) and x2*x3 = Zero(L) then
           # Abelian!
           name:= "L3_1( ";
           Append( name, LieAlgDBField2String( F ) );
           Append( name, " )" );
           K:= SolvableLieAlgebra( F, [3,1] );
           f:= AlgebraHomomorphismByImages( K, L, Basis(K), Basis(L) );
           return rec( name:= [ name, [] ], isom:= f );
        fi;

        c1:= Coefficients( b, x3*x1 );
        c2:= Coefficients( b, x3*x2 );

        if c1[1] = c2[2] and c1[2] = Zero(F) and c2[1] = Zero(F) then
           x3:= x3/c1[1];
           name:= "L3_2( ";
           Append( name, LieAlgDBField2String( F ) );
           Append( name, " )" );
           K:= SolvableLieAlgebra( F, [3,2] );
           f:= AlgebraHomomorphismByImages( K, L, Basis(K), [x1,x2,x3] );
           return rec( name:= [ name, [] ], isom:= f );
        fi;

        if c1[2] = Zero(F) then
           # i.e., x1 is an eigenvector of ad x3, not good.
           if c2[1] = Zero(F) then
              # x2 is an eigenvector as well, so x1+x2 cannot be
              # (by previous case)...
              x1:= x1+x2;
           else
              x1:=  x2;
           fi;
        fi;

        x2:= x3*x1;
        b:= Basis( Subspace( L, [x1,x2] ), [x1,x2] );
        c2:= Coefficients( b, x3*x2 );

        if c2[2] <> Zero(F) then
           x2:= x2/c2[2];
           x3:= x3/c2[2];
           par:= c2[1]/(c2[2]^2);
           name:= "L3_3( ";
           Append( name, LieAlgDBField2String( F ) );
           Append( name, ", " );
           Append( name, String( par ) );
           Append( name, " )" );
           K:= SolvableLieAlgebra( F, [3,3,par] );
           f:= AlgebraHomomorphismByImages( K, L, Basis(K), [x1,x2,x3] );
           return rec( name:= [ name, [par] ], isom:= f );
        fi;

        par:= c2[1];
        if HasIsFinite(F) and IsFinite(F) and not par in [Zero(F),One(F)] then
           if Characteristic(F) = 2 then
              f:= Inverse( FrobeniusAutomorphism( F ) );
              a:= Image( f, par );
              x2:= a*x2;
              x3:= a*x3;
              par:= a^2*par;
           else
              exp:= LogFFE( 1/par, PrimitiveRoot(F) );
              if IsEvenInt( exp ) then 
                 a:= PrimitiveRoot(F)^(exp/2);
                 x2:= a*x2;
                 x3:= a*x3;
                 par:= a^2*par;
              else
                 exp:= LogFFE( PrimitiveRoot(F)/par, PrimitiveRoot(F) );
                 a:= PrimitiveRoot(F)^(exp/2);
                 x2:= a*x2;
                 x3:= a*x3;
                 par:= a^2*par;
              fi;
           fi;
        fi;
        name:= "L3_4( ";
        Append( name, LieAlgDBField2String( F ) );
        Append( name, ", " );
        Append( name, String( par ) );
        Append( name, " )" );
        K:= SolvableLieAlgebra( F, [3,4,par] );
        f:= AlgebraHomomorphismByImages( K, L, Basis(K), [x1,x2,x3] );
        return rec( name:= [ name, [par] ], isom:= f );

     elif n = 4 then
        x1:= b[1]; x2:= b[2]; x3:= b[3];
        for k in [1..4] do
            if not BL[k] in sp then
               x4:= BL[k];
               break;
            fi;
        od;
        K:= Subalgebra(  L, [x1,x2,x3] );
        adM:= List( Basis(K), x -> AdjointMatrix(Basis(K),x ) );
        adK:= MutableBasis( F, [ 0*adM[1] ] );
        bK:= [ ];
        b_adK:= [ ];
        for i in [1..Length(adM)] do
            if not IsContainedInSpan( adK, adM[i] ) then
               CloseMutableBasis( adK, adM[i] );
               Add( bK, Basis(K)[i] );
               Add( b_adK, adM[i] );
            fi;
        od;

        
        adK:= VectorSpace( F, b_adK, 0*adM[1] );

        mat:= List( Basis(K), x -> Coefficients( Basis(K), x4*x ) );
        mat:= TransposedMat( mat );
        if mat in adK then
           c1:= Coefficients( Basis( adK, b_adK ), mat );
           if c1 = [ ] then # L is abelian
              name:= "L4_1( ";
              Append( name, LieAlgDBField2String( F ) );
              Append( name, " )" );
              K:= SolvableLieAlgebra( F, [4,1] );
              f:= AlgebraHomomorphismByImages( K, L, Basis(K), Basis(L) );
              return rec( name:= [ name, [] ], isom:= f );
           else  
              x3:= x4 - LinearCombination( c1, bK );
              id:= LieAlgebraIdentification( K );
              x4:= Image( id.isomorphism, Basis( Source( id.isomorphism ) )[3] );
              x1:= Image( id.isomorphism, Basis( Source( id.isomorphism ) )[1] );
              x2:= Image( id.isomorphism, Basis( Source( id.isomorphism ) )[2] );
              K:= Subalgebra(  L, [x1,x2,x3] );
           fi;
        fi;

        id:= LieAlgebraIdentification( K );
        x1:= Image( id.isomorphism, Basis( Source( id.isomorphism ) )[1] );
        x2:= Image( id.isomorphism, Basis( Source( id.isomorphism ) )[2] );
        x3:= Image( id.isomorphism, Basis( Source( id.isomorphism ) )[3] );
        b:= Basis( K, [x1,x2,x3] );
        c1:= Coefficients( b, x4*x1 );
        c2:= Coefficients( b, x4*x2 );
        c3:= Coefficients( b, x4*x3 );
        mat:= [ c1, c2, c3 ];
        num:= id.name[4];

        if num = '1' then

           # K is abelian

           R:= PolynomialRing( F, 1 );
           mat:= TransposedMat( mat );
           mp:= MinimalPolynomial( F, mat );
           is_diag:= true;
           for i in [1..3] do
               if not is_diag then break; fi;
               for j in [1..3] do
                   if not is_diag then break; fi;
                   if i <> j and mat[i][j] <> Zero(F) then 
                      is_diag:= false;
                   fi;
               od;
           od;
 
           if Degree(mp) = 1 then
              if c1[1] = Zero(F) then           
                 name:= "L4_1( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,1] );
                 f:= AlgebraHomomorphismByImages( K, L, Basis(K), Basis(L) );
                 return rec( name:= [ name, [] ], isom:= f );                 
              else
                 x4:= x4/c1[1];
                 name:= "L4_2( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,2] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
                 return rec( name:= [ name, [] ], isom:= f );
              fi;
           fi;

           if Degree(mp) = 2 then

              # compute rational canonical form; rather clumsy algorithm
              # which however works for the 3x3 case. 

              facs:= Factors( R, mp );
              ev:= [ ];
              for f in facs do
                  ef:= ExtRepPolynomialRatFun( f );
                  if Length( ef[1] ) = 0 then
                     Add( ev, -ef[2] );
                  else
                     Add( ev, Zero( F ) );
                  fi;
              od; 

              if ev[1] <> ev[2] then

                 sol:= NullspaceMat( TransposedMat(mat) -
                                                ev[1]*IdentityMat( 3, F ) );
                 ev1:= List( sol, x -> LinearCombination( x, [x1,x2,x3] ) );
                 sol:= NullspaceMat( TransposedMat(mat) -
                                                ev[2]*IdentityMat( 3, F ) );
                 ev2:= List( sol, x -> LinearCombination( x, [x1,x2,x3] ) );
                 if Length( ev1 ) = 2 then
                    x1:= ev1[1];
                    x2:= ev1[2] + ev2[1];
                    x3:= x4*x2;
                    s:= ev[1]; t:= ev[2];
                 else
                    x1:= ev2[1];
                    x2:= ev2[2] + ev1[1];
                    x3:= x4*x2;
                    s:= ev[2]; t:= ev[1];
                 fi;
              else
                 s:= ev[1]; t:= s;
                 sol:= NullspaceMat( TransposedMat(mat) -
                                                ev[1]*IdentityMat( 3, F ) );
                 ev1:= List( sol, x -> LinearCombination( x, [x1,x2,x3] ) );
                 sp:= Subspace( L, ev1 );
                 if not x1 in sp then
                    x2:= x1;
                 elif not x3 in sp then
                    x2:= x3;
                 fi;
                 x3:= x4*x2;
                 sp:= Subspace( L, [x2,x3] );
                 if not ev1[1] in sp then
                    x1:= ev1[1];
                 else
                    x1:= ev1[2];
                 fi; 
              fi;

              if s <> Zero(F) then
                 x3:= x3/s;
                 x4:= x4/s;
                 name:= "L4_3( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, ", " );
                 Append( name, String( t/s ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,3,t/s] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                      [x1,x2,x3,x4]);
                 return rec( name:= [ name, [t/s] ], isom:= f );
              elif t <> Zero(F) then
                 x3:= x3/t;
                 x4:= x4/t;
                 name:= "L4_4( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,4] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                     [x1,x2,x3,x4]);
                 return rec( name:= [ name, [] ], isom:= f );
              else
                 name:= "L4_5( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,5] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                      [x1,x2,x3,x4]);
                 return rec( name:= [ name, [] ], isom:= f );
              fi;
           fi;      

           # look for a cyclic vector...
           # we take a random element, maybe better algorithm needed...
           if IsFinite(F) then
              cfs:= List( [1..10], x -> PrimitiveRoot(F)^x );
           else
              cfs:= List( [1..10], x -> x*One(F) );
           fi;
           Add( cfs, Zero(F) );
           found:= false;
           while not found do
               u:= Random(cfs)*x1+Random(cfs)*x2+Random(cfs)*x3;
               v:= x4*u;
               w:= x4*v;
               sp:= Subspace( L, [u,v,w] );
               if Dimension(sp) = 3 then found:= true; fi;
           od;
           x1:= u; x2:= v; x3:= w;
           b:= Basis( sp, [x1,x2,x3] );
           c1:= Coefficients( b, x4*x3 );
           if c1[3] <> Zero(F) then
              x2:= x2/c1[3];
              x3:= x3/(c1[3]^2);
              x4:= x4/c1[3];
              name:= "L4_6( ";
              Append( name, LieAlgDBField2String( F ) );
              Append( name, ", " );
              Append( name, String( c1[1]/(c1[3]^3) ) );
              Append( name, ", ");
              Append( name, String( c1[2]/(c1[3]^2) ) );
              Append( name, " )" );
              K:= SolvableLieAlgebra( F, [4,6, c1[1]/(c1[3]^3), c1[2]/(c1[3]^2) ] );
              f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
              return rec( name:= [ name, [c1[1]/(c1[3]^3), c1[2]/(c1[3]^2)] ], 
                          isom:= f );
           else
              if c1[1] <> Zero(F) and c1[2] <> Zero(F) then
                 s:= c1[2]/c1[1];
                 x2:= x2*s;
                 x3:= x3*s^2;
                 x4:= x4*s;
                 t:= s^2*c1[2];
                 name:= "L4_7( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, ", " );
                 Append( name, String( t ) );
                 Append( name, ", ");
                 Append( name, String( t ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,7, t, t] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
                 return rec( name:= [ name, [t,t] ], isom:= f );
              else

                 if HasIsFinite(F) and IsFinite(F) then
                    q:= Size(F);
                    if c1[1] <> Zero(F) then
                       par:= c1[1];
                       a:= PrimitiveRoot(F);
                       if q mod 6 = 1 or q mod 6 = 4 then
                          exp:= LogFFE( par, a );
                          b:= One(F);
                          if exp mod 3 <> 0 then
                             exp:= LogFFE( par/a, a );
                             b:= a;
                             if exp mod 3 <> 0 then
                                exp:= LogFFE( par/(a^2), a );
                                b:= a^2;
                             fi; 
                          fi;
                          a:= a^(exp/3);
                       else
                          exp:= LogFFE( par, a );
                          if exp mod 3 = 1 then
                             for b in F do
                                 if b^3 = a then
                                    a:= a^((exp-1)/3)*b;
                                    break;
                                 fi;
                             od;
                          elif exp mod 3 = 2 then
                            for b in F do
                                 if b^3 = a^2 then
                                    a:= a^((exp-2)/3)*b;
                                    break;
                                 fi;
                             od;
                          else
                             a:= a^(exp/3);
                          fi;
                          b:= One(F);
                       fi;
                       c1:= [ b, Zero(F) ]; 
                    elif c1[2] <> Zero(F) then     
                       par:= c1[2];
                       a:= PrimitiveRoot(F);
                       if IsEvenInt( q ) then
                          exp:= LogFFE( par, a );
                          if exp mod 2 = 1 then
                             a:= a^((exp-1)/2)*a^(q/2);
                          else
                             a:= a^(exp/2);
                          fi;
                          b:= One(F);
                       else
                          exp:= LogFFE( par, a );
                          b:= One(F);
                          if not IsEvenInt( exp ) then
                             exp:= LogFFE( par/a, a );
                             b:= a;
                          fi;
                          a:= a^(exp/2);
                       fi;
                       c1:= [ Zero(F), b ]; 
                    else
                       a:= One(F);
                    fi;
                    x2:= x2/a;
                    x3:= x3/(a^2);
                    x4:= x4/a;
                 fi;
                 name:= "L4_7( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, ", " );
                 Append( name, String( c1[1] ) );
                 Append( name, ", ");
                 Append( name, String( c1[2] ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,7, c1[1], c1[2] ] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),[x1,x2,x3,x4]);
                 return rec( name:= [ name, [c1[1],c1[2]] ], isom:= f );
              fi;
           fi;
        elif num = '2' then

           D:= TransposedMat( mat );
           x4:= x4+D[1][3]*x1+D[2][3]*x2-D[2][2]*x3;
           mat:= List( [x1,x2,x3], x -> Coefficients( b, x4*x ) );
           D:= TransposedMat( mat );
           
           if D[1][1] <> Zero(F) then
              x4:= x4/D[1][1];
              D:= D/D[1][1];
              w:= D[1][2];
              v:= D[2][1];

              if w <> Zero(F) then
                 x1:= w*x1;
                 v:= v*w;

                 return LieAlgDBHelper.isomM9( L, x1, x2, x3, x4, v );

              else
                 #direct sum...
                 dd:= DirectSumDecomposition( L );
                 id:= LieAlgebraIdentification( dd[1] );
                 f:= id.isomorphism;
                 x1:= Image( f, Basis( Source(f) )[2] );
                 x2:= Image( f, Basis( Source(f) )[1] );
                 id:= LieAlgebraIdentification( dd[2] );
                 f:= id.isomorphismorphism;
                 x3:= Image( f, Basis( Source(f) )[2] );
                 x4:= Image( f, Basis( Source(f) )[1] );
                 name:= "L4_8( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,8] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                         [x1,x2,x3,x4]);
                 return rec( name:= [ name, [] ], isom:= f );
              fi;
           else
           
              if D[2][1] <> Zero(F) then
                 x4:= x4/D[2][1];
                 a:= D[1][2]/D[2][1];
                 if Characteristic(F) <> 2 then
                    a:= a - (1/4)*One(F);
                    return LieAlgDBHelper.isomM9( L, x1/(4*One(F))+x2/(2*One(F)), 
                                      x1/(2*One(F)), x3, x3/(2*One(F))+x4, a );
                 else
                    return LieAlgDBHelper.isomM10( L, x1, x2, x3, x4, a );
                 fi;
              else
                 if D[1][2] <> Zero(F) then
                    x4:= x4/D[1][2];
                    if Characteristic(F) <> 2 then
                       y1:= (x1+x2)/(2*One(F));
                       y2:= x2;
                       y3:= x3;
                       y4:= (x3+x4)/(2*One(F));
                       return LieAlgDBHelper.isomN( L, y1, y2, y3, y4 );
                    else
                      name:= "L4_10( ";
                      Append( name, LieAlgDBField2String( F ) );
                      Append( name, ", " );
                      Append( name, String( Zero(F) ) );
                      Append( name, " )" );
                      K:= SolvableLieAlgebra( F, [4,10, Zero(F) ] );
                      f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                           [x2,x1,x3,x4]);
                      return rec( name:= [ name, [Zero(F)] ], isom:= f );
                    fi;
                 fi;
              fi;
           fi;            
        elif num = '3' then

           D:= TransposedMat( mat );
           a:= id.parameters[1];
           if a <> Zero(F) then
              x4:= x4-(D[1][3]/a-D[2][3])*x1+D[1][3]/a*x2-D[2][1]*x3;
              x4:= x4/D[1][1];
              return LieAlgDBHelper.isomM9( L, x2, x1, x4, x3, a );
           else

              x4:= x4+D[2][3]*x1-D[2][1]*x3;
              mat:= List( [x1,x2,x3], x -> Coefficients( b, x4*x ) );
              D:= TransposedMat( mat );
              if D[1][3] = Zero(F) then
                 x4:= x4/D[1][1];
                 return LieAlgDBHelper.isomM9( L, x2, x1, x4, x3, a );
              elif D[1][1] = Zero(F) then
                 x4:= x4/D[1][3];
                 name:= "L4_6( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, ", " );
                 Append( name, String( Zero(F) ) );
                 Append( name, ", ");
                 Append( name, String( Zero(F) ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,6, Zero(F), Zero(F)] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                      [-x4,x1,x2,x3]);
                 return rec( name:= [ name, [Zero(F),Zero(F)] ], isom:= f );
              else
                 x4:= x4/D[1][1];
                 x3:= -D[1][3]/D[1][1]*x1+x3;
                 return LieAlgDBHelper.isomM9( L, x2, x1, x4, x3, a );
              fi;
           fi;
        else # i.e., num = '4'...

           D:= TransposedMat( mat );
           a:= id.parameters[1];
           if a <> Zero(F) and Characteristic(F) <> 2 then
              x4:= x4+D[2][3]*x1+D[1][3]/a*x2-D[2][1]*x3;
              x4:= x4/D[1][1];
              return LieAlgDBHelper.isomM9( L, x1/(4*One(F))+x2/(2*One(F)), x1/(2*One(F)), 
                                x4, x3+x4/(2*One(F)), a-(1/4*One(F)) );
           elif a <> Zero(F) and Characteristic(F) = 2 then

              x4:= x4+D[2][3]*x1+D[1][3]/a*x2-D[2][1]*x3;
              if D[3][3] = Zero(F) then
                 x4:= x4/D[1][1];
                 return LieAlgDBHelper.isomM10( L, x1, x2, x4, x3, a );
              elif D[1][1] <> Zero(F) then
                 x4:= x4/D[1][1];
                 b:= One(F) + D[3][3]/D[1][1];
                 return LieAlgDBHelper.isomM11( L, x1, x2, x3, x4, a, b );
              else
                 if a <> One(F) then
                    x4:= x4/D[3][3];
                    y1:= (a*x1+x2)/(a+One(F));
                    y2:= a*(x1+x2)/(a+One(F));
                    y3:= x3;
                    y4:= x3+(a+1)*x4;
                    return LieAlgDBHelper.isomM11( L, y1, y2, y3, y4, a, a );
                 else
                    return LieAlgDBHelper.isomM11( L, x2, x1, x3, x4, One(F), Zero(F) );
                 fi;
              fi;
           else       
              x4:= x4+D[2][3]*x1-D[2][1]*x3;
              if D[1][3]=Zero(F) and D[3][1]=Zero(F) and D[1][1]=D[3][3] then
                 x4:= x4/D[1][1];
                 name:= "L4_12( ";
                 Append( name, LieAlgDBField2String( F ) );
                 Append( name, " )" );
                 K:= SolvableLieAlgebra( F, [4,12] );
                 f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                      [x1,x2,x3,x4]);
                 return rec( name:= [ name, [] ], isom:= f );
              else

                 if D[3][3] <> Zero(F) then
                    u1:= D[1][1];
                    u3:= D[3][1];
                    v1:= D[1][3];
                    v3:= D[3][3];
                    if v1 <> Zero(F) then
                       x1:= x1+(v3/v1)*x3;
                    elif u3 <> Zero(F) then
                       x3:= -(v3/u3)*x1+x3;
                    elif u1 = Zero(F) then
                       y1:= x1;
                       x1:= x3;
                       x2:= -x2;
                       x3:= y1;
                    else
                       y1:= x1;
                       x1:= x1/(One(F) - v3/u1)-x3;
                       x3:= -(v3/u1)*y1/(One(F) - v3/u1)+x3;  
                    fi;
                    K:= Subalgebra(  L, [x1,x2,x3] );
                    b:= Basis( K, [x1,x2,x3] );
                    c1:= Coefficients( b, x4*x1 );
                    c2:= Coefficients( b, x4*x2 );
                    c3:= Coefficients( b, x4*x3 );
                    mat:= [ c1, c2, c3 ];
                    D:= TransposedMat( mat );
                 fi; # now D[3][3] is zero...

                 u1:= D[1][1]; u3:= D[3][1]; v1:= D[1][3];
                 if u1 <> Zero(F) and v1 <> Zero(F) then
                    x4:= x4/u1;
                    x1:= (1/u1)*x1;
                    x2:= (1/(u1*v1))*x2;
                    x3:= (1/v1)*x3;
                    a:= (v1/u1)*(u3/u1);

                    name:= "L4_13( ";
                    Append( name, LieAlgDBField2String( F ) );
                    Append( name, ", " );
                    Append( name, String( a ) );
                    Append( name, " )" );
                    K:= SolvableLieAlgebra( F, [4,13, a] );
                    f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                        [x1,x2,x3,x4]);
                    return rec( name:= [ name, [a] ], isom:= f );
                 elif u1 <> Zero(F) and v1 = Zero(F) then
                    if u3 <> Zero(F) then
                       x4:= x4/u1;
                       x1:= (1/u3)*x1;
                       x2:= (1/(u1*u3))*x2;
                       x3:= (1/u1)*x3;
                       y1:= x1;
                       x1:= x1+x3;
                       x2:= -x2;
                       x3:= y1;
                    else
                       x4:= x4/u1;
                       x3:= x1+x3;
                    fi;
     
                    name:= "L4_13( ";
                    Append( name, LieAlgDBField2String( F ) );
                    Append( name, ", " );
                    Append( name, String( Zero(F) ) );
                    Append( name, " )" );
                    K:= SolvableLieAlgebra( F, [4,13, Zero(F)] );
                    f:= AlgebraHomomorphismByImages(K,L,Basis(K),
                                                        [x1,x2,x3,x4]);
                    return rec( name:= [ name, [Zero(F)] ], isom:= f );
                 elif u1 = Zero(F) and v1 <> Zero(F) then
                    x4:= x4/v1;
                    par:= u3/v1;
                    if HasIsFinite(F) and IsFinite(F) and 
                                         not par in [Zero(F),One(F)] then
                       if Characteristic(F) = 2 then
                          f:= Inverse( FrobeniusAutomorphism( F ) );
                          a:= Image( f, 1/par );
                       else
                          exp:= LogFFE( 1/par, PrimitiveRoot(F) );
                          if IsEvenInt( exp ) then 
                             a:= PrimitiveRoot(F)^(exp/2);
                          else
                             exp:= LogFFE( PrimitiveRoot(F)/par, 
                                                    PrimitiveRoot(F) );
                             a:= PrimitiveRoot(F)^(exp/2);
                          fi;
                       fi;
                    
                       x1:= a*x1;
                       x2:= a*x2;
                       x4:= a*x4; 
                       par:= a^2*par;
                    fi;
                    if par = Zero(F) then

                       name:= "L4_7( ";
                       Append( name, LieAlgDBField2String( F ) );
                       Append( name, ", " );
                       Append( name, String( Zero(F) ) );
                       Append( name, ", " );
                       Append( name, String( Zero(F) ) );
                       Append( name, " )" );
                       K:= SolvableLieAlgebra( F, [4,7, Zero(F), Zero(F)] );
                       f:= AlgebraHomomorphismByImages( K, L, Basis(K), 
                                                              [-x4,x1,x2,x3]);
                       return rec( name:= [ name, [Zero(F),Zero(F)] ], 
                                                               isom:= f );
                    else

                       
                       name:= "L4_14( ";
                       Append( name, LieAlgDBField2String( F ) );
                       Append( name, ", " );
                       Append( name, String( par ) );
                       Append( name, " )" );
                       K:= SolvableLieAlgebra( F, [4,14, par] );
                       f:= AlgebraHomomorphismByImages( K, L, Basis(K), 
                                                              [x1,x2,x3,x4] );
                       return rec( name:= [ name, [par] ], isom:= f );
                    fi;
                 else

                    x4:= x4/u3;
                    y1:= x3;
                    y2:= -x2;
                    y3:= x1;
                    y4:= x4;
                    name:= "L4_7( ";
                    Append( name, LieAlgDBField2String( F ) );
                    Append( name, ", " );
                    Append( name, String( Zero(F) ) );
                    Append( name, ", " );
                    Append( name, String( Zero(F) ) );
                    Append( name, " )" );
                    K:= SolvableLieAlgebra( F, [4, 7, Zero(F), Zero(F)] );
                    f:= AlgebraHomomorphismByImages( K, L, Basis(K), 
                                                            [-y4,y1,y2,y3] );
                    return rec( name:= [ name, [Zero(F),Zero(F)] ], isom:= f );
                 fi;
              fi;
           fi;
        fi;
     else
       Error( "dim > 4 not yet implemented" );
     fi;
        
end;

#========================================================================

LieAlgDBHelper.liealg_hom:= function( K, L, p, i )

     return AlgebraHomomorphismByImagesNC( K, L, p, i );

end;

LieAlgDBHelper.class_dim_le4:= function( L )

    # finds an isomorphism of the nilpotent Lie algebra L of dim <= 4,
    # to a "normal form".

    local F, C, C1, D, i, x, y, z, u, T, V, K, A, cc, b, a;

    F:= LeftActingDomain( L );
    if Dimension( L ) = 3 then
       if IsLieAbelian( L ) then
          return rec( type:= [ 3, 1 ], f:= LieAlgDBHelper.liealg_hom( L, L, Basis( L ), Basis( L ) ) );
       else
          C:= LieCentre( L );
          for i in [1..3] do
              if not Basis( L )[i] in C then 
                 x:= Basis( L )[i]; break;
              fi;
          od;

          C:= Subalgebra( L, [x,Basis( C )[1]] );
          for i in [1..3] do
              if not Basis( L )[i] in C then 
                 y:= Basis( L )[i]; break;
              fi;
          od;

          T:= EmptySCTable( 3, Zero( F ), "antisymmetric" );
          SetEntrySCTable( T, 1, 2, [1,3] );
          K:= LieAlgebraByStructureConstants( F, T );
          return rec( type:= [ 3, 2 ], f:= LieAlgDBHelper.liealg_hom( L, K, [x,y,x*y], Basis( K ) ) );
       fi; 
    elif Dimension( L ) = 4 then
       if IsLieAbelian( L ) then
          return rec( type:= [ 4, 1 ], f:= LieAlgDBHelper.liealg_hom( L, L, Basis( L ), Basis( L ) ) );
       else
          C:= LieCentre( L );
          if Dimension( C ) = 2 then
             for i in [1..4] do
                 if not Basis( L )[i] in C then 
                    x:= Basis( L )[i]; break;
                 fi;
             od;

             C1:= Subalgebra( L, [ Basis( C )[1], Basis( C )[2], x ] );
             for i in [1..4] do
                 if not Basis( L )[i] in C1 then 
                    y:= Basis( L )[i]; break;
                 fi;
             od;

             A:= Subalgebra( L, [ x*y ] );
             if Basis( C )[1] in A then
                u:= Basis( C )[2];
             else
                u:= Basis( C )[1];
             fi;

             T:= EmptySCTable( 4, Zero( F ), "antisymmetric" );
             SetEntrySCTable( T, 1, 2, [1,3] );
             K:= LieAlgebraByStructureConstants( F, T );
             return rec( type:= [ 4, 2 ], f:= LieAlgDBHelper.liealg_hom( L, K, [x,y,x*y,u], Basis( K ) ) );

          elif Dimension( C ) = 1 then

             D:= LieDerivedSubalgebra( L );
             b:= ShallowCopy( Basis( D ) );
             cc:= [ ];
             for i in [1..4] do
                 x:= Basis( L )[i];
                 if not x in D then 
                    Add( cc, x );
                    Add( b, x );
                    D:= Subalgebra( L, b ); 
                 fi;
             od;

             z:= cc[1]*cc[2];
             if cc[1]*z <> Zero( L ) then
                x:= cc[1]; y:= cc[2];
             else 
                x:= cc[2]; y:= cc[1];
             fi;

             z:= x*y; u:= x*z;

             # we have to change y to make sure that [x,y]= z, and
             # [y,u]= 0.
             V:= Basis( Subalgebra( L, [u] ), [u] );
             a:= Coefficients( V, y*z )[1];
             y:= -a*x+y;

             T:= EmptySCTable( 4, Zero( F ), "antisymmetric" );
             SetEntrySCTable( T, 1, 2, [1,3] );
             SetEntrySCTable( T, 1, 3, [1,4] );
             K:= LieAlgebraByStructureConstants( F, T );
             return rec( type:= [ 4, 3 ], f:= LieAlgDBHelper.liealg_hom( L, K, [x,y,z,u], Basis( K ) ) );

          fi;
       fi;
    fi;

end;


LieAlgDBHelper.skew_symm_NF:= function( V, f )

    # here V is a vector space, and f : VxV -> F a skew-symmetric
    # bilinear function; we compute a basis of V such that f has standard form.
    # Here f is just given as a GAP function.

    local b, dim, found, i, j, c, W, bU, u, v, bb, done, x, w;  
    b:= Basis(V);
    dim:= Dimension(V);
    found:= false;
    for i in [1..dim] do
        if found then break; fi;
        for j in [i+1..dim] do
--> --------------------

--> maximum size reached

--> --------------------

[ Original von:0.74Diese Quellcodebibliothek enthält Beispiele in vielen Programmiersprachen. Man kann per Verzeichnistruktur darin navigieren. Der Code wird farblich markiert angezeigt.  Datei übertragen  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


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