Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  chains.gi   Sprache: unbekannt

 
Spracherkennung für: .gi vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

BindGlobal( "BasisBySubspaces", function( bases, F, d )
    local V, C, B, new, i, c, basis, weigh;

    # initialize
    V := IdentityMat(d,F);
    C := [ V, [] ];

    # create a chain
    for B in bases do
        new := [];
        for i in [2..Length(C)] do
            if Length( C[i-1] ) > Length( C[i] ) + 1 then
                c := SumIntersectionMat( B, C[i-1] )[2];
                c := SumIntersectionMat( c, C[i] )[1];
                if Length( c ) < Length( C[i-1] ) and
                   Length( c ) > Length( C[i] ) then
                    Add( new, c );
                fi;
            fi;
        od;
        Append( C, new );
        Sort( C, function( x, y ) return Length(x)>Length(y); end );
    od;

    # determine a basis
    basis := [];
    weigh := [];
    for i in [1..Length(C)-1] do
        new := BaseSteinitzVectors(C[i], C[i+1]).factorspace;
        Append( basis, new );
        Append( weigh, List( new, x -> i ) );
    od;

    # that' it
    return rec( basis := basis, weights := weigh );
end );

BindGlobal( "ChainStabilizer", function( wgt, F )
    local d, l, p, mats, size, i, j, n, mat, G;

    # set up
    d := Length( wgt );
    l := 0;
    p := Size(F);

    # init gens and size
    mats := [];
    size  := 1;

    # loop over weights
    for i in [1..wgt[d]] do
        n := Length(Filtered(wgt, x -> x=i)); 

        # adjust size
        for j in [1..n] do
            size := size * (p^(d-l) - p^(d-l-j));
        od;

        # construct gens on diag
        if p = 2 then
            if n >= 2 then
                mat := IdentityMat(d, F);
                mat[l+1][l+n] := One( F );
                mat[l+1][l+1] := Zero( F );
                for j in [ 2 .. n ] do
                    mat[l+j][l+j-1] := One( F );
                    mat[l+j][l+j]   := Zero( F );
                od;
                Add( mats, mat );

                mat := IdentityMat(d, F);
                mat[l+1][l+2] := One( F );
                Add( mats, mat );
            fi;
        else
            mat := IdentityMat(d, F);
            mat[l+1][l+1] := PrimitiveRoot( F );
            Add( mats, mat );

            if n >= 2 then
                mat := IdentityMat(d, F);
                mat[l+1][l+1] := -One( F );
                mat[l+1][l+n] := One( F );
                for j in [ 2 .. n ] do
                    mat[l+j][l+j-1] := -One( F );
                    mat[l+j][l+j]   := Zero( F );
                od;
                Add( mats, mat );
            fi;
        fi;

        # adjust parameter
        l := l + n;

        # add gens off diag
        if l < d then
            mat := IdentityMat(d, F);
            mat[l][l+1] := One( F );
            Add( mats, mat );
        fi;
    od;

    # return group
    G := Group( mats, IdentityMat(d,F) );
    SetSize(G, size );
    return G;
end );


[Dauer der Verarbeitung: 0.18 Sekunden, vorverarbeitet 2026-06-17]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik