Difference between revisions of "User:KHiddemann/GeSHi"
From ApCoCoAWiki
KHiddemann (talk | contribs) (An example taken from the CoCoA School 2007 to demonstrate syntax highlighting of CoCoAL code in the Wiki) |
KHiddemann (talk | contribs) (Another example) |
||
Line 39: | Line 39: | ||
Return LinIndGens | Return LinIndGens | ||
+ | EndDefine;</cocoa> | ||
+ | |||
+ | Another example: | ||
+ | <cocoa>// Exercise: Make one-liners out of these functions... | ||
+ | |||
+ | Define IsVarPower(I,T) | ||
+ | L := Log(T); | ||
+ | Return (Len(NonZero(L))=0) Or (Len(NonZero(L))=1 And L[I]<>0); | ||
EndDefine; | EndDefine; | ||
− | </cocoa> | + | |
+ | Define IsZeroDim(I) | ||
+ | VP := [[ IsVarPower(N,G) | G In Gens(LT(I)) ] | N In 1..NumIndets() ]; | ||
+ | Return Not FALSE IsIn [ TRUE IsIn L | L In VP]; | ||
+ | EndDefine; | ||
+ | |||
+ | // Exercise: Why DO you have to check if your poly is constant? | ||
+ | |||
+ | Define SqFree(F) | ||
+ | If (F=0 Or Deg(F)=0) Then | ||
+ | Return 1; | ||
+ | Elsif (UnivariateIndetIndex(F)=0) Then | ||
+ | Error("Non-univariate poly "+Sprint(F)); | ||
+ | Else | ||
+ | Return F/GCD(F, Der(F, Indet(UnivariateIndetIndex(F)))); | ||
+ | EndIf; | ||
+ | EndDefine; | ||
+ | |||
+ | Define ZeroDimRadical(I) | ||
+ | E := [ Head(Gens(Elim(Diff(Indets(), [X]), I))) | X In Indets() ]; | ||
+ | If 0 IsIn E Then | ||
+ | Error("Infinite set "+Sprint(I)); | ||
+ | Else | ||
+ | Return I+Ideal([SqFree(G) | G In E]); | ||
+ | EndIf; | ||
+ | EndDefine;</cocoa> |
Revision as of 20:32, 9 August 2007
An example taken from the CoCoA School 2007 to demonstrate syntax highlighting of CoCoAL code in the Wiki:
Define Reduce(Generators) -- Generators: List of polynomials -- returns a set of generators with pairwise different LTs -- (hence K-linear independent) Generators := NonZero(Generators); -- remove zero polynomials LinIndGens := []; While Len(Generators) > 0 Do -- find polynomial with largest LT MaxPoly := Generators[1]; MaxTerm := LT(MaxPoly); MaxPos := 1; For Pos := 2 To Len(Generators) Do If LT(Generators[Pos]) > MaxTerm Then MaxPoly := Generators[Pos]; MaxTerm := LT(MaxPoly); MaxPos := Pos EndIf EndFor; MaxPoly := MaxPoly / LC(MaxPoly); Append( LinIndGens, MaxPoly); Remove( Generators, MaxPos); -- reduce other polynomials For Pos := 1 To Len(Generators) Do If LT(Generators[Pos]) = MaxTerm Then Generators[Pos] := Generators[Pos] - LC(Generators[Pos]) * MaxPoly EndIf EndFor; -- remove zero polynomials Generators := NonZero(Generators) EndWhile; Return LinIndGens EndDefine;
Another example:
// Exercise: Make one-liners out of these functions... Define IsVarPower(I,T) L := Log(T); Return (Len(NonZero(L))=0) Or (Len(NonZero(L))=1 And L[I]<>0); EndDefine; Define IsZeroDim(I) VP := [[ IsVarPower(N,G) | G In Gens(LT(I)) ] | N In 1..NumIndets() ]; Return Not FALSE IsIn [ TRUE IsIn L | L In VP]; EndDefine; // Exercise: Why DO you have to check if your poly is constant? Define SqFree(F) If (F=0 Or Deg(F)=0) Then Return 1; Elsif (UnivariateIndetIndex(F)=0) Then Error("Non-univariate poly "+Sprint(F)); Else Return F/GCD(F, Der(F, Indet(UnivariateIndetIndex(F)))); EndIf; EndDefine; Define ZeroDimRadical(I) E := [ Head(Gens(Elim(Diff(Indets(), [X]), I))) | X In Indets() ]; If 0 IsIn E Then Error("Infinite set "+Sprint(I)); Else Return I+Ideal([SqFree(G) | G In E]); EndIf; EndDefine;