Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/liepring/gap/class/   (GAP Algebra Version 4.15.1©)  Datei vom 11.5.2024 mit Größe 22 kB image not shown  

Quelle  porcpoly.gi   Sprache: Shell

 


BindGlobal( "EvaluatePorcPoly", function( f, P )
    local inds, vals, p, g3, g4, g5, g6, g7, g8, g9, h3, s16;

    if not IsPrimeInt(P) or P = 2 then return false; fi;

    # check
    if IsInt(f) then return f; fi;

    # get prime
    p := IndeterminateByName("p");

    # get indets
    g3 := IndeterminateByName("(p-1,3)");
    h3 := IndeterminateByName("(p+1,3)");
    g4 := IndeterminateByName("(p-1,4)");
    g5 := IndeterminateByName("(p-1,5)");
    g7 := IndeterminateByName("(p-1,7)");
    g8 := IndeterminateByName("(p-1,8)");
    g9 := IndeterminateByName("(p-1,9)");
    s16 := IndeterminateByName("(p^2-1,16)");
    inds := [p, g3, h3, g4, g5, g7, g8, g9, s16];

    # get values
    vals := [P, Gcd(P-1,3), Gcd(P+1,3), Gcd(P-1,4), Gcd(P-1,5), 
             Gcd(P-1,7), Gcd(P-1,8), Gcd(P-1,9), Gcd(P^2-1, 16)];

    # return
    return Value( f, inds, vals );
end );

BindGlobal( "DegreePorcPoly", function( f )
    local p, a, b;
    if IsInt(f) then return 0; fi;
    p := IndeterminateByName("p");
    a := DegreeIndeterminate(NumeratorOfRationalFunction(f),p);
    b := DegreeIndeterminate(DenominatorOfRationalFunction(f),p);
    if b <> 0 then Error("something wrong with degrees "); fi;
    return a;
end );

BindGlobal( "EliminateDenominator", function( f )
    local g3, g4, g5, g7, g8, a, b;
   
    # check the easy case
    if IsInt(f) or IsPolynomial(f) then return f; fi;

    # translate
    g3 := IndeterminateByName("(p-1,3)");
    g4 := IndeterminateByName("(p-1,4)");
    g5 := IndeterminateByName("(p-1,5)");
    g7 := IndeterminateByName("(p-1,7)");
    g8 := IndeterminateByName("(p-1,8)");

    b := DenominatorOfRationalFunction(f);
    a := NumeratorOfRationalFunction(f);
    if b = g3 then return a*(4-b)/3; fi;
    if b = g4 then return a*(6-b)/8; fi;
    if b = g5 then return a*(6-b)/5; fi;
    if b = g7 then return a*(8-b)/7; fi;
    if b = g8 then return a*(b^2/64 - 7*b/32 + 7/8); fi;
 
    Error("unknown denominator");
end );

BindGlobal( "SimplifyPorcPoly", function( f )
    local g, g3, g4, g5, g7, o, g8, g9, p, h3, s16;

    if IsInt(f) then return f; fi;

    # get the indeterminates
    p := IndeterminateByName("p");
    g3 := IndeterminateByName("(p-1,3)");
    h3 := IndeterminateByName("(p+1,3)");
    g4 := IndeterminateByName("(p-1,4)");
    g5 := IndeterminateByName("(p-1,5)");
    g7 := IndeterminateByName("(p-1,7)");
    g8 := IndeterminateByName("(p-1,8)");
    g9 := IndeterminateByName("(p-1,9)");
    s16 := IndeterminateByName("(p^2-1,16)");

    o := MonomialLexOrdering([g8,g4,g9,g3,g5,g7,h3,s16,p]);
    if DegreeIndeterminate(f, g9) > 1 then 
        f := PolynomialReducedRemainder( f, [g9^2-12*g9+8*g3+3], o );
        if DegreeIndeterminate(f,g9)>1 then Error("wrong reduction g9"); fi;
    fi;
    if DegreeIndeterminate(f, g3) > 1 then 
        f := PolynomialReducedRemainder( f, [g3^2-4*g3+3], o );
        if DegreeIndeterminate(f,g3)>1 then Error("wrong reduction g3"); fi;
    fi;
    if DegreeIndeterminate(f, g5) > 1 then 
        f := PolynomialReducedRemainder( f, [g5^2-6*g5+5], o );
        if DegreeIndeterminate(f,g5)>1 then Error("wrong reduction g5"); fi;
    fi;
    if DegreeIndeterminate(f, g7) > 1 then 
        f := PolynomialReducedRemainder( f, [g7^2-8*g7+7], o );
        if DegreeIndeterminate(f,g7)>1 then Error("wrong reduction g7"); fi;
    fi;
    if DegreeIndeterminate(f, g8) > 1 then 
        f := PolynomialReducedRemainder( f, [g8^2-12*g8+6*g4+8], o );
        if DegreeIndeterminate(f,g8)>1 then Error("wrong reduction g8"); fi;
    fi;
    if DegreeIndeterminate(f, g4) > 1 then 
        f := PolynomialReducedRemainder( f, [g4^2-6*g4+8], o );
        if DegreeIndeterminate(f,g4)>1 then Error("wrong reduction g4"); fi;
    fi;
    if DegreeIndeterminate(f, g8) > 0 and DegreeIndeterminate(f, g4) > 0 then 
        f := PolynomialReducedRemainder( f, [g4*g8-4*g8-2*g4+8], o );
    fi;

    return f;
end );
    
