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


Quelle  special.gi   Sprache: unbekannt

 

##
## Specialize Lie ring with given values
##
## P : a prime or false
## para : a list of parameters (not p or w)
## vals : the values of the parameters
##
BindGlobal( "SpecialiseLiePRingNC", function( L, P, para, vals )
    local S, T, W, p, w, sp, sx, i, j, K;

    # get table
    S := SCTable(Zero(L));

    # check for cases
    sp := (IsInt(P) and not IsInt(S.prime));
    sx := (IsBound(S.param) and Length(Intersection(S.param,para))>0);
    if sp = false and sx = false then return L; fi;
    
    # do some work
    T := StructuralCopy(S);
    Unbind(T.fam);

    # specialize parameters
    if sp then 
        T.prime := P;
        W := PrimitiveRootMod(P);
        p := IndeterminateByName("p");
        w := IndeterminateByName("w");
        para := Concatenation( [p,w], para );
        vals := Concatenation( [P,W], vals );
    fi;

    if not IsBound(T.param) then 
        T.param := []; 
    else 
        T.param := Difference(T.param, para);
    fi;
    
    # evaluate
    for i in [1..Length(T.tab)] do
        for j in [1..Length(T.tab[i])] do
            if IsPolynomial(T.tab[i][j]) then 
                T.tab[i][j] := Value( T.tab[i][j], para, vals );
            fi;
            if IsRationalFunction(T.tab[i][j]) then 
                T.tab[i][j] := ValueRatFun( T.tab[i][j], para, vals );
            fi;
        od;
    od; 

    # get entries in normal form
    for i in Reversed([1..Length(T.tab)]) do
        T.tab[i] := WordByExps@(LRReduceExp(T,ExpsByWord(T.dim,T.tab[i])));
    od;

    # create new Lie ring
    K := LiePRingBySCTableNC(T);
    SetIsLiePRing(K, true);

    # transfer data
    if IsBound(L!.ShortPresentation) then 
        SetShortPresentation(K, L!.ShortPresentation); fi;
    if IsBound(L!.LibraryConditions) then 
        SetLibraryConditions(K, L!.LibraryConditions); fi;
    if IsBound(L!.LibraryName) then 
        SetLibraryName(K, L!.LibraryName); fi;
    if HasDimensionOfLiePRing(L) then 
        SetDimensionOfLiePRing(K, DimensionOfLiePRing(L) ); fi;
    if HasClassOfLiePRing(L) then 
        SetClassOfLiePRing(K, ClassOfLiePRing(L) ); fi;
    if HasPClassOfLiePRing(L) then 
        SetPClassOfLiePRing(K, PClassOfLiePRing(L) ); fi;
    if HasMinimalGeneratorNumberOfLiePRing(L) then 
        SetMinimalGeneratorNumberOfLiePRing(K, 
                    MinimalGeneratorNumberOfLiePRing(L) ); fi;
    SetLiePValues(K, [para,vals]);
    return K;
end );

##
## check if P satisfies conditions of L and if cl(L) < P
##
BindGlobal( "IsValidPrime", function(L, P)
    local c;
    if not IsPrimeInt(P) then return false; fi;
    if not HasLibraryConditions(L) then return true; fi;
    if P=2 or PClassOfLiePRing(L) > P-1 then return false; fi;
    c := L!.LibraryConditions[2];
    if c = "p=1 mod 3" then  
        if (P mod 3) <> 1 then return false; fi;
    elif c = "p=2 mod 3" then 
        if (P mod 3) <> 2 then return false; fi;
    elif c = "p=1 mod 4" then 
        if (P mod 4) <> 1 then return false; fi;
    elif c = "p=3 mod 4" then 
        if (P mod 4) <> 3 then return false; fi;
    elif c = "p=1 mod 5" then 
        if (P mod 5) <> 1 then return false; fi;
    elif c = "p ne 1 mod 5" then 
        if (P mod 5) = 1 then return false; fi;
    elif c = "p=1 mod 7" then 
        if (P mod 7) <> 1 then return false; fi;
    elif c = "p=1 mod 8" then 
        if (P mod 8) <> 1 then return false; fi;
    elif c = "p=1 mod 9" then 
        if (P mod 9) <> 1 then return false; fi;
    elif c = "p=1 mod 4, p=1 mod 3" then
        if (P mod 4) <> 1 or (P mod 3) <> 1 then return false; fi;
    elif c = "p=3 mod 4, p=1 mod 3" then
        if (P mod 4) <> 3 or (P mod 3) <> 1 then return false; fi;
    elif c = "p=±1 mod 8" then 
        if not (P mod 8) in [1,7] then return false; fi;
    elif c = "p=±3 mod 8" then 
        if not (P mod 8) in [3,5] then return false; fi;
    fi;
    return true;
end );

##
## Specialize with checking 
##
BindGlobal( "SpecialiseLiePRing", function( L, P, para, vals )
    local S, p, w;

    # get table
    S := SCTable(Zero(L));
    p := IndeterminateByName("p");
    w := IndeterminateByName("w");

    # check for consistency 
    if p in para or w in para then 
        Print("don't include p or w in para \n");
        return fail;
    elif IsInt(P) and IsInt(S.prime) and P <> S.prime then 
        Print("cannot specialize prime to ",P," \n");
        return fail;
    elif IsInt(P) and not IsValidPrime(L,P) then 
        Print("prime does not satisfy condition \n");
        return fail;
    elif Length(para) <> Length(vals) then 
        Print("parameters and values don't match \n");
        return fail;
    fi;
   
    return SpecialiseLiePRingNC( L, P, para, vals );
end );

##
## Specialize prime only
##
BindGlobal( "SpecialisePrimeOfLiePRing", function( L, P )
    return SpecialiseLiePRing( L, P, [], [] );
end );
BindGlobal( "SpecialisePrimeOfLiePRingNC", function( L, P )
    return SpecialiseLiePRingNC( L, P, [], [] );
end );

##
##
##
BindGlobal( "TranslatedLiePRings", function( L, P, para, vals, flag )
    local res, i, R;
    res := List(vals, x -> true);
    for i in [1..Length(vals)] do
        R := SpecialiseLiePRingNC(L, P, para, vals[i]);
        if flag = "group" or flag = "code" then 
            R := PGroupByLiePRing(R);
            if flag = "code" then 
                R := CodePcGroup(R);
            fi;
        fi;
        res[i] := R;
    od; 
    return res;
end );

## 
## Lie rings in a family
##