BindGlobal( "CharFunctionByIsomRestrictions", function( L )
    local d, c, p, l, para, w, x, y, z, t, j, k, m, n, r, s, u, v, 
          g3, h3, g4, g5, g7, g8, g9, s16, a;

    # get some data
    d := DimensionOfLiePRing(L);
    c := LibraryConditions(L);
    p := PrimeOfLiePRing(L);
    l := LibraryName(L);
    para := ParametersOfLiePRing(L);

    # the trivial cases
    if Length(para) = 0 then return 1; fi;
    if Length(c[1]) = 0 then return p^Length(para); fi;

    # get the indeterminates
    p := IndeterminateByName("p");
    w := IndeterminateByName("w");
    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");

    # get gcd's
    g3 := IndeterminateByName("(p-1,3)");
    h3 := IndeterminateByName("(p+1,3)");
    g4 := IndeterminateByName("(p-1,4)");
    g5 := IndeterminateByName("(p-1,5)");
    g7 := IndeterminateByName("(p-1,7)");
    g8 := IndeterminateByName("(p-1,8)");
    g9 := IndeterminateByName("(p-1,9)");
    s16 := IndeterminateByName("(p^2-1,16)");

    ## a = number of non-zero elms in GF(p) with 2*w^2*a^3+5*w*a^2+2*a square
    a := IndeterminateByName("a");

    if l = "6.178" then # See note6.178 
        return p^2+(p+1-g4)/2;
    elif l = "6.62" then # See note6.62 
        return p;
    elif l = "7.62" then # See note5.38 
        return (g3*(p^2+3*p+11)+1)/2;
    elif l = "7.63" then # See note5.38 
        return (g3*(p^2+p+1)+5)/2;
    elif l = "7.729" then # See Notes5.12 
        return p^2+(7*p+15)/2;
    elif l = "7.730" then # See Notes5.12 
        return p^2+(3*p+5)/2;
    elif l = "7.757" then # See Notes5.14, Case 1 
        return 3*p+22;
    elif l = "7.758" then # See Notes5.14, Case 2 
        return 5*p+13+g3+g4;
    elif l = "7.759" then # See Notes5.14, Case 3 
        return 2*p+8+g4;
    elif l = "7.760" then # See Notes5.14, Case 4 
        return 6*p+8+2*g3+g4+g5;
    elif l = "7.761" then # See Notes5.14, Case 5 
        return 5*p+13+2*g3+g4;
    elif l = "7.762" then # See Notes5.14, Case 6 
        return p^2+3*p-3+(p+2)*g3+(p+1)*g4+(p+1)*g5;
    elif l = "7.763" then # See Notes5.14, Case 7 
        return 2*p^2+11*p+43+g4;
    elif l = "7.764" then # See Notes5.14, Case 8 
        return p^3+4*p^2+6*p+(p+5)*g3+3*g4+g5;
    elif l = "7.765" then # See Notes5.14, Case 9 
        return p^3+5*p^2/2+7*p+19/2+(p+4)*g4/2;
    elif l = "7.766" then # See Notes5.14, Case 10 
        return p^3+5*p^2/2+7*p+19/2+(p+4)*g4/2;
    elif l = "7.767" then # See Notes5.14, Case 11 
        return (p^4+p^3+4*p^2+p-1+(p^2+2*p+3)*g3+(p+2)*g4)/2;
    elif l = "7.768" then # See Notes5.14, Case 12 
        return (p^4+p^3+4*p^2+p-1+(p^2+2*p+3)*g3+(p+2)*g4)/2;
    elif l = "7.769" then # See Notes5.14, Case 13 
        return 2*p^2+11*p+27+g4;
    elif l = "7.770" then # See Notes5.14, Case 14 
        return p^3+2*p^2+6*p+10+(p+4)*g3;
    elif l = "7.771" then # See Notes5.14, Case 15 
        return p^3+(7*p^2+17*p+59+5*g3+(p+1)*g4)/2;
    elif l = "7.772" then # See Notes5.14, Case 16 
        return 2*p^4+4*p^3+8*p^2+14*p+11+4*g3+3*g4;
    elif l = "7.773" then # See Notes5.14, Case 17 
        return (p^4+2*p^3+3*p^2+4*p+2)*(p-1)/g3+3*p+4+(p^2+p+1)*g4/2;
    elif l = "7.774" then # See Notes5.14, Case 18 
        return (2*p^5+2*p^4+2*p^3+2*p^2+14*p+17)/3;
    elif l = "7.775" then # See Notes5.14, Case 19 
        return 2*p^2+11*p+27+g4;
    elif l = "7.776" then # See Notes5.14, Case 20 
        return 2*p^4+4*p^3+6*p^2+11*p+11+2*g3+(p+1)*g4;
    elif l = "7.777" then # See Notes5.14, Case 21 
        return 2*p^3+6*p^2+7*p+7+(p+1)*g4;
    elif l = "7.778" then # See Notes5.14, Case 22 
        return (2*p^3+3*p^2+3*p+13-g3+(p+1)*g4)/2;
    elif l = "7.779" then # See Notes5.14, Case 23 
        return (p^5+p^4+p^3+p^2)*g3/3+p+2+(p^2+p+1)*g4/2;
    elif l = "7.780" then # See Notes5.14, Case 24 
        return 2*(p^5+p^4+p^3+p^2)/3+2*p+3;
    elif l = "7.1691" then # See Notes6.150, Case 3 
       return (p+1+(p+3)*g3+g4)/2;
    elif l = "7.1692" then # See Notes6.150, Case 4 
        return 3+g3*(p+3+g4)/4;
    elif l = "7.1693" then # See Notes6.150, Case 5 
        return 2+g3*(p+7-g4)/4;
    elif l = "7.1709" then # See Notes6.150, Case 8 
        return (5*p-7+(p^2-5)*g3-g4)/2;
    elif l = "7.1763" then # See Notes6.163a 
        return 2*p^2-(5*p-1)/2;
    elif l = "7.1764" then # See Notes6.163b 
        return (p^3-5*p+p*g4)/2;
    elif l = "7.1777" then # See Notes6.173 
        return 3*p+3+(p^2+2*p+3)*g3/2;
    elif l = "7.1797" then # See Notes6.178 
        return (p+1)/2;
    elif l = "7.1798" then # See Notes6.178a 
        return (p-3)*(p+1)/2+a*(p-1)/2;
    elif l = "7.1799" then # See Notes6.178b 
        return p*(p-1)/2+(p-1)*(p+1-a)/2;
    elif l = "7.3068" then # See Notes4.1 Case 4 
        return (p+1)^2/2;
    elif l = "7.3285" then # See Notes4.1, Case 5 
       return p^5+p^4+4*p^3+6*p^2+15*p+16+(p+1)*g3+(g3+h3-4)/2;
    elif l = "7.3286" then # See Notes4.1, Case 6 
        return (p^4+p^3+6*p^2+9*p+13)/2;
    elif l = "7.3387" then # See Notes5.3, Case 4 
        return p^2+(p+1-g4)/2;
    elif l = "7.3437" then # See Notes5.3, Case 6 
        return p^3/2+(2+g4)*p^2/2+(7*g4-9)*p/2+(-7-5*g3+7*g4+2*g3*g4)/2;
    elif l = "7.3438" then # See Notes5.3, Case 7 
        return p^3/2+(8-g4)*p^2/2+(33-7*g4)*p/2+(27-5*g4+7*g3-2*g3*g4)/2;
    elif l = "7.4670" then # See note1dec5.1 
        return p;
    elif l = "7.4723" then # See note2dec5.1 
        return (p^2-2+h3)/2;
    elif l = "7.1389" then # See Notes6.114
        return 3*p-7;
    fi;

    c := c[1];

    # 1 parameter
    if Length(para) = 1 then 

        if c = "1+4x not a square" then
            return (p-1)/2;
        elif c = "unique x so that 1-wx^2 is not a square" then
            return 1;
        elif c = "unique x so that x^2-w is not a square" then
            return 1;
        elif c = "x ne -1" then
            return p-1;
        elif c = "x ne -1,-1/2" then
            return p-2;
        elif c = "x ne -2" then
            return p-1;
        elif c = "x ne 0" then
            return p-1;
        elif c = "x ne 0, equivalence classes {x,-x,1/x,-1/x}" then
            return (p-1+g4)/4;
        elif c = "x ne 0, x~-x" then
            return (p-1)/2;
        elif c = "x ne 0, x~x^-1" then
            return (p+1)/2;
        elif c = "x ne 0,-2, x~-x-2" then
            return (p-1)/2;
        elif c = "x ne 0, x~ax if a^3=1" then
            return (p-1)/g3;
        elif c = "x ne 0, x~ax if a^4=1" then
            return (p-1)/g4;
        elif c = "x ne 0, x~ax if a^5=1" then
            return (p-1)/g5;
        elif c = "x ne 0, x~ax if a^6=1" then
            return (p-1)/(2*g3);
        elif c = "x ne 0, x~ax if a^7=1" then
            return (p-1)/g7;
        elif c = "x ne 0,-1" then
            return p-2;
        elif c = "x ne 0,-1, x~-1-x" then
            return (p-1)/2;
        elif c = "x ne 0,-1,2,1/2" then
            return p-4;
        elif c = "x ne 0,-1/4" then
            return p-2;
        elif c = "x ne 0,-w, x~-w-x" then
            return (p-1)/2;
        elif c = "x ne 0,-w,2w,w/2" then
            return p-4;
        elif c = "x ne 0,1" then
            return p-2;
        elif c = "x ne 1" then
            return p-1;
        elif c = "x~-1-x" then
            return (p+1)/2;
        elif c = "x~-x" then
            return (p+1)/2;
        elif c = "x~-x-2" then
            return (p+1)/2;
        elif c = "x~1-x" then
            return (p+1)/2;
        elif c = "x~w-x" then
            return (p+1)/2;
        elif c = "x~ax if a^3=1" then
            return 1+(p-1)/g3;
        elif c = "x~ax if a^4=1" then
            return 1+(p-1)/g4;
        elif c = "x=0,1" then
            return 2;
        elif c = "x=0,1,w" then
            return 3;
        elif c = "x=0,1,w,w^2,w^3" then
            return 5;
        elif c = "x=1,w,...,w^(2gcd(p-1,3)-1)" then
            return 2*g3;
        elif c = "x=1,w,...,w^(gcd(p-1,8)-1)" then
            return g8;
        elif c = "x=w,w^2" then
            return 2;
        elif c = "x=w,w^2,...,w^((p-3)/2)" then
            return (p-3)/2;
        elif c = "x=w,w^2,...,w^6" then
            return 6;
        elif c = "x=w,w^2,w^3,w^4" then
            return 4;
        elif c = "x=w^2,w^3,w^4,w^5" then
            return 4;
        elif c = "x=w^3,w^4,...,w^8" then
            return 6;
        elif c = "x=w^4,w^5,w^6,w^7" then
            return 4;
        fi;
    fi;
  
    # 2 parameter - todo
    if Length(para) = 2 then 

       if c = "[x,y]~[-x,y]" then
            return p*(p+1)/2; 
        elif c = "[x,y]~[x,-y]" then
            return p*(p+1)/2; 
        elif c = "[x,y]~[y,x]" then
            return p*(p+1)/2;
        elif c = "[x,y]~[x',y'] if y^2-wx^2=y'^2-wx'^2" then
            return p;
        elif c = "[x,y]~[ax,y] if a^3=1" then
            return p*(1+(p-1)/g3);
        elif c = "[x,y]~[x,ay] if a^4=1" then
            return p*(1+(p-1)/g4);
        elif c = "[x,y]~[±x,ay] if a^3=1" then
            return (p+1)/2*(1+(p-1)/g3);
        elif c = "x ne -1, (1+x)y=1" then
            return p-1;
        elif c = "x ne -2" then
            return p*(p-1);
        elif c = "x ne -2w" then
            return p*(p-1);
        elif c = "x ne 0" then
            return p*(p-1);
        elif c = "x ne 0, 4x+y^2 not a square" then
            return p*(p-1)/2;
        elif c = "x ne 0, [x,y]~[-x,-y-2]" then
            return p*(p-1)/2;
        elif c = "x ne 0, [x,y]~[-x,-y]" then
            return p*(p-1)/2;
        elif c = "x ne 0, [x,y]~[-x,y]~[x,-y]" then
            return (p-1)*(p+1)/4;
        elif c = "x ne 0, [x,y]~[a^4x,ay] if a^5=1" then
            return p*(p-1)/g5;
        elif c = "x ne 0, [x,y]~[ax,a^2y] if a^3=1" then
            return p*(p-1)/g3;
        elif c = "x ne 0, [x,y]~[ax,a^2y] if a^6=1" then
            return p*(p-1)/(2*g3);
        elif c = "x ne 0, [x,y]~[ax,a^3y] if a^5=1" then
            return p*(p-1)/g5;
        elif c = "x ne 0, [x,y]~[ax,a^3y] if a^6=1" then
            return p*(p-1)/(2*g3);
        elif c = "x ne 0, [x,y]~[ax,ay] if a^3=1" then
            return p*(p-1)/g3;
        elif c = "x ne 0, [x,y]~[x,-y]" then
            return (p-1)*(p+1)/2;
        elif c = "x ne 0, [x,y]~[x,-y]~[-x,iy] if i^2=-1" then
            return (p-1)*(p+1)/4;
        elif c = "x ne 0, unique y so that 1-wy^2 is not a square, [x,y]~[-x,y]" then
            return (p-1)/2;
        elif c = "x ne 0, unique y so that wy^2=2, [x,y]~[-x,y]" then
            return (p-1)/2;
        elif c = "x ne 0, unique y so that y^2=2, [x,y]~[-x,y]" then
            return (p-1)/2;
        elif c = "x ne 0, unique y so that y^2=2w^2, [x,y]~[-x,y]" then
            return (p-1)/2;
        elif c = "x ne 0, unique y so that y^2=2w^3, [x,y]~[-x,y]" then
            return (p-1)/2;
        elif c = "x ne 0, y=1,-1" then
            return 2*(p-1);
        elif c = "x ne 0, y=1,-1, [x,y]~[-x,y]" then
            return (p-1);
        elif c = "x ne 0, y=1,w, [x,y]~[-x,y]" then
            return (p-1);
        elif c = "x ne 0, y=w,w^2,...,w^((p-3)/2)" then
            return (p-1)*(p-3)/2;
        elif c = "x ne 0, y=w,w^2,...,w^6, [x,y]~[ax,y] if a^7=1" then
            return 6*(p-1)/g7;
        elif c = "x ne 0, y=w,w^2,w^3,w^4, [x,y]~[ax,y] if a^5=1" then
            return 4*(p-1)/g5;
        elif c = "x ne 0, y=w^2,w^3,w^4,w^5, [x,y]~[ax,y] if a^3=1" then
            return 4*(p-1)/g3;
        elif c = "x ne 1" then
            return p*(p-1);
        elif c = "x ne 1-w, [x,y]~[x,-y]~[-x+2(1-w),iy] if i^2=-1" then
            return (p+1)*(p-1)/4;
        elif c = "x ne 1-w^2, [x,y]~[x,-y]~[-x+2(1-w^2),iy] if i^2=-1" then
            return (p+1)*(p-1)/4;
        elif c = "x ne 1-w^3, [x,y]~[x,-y]~[-x+2(1-w^3),iy] if i^2=-1" then
            return (p+1)*(p-1)/4;
        elif c = "x,y ne 0, [x,y]~[-x,-y]" then
            return (p-1)^2/2;
        elif c = "x,y ne 0, [x,y]~[ax,a^3y] if a^4=1" then
            return (p-1)^2/g4;
        elif c = "x,y ne 0, [x,y]~[xy^-2,y^-1]" then
            return (p-1)*(p+1)/2;
        elif c = "x,y ne 0, [x,y]~[y,x]" then
            return p*(p-1)/2;
        elif c = "x,y ne 0, x ne y, [x,y]~[y,x]" then
            return (p-1)*(p-2)/2;
        elif c = "x=0,-1, y=0,1" then
            return 4;
        elif c = "x=0,1" then
            return 2*p;
        elif c = "x=0,1, y=0,1" then
            return 4;
        elif c = "x=0,1,w" then
            return 3*p;
        elif c = "x=0,1,w, y=0,1" then
            return 6;
        elif c = "x=0,1,w, y=1,-1" then
            return 6;
        elif c = "x=0,1,w, y=w,w^2,...,w^((p-3)/2)" then
            return 3*(p-3)/2;
        elif c = "x=1,w" then
            return 2*p;
        elif c = "x=1,w,...,w^(2gcd(p-1,3)-1), y ne 0, [x,y]~[x,ay] if a^6=1" then
            return (p-1);
        elif c = "x=1,w,...,w^(gcd(p-1,8)-1), y ne 0, [x,y]~[x,ay] if a^8=1" then
            return (p-1);
        elif c = "xy ne 1, [x,y]~[y,x]" then
            return (p^2-1)/2;
        elif c = "y ne 0, [x,y]~[-x,y]" then
            return (p-1)*(p+1)/2;
        elif c = "y ne 0, [x,y]~[a^2x,ay] if a^4=1" then
            return p*((p-1)/g4);
        elif c = "y ne 0, [x,y]~[x,-y]" then
            return p*(p-1)/2;
        elif c = "y ne 0, [x,y]~[x,ay] if a^3=1" then
            return p*((p-1)/g3);
        elif c = "y ne 0, [x,y]~[x,ay] if a^4=1" then
            return p*((p-1)/g4);
        elif c = "y ne 0, [x,y]~[x,ay] if a^5=1" then
            return p*((p-1)/g5);
        elif c = "y ne 1/2, [x,y]~[-x,1-y]" then
            return p*(p-1)/2;
        elif c = "y=1,w, [x,y]~[-x,y]" then
            return (p+1);
        elif c = "y=1,w, [x,y]~[ax,y] if a^8=1" then
            return 2*(1+(p-1)/g8);
        elif c = "y=1,w,...,w^5, [x,y]~[ax,y] if a^6=1" then
            return 6*(1+(p-1)/(2*g3));
        elif c = "y=1,w,w^2, [x,y]~[ax,y] if a^3=1" then
            return 3*(1+(p-1)/g3);
        elif c = "y=w^2,w^3, [x,y]~[ax,y] if a^8=1" then
            return 2*(1+(p-1)/g8);
        elif c = "y=w^2,w^3,w^4,w^5" then
            return 4*p;
        elif c = "y=w^4,w^5,w^6,w^7, [x,y]~[ax,y] if a^8=1" then
            return 4*(1+(p-1)/g8);
        fi;
    fi;

    # 3 parameter
    if Length(para) = 3 then 
    
        if c = "[x,y,z]~[-x,-y,-z]" then
            return (p^3+1)/2;
        elif c = "[x,y,z]~[-x,y,z]" then
            return p^2*(p+1)/2;
        elif c = "[x,y,z]~[x,y,-z]" then
            return p^2*(p+1)/2;
        elif c = "[x,y,z]~[z,y,x]" then
            return p^2*(p+1)/2;
        elif c = "unique z so that z^2-4 is not a square, [x,y,z]~[y,x,z]" then
            return p*(p+1)/2;
        elif c = "x ne -2, [x,y,z]~[x,y,-z]" then
            return p*(p^2-1)/2;
        elif c = "x ne -2w, [x,y,z]~[x,y,-z]" then
            return p*(p^2-1)/2;
        elif c = "x ne 0" then
            return p^2*(p-1);
        elif c = "x ne 0, [x,y,z]~[-x,-y,z]" then
            return p^2*(p-1)/2;
        elif c = "x ne 0, [x,y,z]~[a^3x,a^4y,az] if a^5=1" then
            return p^2*(p-1)/g5;
        elif c = "x ne 0, [x,y,z]~[ax,a^2y,az] if a^4=1" then
            return p^2*(p-1)/g4;
        elif c = "x ne 0, [x,y,z]~[ax,y,a^2z] if a^3=1" then
            return p^2*(p-1)/g3;
        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
            return 2*p*(p-1)/g3;
        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
            return 4*p*(p-1)/g5;
        elif c = "x,z ne 0, [x,y,z]~[-x,y,-z]~[x,-y,z]" then
            return (p-1)*(p^2-1)/4;
        elif c = "x=0,1" then
            return 2*p^2;
        elif c = "x=0,1, y=0,1" then
            return 4*p;
        elif c = "x=0,1, y=0,1, z ne 0,-1" then
            return 4*(p-2);
        elif c = "x=0,1, y=0,1, z=0,1" then
            return 8;
        elif c = "x=0,1, y=0,1, z=0,1,w" then
            return 12;
        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
            return (p-1)*(p+1);
        elif c = "x=w,w^2,...,w^((p-3)/2), y=1,w" then
            return p*(p-3);
        elif c = "y ne 0, [x,y,z]~[x,-y,-z]" then
            return p^2*(p-1)/2;
        elif c = "y ne 0, [x,y,z]~[zy,y,x/y]" then
            return p*(p-1)*(p+1)/2;
        elif c = "y ne 0,1, (x+y)(1+z)=1, [x,y,z]~[zy,y,x/y]" then
            return (p^2-2*p-1)/2;
        elif c = "z=1,w,w^2,w^3,w^4, [x,y,z]~[x,ay,z] if a^5=1" then
            return 5*p*(1+(p-1)/g5);
        fi;
    fi;

    # 4 parameters
    if Length(para) = 4 then 
        if c = "[x,y,z,t]~[t+1,z+1,y-1,x-1]" then
            return (p^4+p^2)/2;
        elif c = "[x,y,z,t]~[x,-y,z,-t]" then
            return (p^4+p^2)/2;
        elif c = "x ne 0, [x,y,z,t]~[-x,y,t,z]" then
            return p^3*(p-1)/2;
        elif c = "x ne 0, [x,y,z,t]~[-x,y,z,-t]" then
            return p^3*(p-1)/2;
        elif c = "x ne 0, [x,y,z,t]~[ax,a^3y,a^4z,at] if a^5=1" then
            return p^3*(p-1)/g5;
        elif c = "x ne 0, [x,y,z,t]~[ax,a^3y,a^4z,t] if a^5=1" then
            return p^3*(p-1)/g5;
        fi;
    fi;
end );