BindGlobal( "LiePRingsInFamily", function( arg )
    local L, P, W, p, w, d, c, l, para, flag, vals, fals, X, Y, Z, 
          x, y, z, t, j, k, m, n, r, s, u, v;

    # catch arguments
    L := arg[1];
    P := arg[2];
    W := PrimitiveRootMod(P);
    if IsBound(arg[3]) then flag := arg[3]; else flag := false; fi;

    # get Lie ring
    p := PrimeOfLiePRing(L);
    w := IndeterminateByName("w");
    d := DimensionOfLiePRing(L);
    c := LibraryConditions(L);
    l := LibraryName(L);
    para := ParametersOfLiePRing(L);
    vals := [];
    fals := 0;

    # check
    if IsInt(p) then return fail; fi;
    if not IsValidPrime(L,P) then return fail; fi;
    if not IsInt(P) then return fail; fi;

    # the 0-parameters case
    if Length(para) = 0 then 
        return TranslatedLiePRings( L, P, [], [[]], flag );
    fi;

    # the case of trivial conditions
    if Length(c[1]) = 0 then 
        vals := Tuples([0..P-1], Length(para));
        return TranslatedLiePRings( L, P, para, vals, flag );
    fi;

    # assign variable names
    x := IndeterminateByName("x");
    y := IndeterminateByName("y");
    z := IndeterminateByName("z");
    t := IndeterminateByName("t");
    j := IndeterminateByName("j");
    k := IndeterminateByName("k");
    m := IndeterminateByName("m");
    n := IndeterminateByName("n");
    r := IndeterminateByName("r");
    s := IndeterminateByName("s");
    u := IndeterminateByName("u");
    v := IndeterminateByName("v");

    # special cases with notes - include para to have better overview
    if l = "6.178" then # See note6.178 
        para := [x,y,z,t];
        vals := ValsFunction8(P);
    elif l = "6.62" then # See note6.62 
        para := [x,y];
        vals := ValsFunction9(P);
    elif l = "7.62" then # See note5.38 
        para := [x,y,z,t];
        vals := ValsFunction12(P, 1);
    elif l = "7.63" then # See note5.38 
        para := [x,y,z,t];
        vals := ValsFunction12(P, 2);
    elif l = "7.729" then # See Notes5.12 
        para := [x,y,z,t];
        vals := ValsFunction22(P);
    elif l = "7.730" then # See Notes5.12 
        para := [x,y,z,t];
        vals := ValsFunction22a(P);
    elif l = "7.757" then # See Notes5.14, Case 1 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 1);
    elif l = "7.758" then # See Notes5.14, Case 2 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 2);
    elif l = "7.759" then # See Notes5.14, Case 3 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 3);
    elif l = "7.760" then # See Notes5.14, Case 4 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 4);
    elif l = "7.761" then # See Notes5.14, Case 5 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 5);
    elif l = "7.762" then # See Notes5.14, Case 6 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 6);
    elif l = "7.763" then # See Notes5.14, Case 7 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 7);
    elif l = "7.764" then # See Notes5.14, Case 8 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 8);
    elif l = "7.765" then # See Notes5.14, Case 9 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 9);
    elif l = "7.766" then # See Notes5.14, Case 10 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 10);
    elif l = "7.767" then # See Notes5.14, Case 11 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 11);
    elif l = "7.768" then # See Notes5.14, Case 12 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 12);
    elif l = "7.769" then # See Notes5.14, Case 13 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 13);
    elif l = "7.770" then # See Notes5.14, Case 14 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 14);
    elif l = "7.771" then # See Notes5.14, Case 15 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 15);
    elif l = "7.772" then # See Notes5.14, Case 16 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 16);
    elif l = "7.773" then # See Notes5.14, Case 17 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 17);
    elif l = "7.774" then # See Notes5.14, Case 18 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 18);
    elif l = "7.775" then # See Notes5.14, Case 19 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 19);
    elif l = "7.776" then # See Notes5.14, Case 20 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 20);
    elif l = "7.777" then # See Notes5.14, Case 21 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 21);
    elif l = "7.778" then # See Notes5.14, Case 22 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 22);
    elif l = "7.779" then # See Notes5.14, Case 23 
        para := [x,y,z,t,u,v];
        vals := ValsFunction28(P, 23);
    elif l = "7.780" then # See Notes5.14, Case 24 
        para := [x,y,z,t,s,u,v];  
        vals := ValsFunction28(P, 24);
    elif l = "7.1691" then # See Notes6.150, Case 3 
        para := [x,y,z];
        vals := ValsFunction23(P);
    elif l = "7.1692" then # See Notes6.150, Case 4 
        para := [x,y,z];
        vals := ValsFunction23a(P);
    elif l = "7.1693" then # See Notes6.150, Case 5 
        para := [x,y,z];
        vals := ValsFunction23b(P);
    elif l = "7.1709" then # See Notes6.150, Case 8 
        para := [x,y,z,t];
        vals := ValsFunction23c(P);
    elif l = "7.1763" then # See Notes6.163a 
        para := [x,y,z,t,u];
        vals := ValsFunction26(P);
    elif l = "7.1764" then # See Notes6.163b 
        para := [x,y,z,t,u];
        vals := ValsFunction26a(P);
    elif l = "7.1777" then # See Notes6.173 
        para := [y,z,t,u,v];
        vals := ValsFunction21(P);
    elif l = "7.1797" then # See Notes6.178 
        para := [x,y];
        if fals = 0 then fals := ValsFunction24(P); fi; vals := fals[1];
    elif l = "7.1798" then # See Notes6.178a 
        para := [y,z,t,u,v];
        if fals = 0 then fals := ValsFunction24(P); fi; vals := fals[2];
    elif l = "7.1799" then # See Notes6.178b 
        para := [y,z,t,u,v];
        if fals = 0 then fals := ValsFunction24(P); fi; vals := fals[3];
    elif l = "7.3068" then # See Notes4.1 Case 4 
        para := [x,y,z,t];
        vals := ValsFunction27(P);
    elif l = "7.3285" then # See Notes4.1, Case 5 
        para := [x,y,z,t,j,k,m,n,r,s,u,v];
        vals := ValsFunction27a(P);
    elif l = "7.3286" then # See Notes4.1, Case 6 
        para := [x,y,z,t,j,k,m,n,r,s,u,v];
        vals := ValsFunction27b(P);
    elif l = "7.3387" then # See Notes5.3, Case 4 
        para := [x,y,z,t];
        vals := ValsFunction8a(P);
    elif l = "7.3437" then # See Notes5.3, Case 6 
        para := [x,y,z,t,r,s,u,v];
        vals := ValsFunction19(P);
    elif l = "7.3438" then # See Notes5.3, Case 7 
        para := [x,y,z,t,r,s,u,v];
        vals := ValsFunction19a(P);
    elif l = "7.4670" then # See note1dec5.1 
        para := [x,y];
        vals := ValsFunction9(P);
    elif l = "7.4723" then # See note2dec5.1 
        para := [x,y,z,t];
        vals := ValsFunction25(P);
    elif l = "7.1389" then # See Notes6.114
        para := [x,y];
        vals := ValsFunction20(P);
    fi;
    if vals <> [] then return TranslatedLiePRings( L, P, para, vals, flag ); fi;

    c := c[1];

    # 1 parameter
    if Length(para) = 1 then 

        if c = "1+4x not a square" then 
            vals := List( ValsFunction2(P), X -> [X]);
        elif c = "unique x so that 1-wx^2 is not a square" then 
            vals := [[ValsFunction10(P,W)]];
        elif c = "unique x so that x^2-w is not a square" then 
            vals := [[ValsFunction10a(P,W)]];
        elif c = "x ne -1" then 
            vals := List([0..P-2], X -> [X]);
        elif c = "x ne -1,-1/2" then 
            vals := List(Difference([0..P-2], [(P-1)/2]), X -> [X]);
        elif c = "x ne -2" then 
            vals := List(Difference([0..P-1], [P-2]), X -> [X]);
        elif c = "x ne 0" then 
            vals := List([1..P-1], X -> [X]);
        elif c = "x ne 0, equivalence classes {x,-x,1/x,-1/x}" then 
            vals := List(ValsFunction13(P), X -> [X]);
        elif c = "x ne 0, x~-x" then 
            vals := List( [1..(P-1)/2], X -> [X] );
        elif c = "x ne 0, x~x^-1" then 
            vals := List( ValsFunction1(P, [1..P-1]), X -> [X]);
        elif c = "x ne 0,-2, x~-x-2" then 
            vals := List(Union([1..(P-3)/2], [P-1]), X -> [X]);
        elif c = "x ne 0, x~ax if a^3=1" then 
            vals := List(ValsFunction5(P, 3, 1), X -> [X]);
        elif c = "x ne 0, x~ax if a^4=1" then 
            vals := List(ValsFunction5(P, 4, 1), X -> [X]);
        elif c = "x ne 0, x~ax if a^5=1" then 
            vals := List(ValsFunction5(P, 5, 1), X -> [X]);
        elif c = "x ne 0, x~ax if a^6=1" then 
            vals := List(ValsFunction5(P, 6, 1), X -> [X]);
        elif c = "x ne 0, x~ax if a^7=1" then 
            vals := List(ValsFunction5(P, 7, 1), X -> [X]);
        elif c = "x ne 0,-1" then 
            vals := List([1..P-2], X -> [X]);
        elif c = "x ne 0,-1, x~-1-x" then 
            vals := List( [1..(P-1)/2], X -> [X] );
        elif c = "x ne 0,-1,2,1/2" then 
            vals := List(Difference([1..P-2], [2, (P+1)/2]), X -> [X]);
        elif c = "x ne 0,-1/4" then 
            vals := List(Difference([1..P-1], [((P-1)/4) mod P]), X -> [X]);
        elif c = "x ne 0,-w, x~-w-x" then 
            vals := List(Filtered([1..P-1], Y -> ((-W-Y) mod P) >= Y), X->[X]);
        elif c = "x ne 0,-w,2w,w/2" then 
            vals := List(Difference([1..P-1], ([-W,2*W,W/2] mod P)), X -> [X]);
        elif c = "x ne 0,1" then 
            vals := List([2..P-1], X -> [X]);
        elif c = "x ne 1" then 
            vals := List(Difference( [0..P-1], [1] ), X -> [X]);
        elif c = "x~-1-x" then 
            vals := List([0..(P-1)/2], X -> [X]);
        elif c = "x~1-x" then 
            vals := List([1..(P+1)/2], X -> [X]);
        elif c = "x~-x" then 
            vals := List( [0..(P-1)/2], X -> [X] );
        elif c = "x~-x-2" then 
            vals := List(Union([0..(P-3)/2], [P-1]), X -> [X]);
        elif c = "x~w-x" then 
            vals := List(Filtered([0..P-1], Y->((W-Y) mod P)>=Y), X -> [X]);
        elif c = "x~ax if a^3=1" then 
            vals := List(ValsFunction5(P, 3, 0), X -> [X]);
        elif c = "x~ax if a^4=1" then 
            vals := List(ValsFunction5(P, 4, 0), X -> [X]);
        elif c = "x=0,1" then 
            vals := List([0,1], X -> [X]);
        elif c = "x=0,1,w" then 
            vals := List([0,1,W], X -> [X]);
        elif c = "x=0,1,w,w^2,w^3" then 
            vals := List([0,1,W,W^2,W^3], X -> [X mod P]);
        elif c = "x=1,w,...,w^(2gcd(p-1,3)-1)" then 
            vals := List([0..2*Gcd(P-1,3)-1], X -> [(W^X) mod P]);
        elif c = "x=1,w,...,w^(gcd(p-1,8)-1)" then 
            vals := List([0..Gcd(P-1,8)-1], X -> [(W^X) mod P]);
        elif c = "x=w,w^2" then 
            vals := List([W,W^2], X -> [X mod P]);
        elif c = "x=w,w^2,...,w^((p-3)/2)" then 
            vals := List([1..(P-3)/2], X -> [(W^X) mod P]);
        elif c = "x=w,w^2,...,w^6" then 
            vals := List([1..6], X -> [(W^X) mod P]);
        elif c = "x=w,w^2,w^3,w^4" then 
            vals := List([1..4], X -> [(W^X) mod P]);
        elif c = "x=w^2,w^3,w^4,w^5" then 
            vals := List([2..5], X -> [(W^X) mod P]);
        elif c = "x=w^3,w^4,...,w^8" then 
            vals := List([3..8], X -> [(W^X) mod P]);
        elif c = "x=w^4,w^5,w^6,w^7" then 
            vals := List([4..7], X -> [(W^X) mod P]);
        fi;
        if P>3 and vals = [] then Error("conditions not found - para 1"); fi;
        return TranslatedLiePRings( L, P, para, vals, flag );
    fi;
  
    # 2 parameter 
    if Length(para) = 2 then 

        if c = "[x,y]~[-x,y]" then
            vals := Cartesian([0..(P-1)/2], [0..(P-1)]);
        elif c = "[x,y]~[x,-y]" then
            vals := Cartesian([0..(P-1)], [0..(P-1)/2]);
        elif c = "[x,y]~[y,x]" then
            vals := Concatenation(List([0..P-1], X -> List([0..X],Y->[X,Y])));
        elif c = "[x,y]~[x',y'] if y^2-wx^2=y'^2-wx'^2" then
            vals := ValsFunction6(P);
        elif c = "[x,y]~[ax,y] if a^3=1" then
            vals := Cartesian( ValsFunction5(P,3,0), [0..(P-1)]);
        elif c = "[x,y]~[x,ay] if a^4=1" then
            vals := Cartesian( [0..(P-1)], ValsFunction5(P,4,0));
        elif c = "[x,y]~[±x,ay] if a^3=1" then
            vals := Cartesian( [0..(P-1)/2], ValsFunction5(P,3,0));
        elif c = "x ne -1, (1+x)y=1" then
            vals := List([0..(P-2)], X -> [X, (1+X)^-1 mod P]);
        elif c = "x ne -2" then
            vals := Cartesian( Difference([0..(P-1)], [(P-2)]), [0..(P-1)]);
        elif c = "x ne -2w" then
            vals := Cartesian( Difference([0..(P-1)], [(P-2*W) mod P]), [0..(P-1)]);
        elif c = "x ne 0" then
            vals := Cartesian( [1..(P-1)], [0..(P-1)]);
        elif c = "x ne 0, 4x+y^2 not a square" then
            vals := ValsFunction15(P);
        elif c = "x ne 0, [x,y]~[-x,-y-2]" then
            vals := Cartesian( [1..(P-1)/2], [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[-x,-y]" then
            vals := Cartesian( [1..(P-1)/2], [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[-x,y]~[x,-y]" then
            vals := Cartesian( [1..(P-1)/2], [0..(P-1)/2]);
        elif c = "x ne 0, [x,y]~[a^4x,ay] if a^5=1" then
            vals := Cartesian (ValsFunction5(P,5,1), [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[ax,a^2y] if a^3=1" then
            vals := Cartesian (ValsFunction5(P,3,1), [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[ax,a^2y] if a^6=1" then
            vals := Cartesian (ValsFunction5(P,6,1), [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[ax,a^3y] if a^5=1" then
            vals := Cartesian (ValsFunction5(P,5,1), [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[ax,a^3y] if a^6=1" then
            vals := Cartesian (ValsFunction5(P,6,1), [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[ax,ay] if a^3=1" then
            vals := Cartesian (ValsFunction5(P,3,1), [0..(P-1)]);
        elif c = "x ne 0, [x,y]~[x,-y]" then
            vals := Cartesian( [1..(P-1)], [0..(P-1)/2]);
        elif c = "x ne 0, [x,y]~[x,-y]~[-x,iy] if i^2=-1" then
            vals := Cartesian( [1..(P-1)/2], [0..(P-1)/2]);
        elif c = "x ne 0, unique y so that 1-wy^2 is not a square, [x,y]~[-x,y]" then
            vals := Cartesian([1..(P-1)/2], [ValsFunction10(P,W)]);
        elif c = "x ne 0, unique y so that wy^2=2, [x,y]~[-x,y]" then
            Y := IsSquareModP(P,((2/W) mod P)); if not IsInt(Y) then Error("no int"); fi;
            vals := Cartesian([1..(P-1)/2], [Y]);;
        elif c = "x ne 0, unique y so that y^2=2, [x,y]~[-x,y]" then
            Y := IsSquareModP(P,2); if not IsInt(Y) then Error("no int"); fi;
            vals := Cartesian([1..(P-1)/2], [Y]);;
        elif c = "x ne 0, unique y so that y^2=2w^2, [x,y]~[-x,y]" then
            Y := IsSquareModP(P,((2*W^2) mod P)); if not IsInt(Y) then Error("no int"); fi;
            vals := Cartesian([1..(P-1)/2], [Y]);;
        elif c = "x ne 0, unique y so that y^2=2w^3, [x,y]~[-x,y]" then
            Y := IsSquareModP(P,((2*W^3) mod P)); if not IsInt(Y) then Error("no int"); fi;
            if IsInt(Y) then vals := Cartesian([1..(P-1)/2], [Y]); fi;
        elif c = "x ne 0, y=1,-1" then
            vals := Cartesian( [1..(P-1)], [1,(P-1)]);
        elif c = "x ne 0, y=1,-1, [x,y]~[-x,y]" then
            vals := Cartesian( [1..(P-1)/2], [1,(P-1)]);
        elif c = "x ne 0, y=1,w, [x,y]~[-x,y]" then
            vals := Cartesian( [1..(P-1)/2], [1,W]);
        elif c = "x ne 0, y=w,w^2,...,w^((p-3)/2)" then
            vals := Cartesian( [1..(P-1)], List([1..(P-3)/2], X -> ((W^X) mod P)));
        elif c = "x ne 0, y=w,w^2,...,w^6, [x,y]~[ax,y] if a^7=1" then
            vals := Cartesian( ValsFunction5(P,7,1), List([1..6], X -> ((W^X) mod P)));
        elif c = "x ne 0, y=w,w^2,w^3,w^4, [x,y]~[ax,y] if a^5=1" then
            vals := Cartesian( ValsFunction5(P,5,1), List([1..4], X -> ((W^X) mod P)));
        elif c = "x ne 0, y=w^2,w^3,w^4,w^5, [x,y]~[ax,y] if a^3=1" then
            vals := Cartesian( ValsFunction5(P,3,1), List([2..5], X -> ((W^X) mod P)));
        elif c = "x ne 1" then
            vals := Cartesian( Difference([0..(P-1)], [1]), [0..(P-1)]);
        elif c = "x ne 1-w, [x,y]~[x,-y]~[-x+2(1-w),iy] if i^2=-1" then
            vals := Cartesian(ValsFunction14(P,W,1), [0..(P-1)/2]);
        elif c = "x ne 1-w^2, [x,y]~[x,-y]~[-x+2(1-w^2),iy] if i^2=-1" then
            vals := Cartesian(ValsFunction14(P,W,2), [0..(P-1)/2]);
        elif c = "x ne 1-w^3, [x,y]~[x,-y]~[-x+2(1-w^3),iy] if i^2=-1" then
            vals := Cartesian(ValsFunction14(P,W,3), [0..(P-1)/2]);
        elif c = "x,y ne 0, [x,y]~[-x,-y]" then
            vals := Cartesian([1..(P-1)], [1..(P-1)/2]);
        elif c = "x,y ne 0, [x,y]~[ax,a^3y] if a^4=1" then
            vals := Cartesian(ValsFunction5(P,4,1), [1..(P-1)]);
        elif c = "x,y ne 0, [x,y]~[xy^-2,y^-1]" then
            vals := Cartesian([1..(P-1)], ValsFunction1(P,[1..P-1]));
        elif c = "x,y ne 0, [x,y]~[y,x]" then
            vals := Concatenation(List([1..(P-1)], X -> List([1..X], Y -> [X,Y])));
        elif c = "x,y ne 0, x ne y, [x,y]~[y,x]" then
            vals := Concatenation(List([1..(P-1)], X -> List([1..X-1], Y -> [X,Y])));
        elif c = "x=0,-1, y=0,1" then
            vals := Cartesian( [0,P-1], [0,1]);
        elif c = "x=0,1" then
            vals := Cartesian( [0,1], [0..(P-1)]);
        elif c = "x=0,1, y=0,1" then
            vals := Cartesian( [0,1], [0,1]);
        elif c = "x=0,1,w" then
            vals := Cartesian( [0,1,W], [0..(P-1)]);
        elif c = "x=0,1,w, y=0,1" then
            vals := Cartesian( [0,1,W], [0,1]);
        elif c = "x=0,1,w, y=1,-1" then
            vals := Cartesian( [0,1,W], [1,P-1]);
        elif c = "x=0,1,w, y=w,w^2,...,w^((p-3)/2)" then
            vals := Cartesian( [0,1,W], List([1..(P-3)/2], X -> ((W^X) mod P)));
        elif c = "x=1,w" then
            vals := Cartesian( [1,W], [0..(P-1)]);
        elif c = "x=1,w,...,w^(2gcd(p-1,3)-1), y ne 0, [x,y]~[x,ay] if a^6=1" then
            vals := List([0..(2*Gcd(P-1,3)-1)], X -> ((W^X) mod P));
            vals := Cartesian( vals, ValsFunction5(P,6,1));
        elif c = "x=1,w,...,w^(gcd(p-1,8)-1), y ne 0, [x,y]~[x,ay] if a^8=1" then
            vals := List([0..(Gcd(P-1,8)-1)], X -> ((W^X) mod P));
            vals := Cartesian( vals, ValsFunction5(P,8,1));
        elif c = "xy ne 1, [x,y]~[y,x]" then
            vals := Concatenation(List([0..P-1], X -> List([0..X],Y->[X,Y])));
            vals := Filtered(vals, X -> (X[1]*X[2] mod P)<>1); 
        elif c = "y ne 0, [x,y]~[-x,y]" then
            vals := Cartesian([0..(P-1)/2], [1..(P-1)]);
        elif c = "y ne 0, [x,y]~[a^2x,ay] if a^4=1" then
            vals := Cartesian([0..(P-1)], ValsFunction5(P,4,1));
        elif c = "y ne 0, [x,y]~[x,-y]" then
            vals := Cartesian([0..(P-1)], [1..(P-1)/2]);
        elif c = "y ne 0, [x,y]~[x,ay] if a^3=1" then
            vals := Cartesian([0..(P-1)], ValsFunction5(P,3,1));
        elif c = "y ne 0, [x,y]~[x,ay] if a^4=1" then
            vals := Cartesian([0..(P-1)], ValsFunction5(P,4,1));
        elif c = "y ne 0, [x,y]~[x,ay] if a^5=1" then
            vals := Cartesian([0..(P-1)], ValsFunction5(P,5,1));
        elif c = "y ne 1/2, [x,y]~[-x,1-y]" then
            vals := Cartesian([0..(P-1)], [1..(P-1)/2]);
        elif c = "y=1,w, [x,y]~[-x,y]" then
            vals := Cartesian([0..(P-1)/2], [1,W]);
        elif c = "y=1,w, [x,y]~[ax,y] if a^8=1" then
            vals := Cartesian(ValsFunction5(P,8,0), [1,W]);
        elif c = "y=1,w,...,w^5, [x,y]~[ax,y] if a^6=1" then
            vals := List([0..5], X -> ((W^X) mod P));
            vals := Cartesian(ValsFunction5(P,6,0), vals);
        elif c = "y=1,w,w^2, [x,y]~[ax,y] if a^3=1" then
            vals := List([0..2], X -> ((W^X) mod P));
            vals := Cartesian(ValsFunction5(P,3,0), vals);
        elif c = "y=w^2,w^3, [x,y]~[ax,y] if a^8=1" then
            vals := List([2,3], X -> ((W^X) mod P));
            vals := Cartesian(ValsFunction5(P,8,0), vals);
        elif c = "y=w^2,w^3,w^4,w^5" then
            vals := Cartesian([0..(P-1)], List([2..5], X -> ((W^X) mod P)));
        elif c = "y=w^4,w^5,w^6,w^7, [x,y]~[ax,y] if a^8=1" then
            vals := List([4..7], X -> ((W^X) mod P));
            vals := Cartesian(ValsFunction5(P,8,0), vals);
        fi;
        if P>3 and vals = [] then Error("conditions not found - para 2"); fi;
        return TranslatedLiePRings( L, P, para, vals, flag );
    fi;

    # 3 parameter 
    if Length(para) = 3 then 

        if c = "[x,y,z]~[-x,-y,-z]" then
            vals := ValsFunction17(P);
        elif c = "[x,y,z]~[-x,y,z]" then
            vals := Cartesian([0..(P-1)/2],[0..P-1],[0..P-1]);
        elif c = "[x,y,z]~[x,y,-z]" then
            vals := Cartesian([0..P-1],[0..P-1],[0..(P-1)/2]);
        elif c = "[x,y,z]~[z,y,x]" then
            vals := Cartesian([0..(P-1)],[0..(P-1)],[0..(P-1)]);
            vals := Filtered(vals, X -> X[1]<=X[3]); 
        elif c = "unique z so that z^2-4 is not a square, [x,y,z]~[y,x,z]" then
            Z := ValsFunction11(P);
            vals := Concatenation(List([0..P-1], X -> List([0..X],Y->[X,Y,Z])));
        elif c = "x ne -2, [x,y,z]~[x,y,-z]" then
            vals := Cartesian(Difference([0..P-1],[P-2]),[0..P-1],[0..(P-1)/2]);
        elif c = "x ne -2w, [x,y,z]~[x,y,-z]" then
            vals := Cartesian(Difference([0..P-1],[(-2*W) mod P]),[0..P-1],[0..(P-1)/2]);
        elif c = "x ne 0" then
            vals := Cartesian([1..(P-1)], [0..(P-1)], [0..(P-1)]);
        elif c = "x ne 0, [x,y,z]~[-x,-y,z]" then
            vals := Cartesian([1..(P-1)/2], [0..(P-1)], [0..(P-1)]);
        elif c = "x ne 0, [x,y,z]~[a^3x,a^4y,az] if a^5=1" then
            vals := Cartesian(ValsFunction5(P,5,1), [0..(P-1)], [0..(P-1)]);
        elif c = "x ne 0, [x,y,z]~[ax,a^2y,az] if a^4=1" then
            vals := Cartesian(ValsFunction5(P,4,1), [0..(P-1)], [0..(P-1)]);
        elif c = "x ne 0, [x,y,z]~[ax,y,a^2z] if a^3=1" then
            vals := Cartesian(ValsFunction5(P,3,1), [0..(P-1)], [0..(P-1)]);
        elif c = "x ne 0, y=w^2,w^3,w^4,w^5, [x,y,z]~[ax,y,a^2z] if a^6=1" then
            vals := Cartesian(ValsFunction5(P,6,1),List([2,3,4,5], X -> ((W^X) mod P)), [0..P-1]);
        elif c = "x ne 0, z=w,w^2,w^3,w^4, [x,y,z]~[ax,a^3y,z] if a^5=1" then
            vals := Cartesian(ValsFunction5(P,5,1), [0..P-1], List([1,2,3,4], X -> ((W^X) mod P)));
        elif c = "x,z ne 0, [x,y,z]~[-x,y,-z]~[x,-y,z]" then
            vals := Cartesian([1..(P-1)],[0..(P-1)/2],[1..(P-1)/2]);
        elif c = "x=0,1" then
            vals := Cartesian([0,1],[0..(P-1)],[0..(P-1)]);
        elif c = "x=0,1, y=0,1" then
            vals := Cartesian([0,1],[0,1],[0..(P-1)]);
        elif c = "x=0,1, y=0,1, z ne 0,-1" then
            vals := Cartesian([0,1],[0,1],[1..(P-2)]);
        elif c = "x=0,1, y=0,1, z=0,1" then
            vals := Cartesian([0,1],[0,1],[0,1]);
        elif c = "x=0,1, y=0,1, z=0,1,w" then
            vals := Cartesian([0,1],[0,1],[0,1,W]);
        elif c = "x=1,w,...,w^(2gcd(p-1,3)-1), y ne 0, [x,y,z]~[x,ay,±a^2z] if a^3=1" then
            vals := Cartesian(List([0..2*Gcd(P-1,3)-1], X -> ((W^X) mod P)),
                              ValsFunction5(P,3,1), [0..(P-1)/2]);
        elif c = "x=w,w^2,...,w^((p-3)/2), y=1,w" then
            vals := Cartesian(List([1..(P-3)/2], X -> ((W^X) mod P)), [1,W], [0..(P-1)]);
        elif c = "y ne 0, [x,y,z]~[x,-y,-z]" then
            vals := Cartesian([0..(P-1)],[1..(P-1)/2],[0..(P-1)]);
        elif c = "y ne 0, [x,y,z]~[zy,y,x/y]" then
            vals := ValsFunction18(P); 
        elif c = "y ne 0,1, (x+y)(1+z)=1, [x,y,z]~[zy,y,x/y]" then
            vals := ValsFunction18a(P); 
        elif c = "z=1,w,w^2,w^3,w^4, [x,y,z]~[x,ay,z] if a^5=1" then
            vals := Cartesian([0..(P-1)],ValsFunction5(P,5,0),([1,W,W^2,W^3,W^4] mod P));
        fi;
        if P>3 and vals = [] then Error("conditions not found - para 3"); fi;
        return TranslatedLiePRings( L, P, para, vals, flag );
    fi;

    # 4 parameters
    if Length(para) = 4 then 

        if c = "[x,y,z,t]~[t+1,z+1,y-1,x-1]" then
            vals := ValsFunction16(P);
        elif c = "[x,y,z,t]~[x,-y,z,-t]" then
            vals := Cartesian([0..(P-1)],[1..(P-1)/2],[0..P-1],[0..P-1]);
            vals := Concatenation( vals, Cartesian([0..(P-1)],[0],[0..P-1],[0..(P-1)/2]));
        elif c = "x ne 0, [x,y,z,t]~[-x,y,t,z]" then
            vals := Cartesian([1..(P-1)/2],[0..P-1],[0..P-1],[0..P-1]);
        elif c = "x ne 0, [x,y,z,t]~[-x,y,z,-t]" then
            vals := Cartesian([1..(P-1)/2],[0..P-1],[0..P-1],[0..P-1]);
        elif c = "x ne 0, [x,y,z,t]~[ax,a^3y,a^4z,at] if a^5=1" then
            vals := Cartesian(ValsFunction5(P,5,1),[0..P-1],[0..P-1],[0..P-1]);
        elif c = "x ne 0, [x,y,z,t]~[ax,a^3y,a^4z,t] if a^5=1" then
            vals := Cartesian(ValsFunction5(P,5,1),[0..P-1],[0..P-1],[0..P-1]);
        fi;
        if P>3 and vals = [] then Error("conditions not found - para 4"); fi;
        return TranslatedLiePRings( L, P, para, vals, flag );
    fi;
  
end );


[ Dauer der Verarbeitung: 0.39 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