BindGlobal( "CharFunctionByPrimeRestrictions", function( L )

    local g3, g4, g5, g7, g8, g9, s16, h3, c;

    # get gcd's
    g3 := IndeterminateByName("(p-1,3)");
    h3 := IndeterminateByName("(p+1,3)");
    g4 := IndeterminateByName("(p-1,4)");
    g5 := IndeterminateByName("(p-1,5)");
    g7 := IndeterminateByName("(p-1,7)");
    g8 := IndeterminateByName("(p-1,8)");
    g9 := IndeterminateByName("(p-1,9)");
    s16 := IndeterminateByName("(p^2-1,16)");

    c := LibraryConditions(L)[2];

    # check cases
    if c = "p=1 mod 3" then
        return (g3-1)/2;
    elif c = "p=2 mod 3" then
        return -(g3-3)/2;
    elif c = "p=1 mod 4" then
        return (g4-2)/2;
    elif c = "p=3 mod 4" then
        return -(g4-4)/2;
    elif c = "p=1 mod 5" then
        return (g5-1)/4;
    elif c = "p ne 1 mod 5" then
        return -(g5-5)/4;
    elif c = "p=1 mod 7" then
        return (g7-1)/6;
    elif c = "p=1 mod 8" then
        return (g8-2)*(g8-4)/24;
    elif c = "p=1 mod 9" then
        return (g9-1)*(g9-3)/48;
    elif c = "p=1 mod 4, p=1 mod 3" then
        return (g3-1)*(g4-2)/4;
    elif c = "p=3 mod 4, p=1 mod 3" then
        return -(g3-1)*(g4-4)/4;
    elif c = "p=±1 mod 8" then
        return (s16-8)/8;
    elif c = "p=±3 mod 8" then
        return (16-s16)/8;
    fi;
    return 1;
end );

BindGlobal( "NumberOfLiePRingsInFamily", function( L )
    local a, b, f;
    a := CharFunctionByIsomRestrictions(L);
    b := CharFunctionByPrimeRestrictions(L);
    f := EliminateDenominator(a*b);
    return SimplifyPorcPoly(f);
end );

Messung
CHZG
88989693

¤ Dauer der Verarbeitung: 0.20 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.