login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for SandBoxSpeciesAldor revision 7 of 11

1 2 3 4 5 6 7 8 9 10 11
Editor: kratt6
Time: 2008/06/16 05:28:21 GMT-7
Note:

added:

\begin{aldor}
#includeDir "/var/lib/zope/combinat/include"
#libraryDir "/var/lib/zope/combinat/lib"
#assert MacrosCombinat
#assert Axiom
#include "combinat"
macro {
        SPECIES == (L: LabelType) -> CombinatorialSpecies L;
        V == CycleIndexVariable;
        NonNegativeMachineInteger == I;
        T == SparseIndexedPowerProduct(V, NonNegativeMachineInteger);
        P == SparseDistributedPolynomial(Q, V, T);
}
LinearOrder(L: LabelType): with {
CombinatorialSpecies L;
coerce: % -> List L;
} == List L add {
        Rep == List L;
        import from Rep;
        
coerce(x: %): List L == rep x;
local lists(l: List L): Generator List L == generate {
        empty? l => yield l;
        current := l;
        c := first current;
        for u in lists(rest l) repeat yield cons(c, u);
        assert(not empty? current);
        while not empty?(tmp := rest current) repeat {
                c := first current;
                setrest!(current, rest tmp); -- remove c from l
                for u in lists l repeat yield cons(c, u);
                setrest!(current, tmp); -- put c back into l
                current := tmp;
        }
}
structures(s: SetSpecies L): Generator % == generate {
        for l in lists(s :: List L) repeat yield per l;
}
local LinearOrderIsomorphismType: IsomorphismTypeCategory L 
== add {
        isomorphismTypes(s: MultiSet L): Generator % == never;
        (x:%) = (y:%): Boolean == never;
        (tw: TextWriter) << (x: %): TextWriter == never;
}

IsomorphismType: IsomorphismTypeCategory L == LinearOrderIsomorphismType;
generatingSeries: ExponentialGeneratingSeries == {
        (stream(1$Q)$DataStream(Q)) :: ExponentialGeneratingSeries;
}
isomorphismTypeGeneratingSeries: OrdinaryGeneratingSeries == {
        (stream(1$Z)$DataStream(Z)) :: OrdinaryGeneratingSeries;
}
local cisGenerator: Generator P == generate {
        import from I, T, P;
        x1: V := 1::V;
        for n: I in 0.. repeat yield power(x1, n) :: P;
}
cycleIndexSeries: CycleIndexSeries == cisGenerator :: CycleIndexSeries;
import from String;
expression: SpeciesExpression == leaf("LinearOrder");
}


Cycle(L: LabelType): with {
CombinatorialSpecies L;
coerce: % -> List L;
cycle: List L -> %;
} == List L add {
        Rep == List L;
        import from I, Rep;
        
local cisCycle(ao: I): Generator P == generate {
        macro PrimePowerProduct == SparseIndexedPowerProduct(I, I);
        
local multiply(k: PrimePowerProduct): I == {
        r: I := 1;
        for ep in k repeat {(e, p) := ep; r := r * p^e}
        r;
}

local eulerPhi(t: SparseIndexedPowerProduct(I, I)): I == {
        phi: I := 1;
        for ep in t repeat {
                (e, p) := ep;
                phi := phi * p^(e-1) * (p-1)
        }
        phi;
}

local cisCoefficient(n: I): P == BugWorkaround(
    PrimePowerProduct has with {
            divisors: % -> Generator %;
            /: (%, %) -> %;
    }
){
        import from Z, V, SmallIntegerTools;
        nn: PrimePowerProduct := factor n;
        p: P := 0;
        for m in divisors nn repeat {
                k: PrimePowerProduct := nn/m;
                q: Q := (eulerPhi(k) :: Z) / (n :: Z);
                xk: V := multiply(k) :: V;
                t: T := power(xk, multiply m);
                p := [q, t]$P + p;
        }
        p;
}
        yield 0$P;
        for n:I in 1.. repeat yield cisCoefficient(n);
}
coerce(x: %): List L == rep x;
cycle(l: List L): % == per l;
structures(s: SetSpecies L): Generator % == generate {
        import from LinearOrder L;
        if not empty? s then {
                l: List L := s :: List L;
                u := first l;
                for t in structures(set rest l)$LinearOrder(L) repeat {
                        yield per cons(u, t :: List L);
                }
        }
}

local CycleIsomorphismType: IsomorphismTypeCategory L 
== add {
        isomorphismTypes(s: MultiSet L): Generator % == never;
        (x:%) = (y:%): Boolean == never;
        (tw: TextWriter) << (x: %): TextWriter == never;
}
IsomorphismType: IsomorphismTypeCategory L == CycleIsomorphismType;
local cycleOrder(): SeriesOrder == 1 :: SeriesOrder;
egsCycle(ao: I): Generator Q == generate {
        import from Z, Q;
        yield 0;
        for n:I in 1.. repeat yield inv(n :: Z);
}
generatingSeries: ExponentialGeneratingSeries == new(egsCycle, cycleOrder);
ogsCycle(ao: I): Generator Z == generate {yield 0$Z; yield 1$Z};
isomorphismTypeGeneratingSeries: OrdinaryGeneratingSeries == {
        new(ogsCycle, cycleOrder);
}
cycleIndexSeries: CycleIndexSeries == new(cisCycle, cycleOrder);
import from String;
expression: SpeciesExpression == leaf("Cycle");
}
\end{aldor}

\begin{axiom}
labels: SetSpecies ACINT := set [i::ACINT for i in 1..3]
)set output tex off
)set output algebra on
[structures(labels)$Cycle(ACINT)]$ACLIST(Cycle(ACINT))
\end{axiom}


Test species in axiom/FriCAS?.

The species project is written in Aldor. Thus we need to load the libraries explicitly:

axiom
)cd ~/combinat/src The current FriCAS default directory is /var/lib/zope/combinat/src
axiom
)re ../lib/combinat.input
axiom
)lib cscombinatversion.ao
axiom
Reading /var/lib/zope/combinat/src/cscombinatversion.asy
   LibraryInformationCombinat is now explicitly exposed in frame 
      initial 
   LibraryInformationCombinat will be automatically loaded when needed 
      from /var/lib/zope/combinat/src/cscombinatversion
axiom
)lib csaxcompat.ao
axiom
Reading /var/lib/zope/combinat/src/csaxcompat.asy
   ACCharacter is now explicitly exposed in frame initial 
   ACCharacter will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACFraction is now explicitly exposed in frame initial 
   ACFraction will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACIntegerTools is now explicitly exposed in frame initial 
   ACIntegerTools will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACInteger is now explicitly exposed in frame initial 
   ACInteger will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACList is now explicitly exposed in frame initial 
   ACList will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACMachineInteger is now explicitly exposed in frame initial 
   ACMachineInteger will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACPrimitiveArray is now explicitly exposed in frame initial 
   ACPrimitiveArray will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACString is now explicitly exposed in frame initial 
   ACString will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACSymbol is now explicitly exposed in frame initial 
   ACSymbol will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   Array is now explicitly exposed in frame initial 
   Array will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   ACLabelType is now explicitly exposed in frame initial 
   ACLabelType will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   OutputType is now explicitly exposed in frame initial 
   OutputType will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
   TotallyOrderedType is now explicitly exposed in frame initial 
   TotallyOrderedType will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat
axiom
)lib csaxcompat2.ao
axiom
Reading /var/lib/zope/combinat/src/csaxcompat2.asy
   ExpressionTreeExpt is now explicitly exposed in frame initial 
   ExpressionTreeExpt will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionTreeLeaf is now explicitly exposed in frame initial 
   ExpressionTreeLeaf will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionTreePlus is now explicitly exposed in frame initial 
   ExpressionTreePlus will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionTreePrefix is now explicitly exposed in frame initial 
   ExpressionTreePrefix will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionTreeTimes is now explicitly exposed in frame initial 
   ExpressionTreeTimes will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionTree is now explicitly exposed in frame initial 
   ExpressionTree will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   GeneratorException is now explicitly exposed in frame initial 
   GeneratorException will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   Generator is now explicitly exposed in frame initial 
   Generator will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionTreeOperator is now explicitly exposed in frame initial 
   ExpressionTreeOperator will be automatically loaded when needed from
      /var/lib/zope/combinat/src/csaxcompat2
   ExpressionType is now explicitly exposed in frame initial 
   ExpressionType will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
   GeneratorExceptionType is now explicitly exposed in frame initial 
   GeneratorExceptionType will be automatically loaded when needed from
      /var/lib/zope/combinat/src/csaxcompat2
   Partial is now explicitly exposed in frame initial 
   Partial will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csaxcompat2
Won't parse: (Type)->NIL
axiom
)lib csistruc.ao
axiom
Reading /var/lib/zope/combinat/src/csistruc.asy
   SparseAdditiveArray is now explicitly exposed in frame initial 
   SparseAdditiveArray will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csistruc
   SparseFiniteMonoidRing is now explicitly exposed in frame initial 
   SparseFiniteMonoidRing will be automatically loaded when needed from
      /var/lib/zope/combinat/src/csistruc
   IndexedFreeAdditiveCombinationType is now explicitly exposed in 
      frame initial 
   IndexedFreeAdditiveCombinationType will be automatically loaded when
      needed from /var/lib/zope/combinat/src/csistruc
   IndexedFreeArithmeticType is now explicitly exposed in frame initial
   IndexedFreeArithmeticType will be automatically loaded when needed 
      from /var/lib/zope/combinat/src/csistruc
axiom
)lib csdistpoly.ao
axiom
Reading /var/lib/zope/combinat/src/csdistpoly.asy
   SparseDistributedPolynomial is now explicitly exposed in frame 
      initial 
   SparseDistributedPolynomial will be automatically loaded when needed
      from /var/lib/zope/combinat/src/csdistpoly
axiom
)lib csstream.ao
axiom
Reading /var/lib/zope/combinat/src/csstream.asy
   DataStream is now explicitly exposed in frame initial 
   DataStream will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csstream
axiom
)lib csseries.ao
axiom
Reading /var/lib/zope/combinat/src/csseries.asy
   SeriesOrder is now explicitly exposed in frame initial 
   SeriesOrder will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csseries
   FormalPowerSeries is now explicitly exposed in frame initial 
   FormalPowerSeries will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csseries
   FormalPowerSeriesCategory is now explicitly exposed in frame initial
   FormalPowerSeriesCategory will be automatically loaded when needed 
      from /var/lib/zope/combinat/src/csseries
axiom
)lib csidxpp.ao
axiom
Reading /var/lib/zope/combinat/src/csidxpp.asy
   SparseIndexedPowerProduct is now explicitly exposed in frame initial
   SparseIndexedPowerProduct will be automatically loaded when needed 
      from /var/lib/zope/combinat/src/csidxpp
axiom
)lib cssiprimes.ao
axiom
Reading /var/lib/zope/combinat/src/cssiprimes.asy
   SmallIntegerPrimes is now explicitly exposed in frame initial 
   SmallIntegerPrimes will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/cssiprimes
axiom
)lib cssitools.ao
axiom
Reading /var/lib/zope/combinat/src/cssitools.asy
   SmallIntegerTools is now explicitly exposed in frame initial 
   SmallIntegerTools will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/cssitools
axiom
)lib csgseries.ao
axiom
Reading /var/lib/zope/combinat/src/csgseries.asy
   CycleIndexSeries is now explicitly exposed in frame initial 
   CycleIndexSeries will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csgseries
   CycleIndexVariable is now explicitly exposed in frame initial 
   CycleIndexVariable will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csgseries
   ExponentialGeneratingSeries is now explicitly exposed in frame 
      initial 
   ExponentialGeneratingSeries will be automatically loaded when needed
      from /var/lib/zope/combinat/src/csgseries
   OrdinaryGeneratingSeries is now explicitly exposed in frame initial 
   OrdinaryGeneratingSeries will be automatically loaded when needed 
      from /var/lib/zope/combinat/src/csgseries
axiom
)lib csmultinom.ao
axiom
Reading /var/lib/zope/combinat/src/csmultinom.asy
   MultinomialTools is now explicitly exposed in frame initial 
   MultinomialTools will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csmultinom
axiom
)lib csspexpr.ao
axiom
Reading /var/lib/zope/combinat/src/csspexpr.asy
   SpeciesExpression is now explicitly exposed in frame initial 
   SpeciesExpression will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspexpr
axiom
)lib csspecies.ao
axiom
Reading /var/lib/zope/combinat/src/csspecies.asy
   SetSpecies is now explicitly exposed in frame initial 
   SetSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   SingletonSpecies is now explicitly exposed in frame initial 
   SingletonSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   ACIsomorphismType is now explicitly exposed in frame initial 
   ACIsomorphismType will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Subset is now explicitly exposed in frame initial 
   Subset will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Times is now explicitly exposed in frame initial 
   Times will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Augment is now explicitly exposed in frame initial 
   Augment will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   CharacteristicSpecies is now explicitly exposed in frame initial 
   CharacteristicSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Combination is now explicitly exposed in frame initial 
   Combination will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Compose is now explicitly exposed in frame initial 
   Compose will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Derivative is now explicitly exposed in frame initial 
   Derivative will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   DropEmpty is now explicitly exposed in frame initial 
   DropEmpty will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   EmptySetSpecies is now explicitly exposed in frame initial 
   EmptySetSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   FunctorialCompose is now explicitly exposed in frame initial 
   FunctorialCompose will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiCompose is now explicitly exposed in frame initial 
   MultiCompose will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiDerivative is now explicitly exposed in frame initial 
   MultiDerivative will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiPlus is now explicitly exposed in frame initial 
   MultiPlus will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiSetCombination is now explicitly exposed in frame initial 
   MultiSetCombination will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiSetPartition is now explicitly exposed in frame initial 
   MultiSetPartition will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiSet is now explicitly exposed in frame initial 
   MultiSet will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiSubset is now explicitly exposed in frame initial 
   MultiSubset will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   MultiTimes is now explicitly exposed in frame initial 
   MultiTimes will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   CombinatorialSpecies is now explicitly exposed in frame initial 
   CombinatorialSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Multiple is now explicitly exposed in frame initial 
   Multiple will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   NonEmpty is now explicitly exposed in frame initial 
   NonEmpty will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   IsomorphismTypeCategory is now explicitly exposed in frame initial 
   IsomorphismTypeCategory will be automatically loaded when needed 
      from /var/lib/zope/combinat/src/csspecies
   Partition is now explicitly exposed in frame initial 
   Partition will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   Plus is now explicitly exposed in frame initial 
   Plus will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
   RestrictedSpecies is now explicitly exposed in frame initial 
   RestrictedSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csspecies
axiom
)lib csexamples.ao
axiom
Reading /var/lib/zope/combinat/src/csexamples.asy
   ACBinaryTree is now explicitly exposed in frame initial 
   ACBinaryTree will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csexamples
   SetSpecies is already explicitly exposed in frame initial 
   SetSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csexamples
   Combination is already explicitly exposed in frame initial 
   Combination will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csexamples
   Generator is already explicitly exposed in frame initial 
   Generator will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csexamples
Won't parse: (ACLabelType)->NIL
Won't parse: (Type)->NIL
axiom
)lib csinterp.ao
axiom
Reading /var/lib/zope/combinat/src/csinterp.asy
   Interpret is now explicitly exposed in frame initial 
   Interpret will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csinterp
   InterpretingTools is now explicitly exposed in frame initial 
   InterpretingTools will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csinterp
   LabelSpecies is now explicitly exposed in frame initial 
   LabelSpecies will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csinterp
axiom
)lib csparse.ao
axiom
Reading /var/lib/zope/combinat/src/csparse.asy
   MyParser is now explicitly exposed in frame initial 
   MyParser will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/csparse

Let's define a binary tree.

aldor
#includeDir "/var/lib/zope/combinat/include" #libraryDir "/var/lib/zope/combinat/lib" #include "combinat" macro { E == EmptySetSpecies; X == SingletonSpecies; + == Plus; * == Times; } A(L: LabelType): CombinatorialSpecies L == (E + X*A*A)(L) add;
aldor
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/5200085684951427974-25px002.as using 
      AXIOM-XL compiler and options 
-O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/algebra
      Use the system command )set compiler args to change these 
      options.
#1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
   Compiling Lisp source code from file 
      ./5200085684951427974-25px002.lsp
   Issuing )library command for 5200085684951427974-25px002
   Reading /var/lib/zope/combinat/src/5200085684951427974-25px002.asy
   A is now explicitly exposed in frame initial 
   A will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/5200085684951427974-25px002

aldor
#includeDir "/var/lib/zope/combinat/include" #libraryDir "/var/lib/zope/combinat/lib" #assert MacrosCombinat #assert Axiom #include "combinat" macro { SPECIES == (L: LabelType) -> CombinatorialSpecies L; V == CycleIndexVariable; NonNegativeMachineInteger == I; T == SparseIndexedPowerProduct(V, NonNegativeMachineInteger); P == SparseDistributedPolynomial(Q, V, T); } LinearOrder(L: LabelType): with { CombinatorialSpecies L; coerce: % -> List L; } == List L add { Rep == List L; import from Rep; coerce(x: %): List L == rep x; local lists(l: List L): Generator List L == generate { empty? l => yield l; current := l; c := first current; for u in lists(rest l) repeat yield cons(c, u); assert(not empty? current); while not empty?(tmp := rest current) repeat { c := first current; setrest!(current, rest tmp); -- remove c from l for u in lists l repeat yield cons(c, u); setrest!(current, tmp); -- put c back into l current := tmp; } } structures(s: SetSpecies L): Generator % == generate { for l in lists(s :: List L) repeat yield per l; } local LinearOrderIsomorphismType: IsomorphismTypeCategory L == add { isomorphismTypes(s: MultiSet L): Generator % == never; (x:%) = (y:%): Boolean == never; (tw: TextWriter) << (x: %): TextWriter == never; } IsomorphismType: IsomorphismTypeCategory L == LinearOrderIsomorphismType; generatingSeries: ExponentialGeneratingSeries == { (stream(1$Q)$DataStream(Q)) :: ExponentialGeneratingSeries; } isomorphismTypeGeneratingSeries: OrdinaryGeneratingSeries == { (stream(1$Z)$DataStream(Z)) :: OrdinaryGeneratingSeries; } local cisGenerator: Generator P == generate { import from I, T, P; x1: V := 1::V; for n: I in 0.. repeat yield power(x1, n) :: P; } cycleIndexSeries: CycleIndexSeries == cisGenerator :: CycleIndexSeries; import from String; expression: SpeciesExpression == leaf("LinearOrder"); } Cycle(L: LabelType): with { CombinatorialSpecies L; coerce: % -> List L; cycle: List L -> %; } == List L add { Rep == List L; import from I, Rep; local cisCycle(ao: I): Generator P == generate { macro PrimePowerProduct == SparseIndexedPowerProduct(I, I); local multiply(k: PrimePowerProduct): I == { r: I := 1; for ep in k repeat {(e, p) := ep; r := r * p^e} r; } local eulerPhi(t: SparseIndexedPowerProduct(I, I)): I == { phi: I := 1; for ep in t repeat { (e, p) := ep; phi := phi * p^(e-1) * (p-1) } phi; } local cisCoefficient(n: I): P == BugWorkaround( PrimePowerProduct has with { divisors: % -> Generator %; /: (%, %) -> %; } ){ import from Z, V, SmallIntegerTools; nn: PrimePowerProduct := factor n; p: P := 0; for m in divisors nn repeat { k: PrimePowerProduct := nn/m; q: Q := (eulerPhi(k) :: Z) / (n :: Z); xk: V := multiply(k) :: V; t: T := power(xk, multiply m); p := [q, t]$P + p; } p; } yield 0$P; for n:I in 1.. repeat yield cisCoefficient(n); } coerce(x: %): List L == rep x; cycle(l: List L): % == per l; structures(s: SetSpecies L): Generator % == generate { import from LinearOrder L; if not empty? s then { l: List L := s :: List L; u := first l; for t in structures(set rest l)$LinearOrder(L) repeat { yield per cons(u, t :: List L); } } } local CycleIsomorphismType: IsomorphismTypeCategory L == add { isomorphismTypes(s: MultiSet L): Generator % == never; (x:%) = (y:%): Boolean == never; (tw: TextWriter) << (x: %): TextWriter == never; } IsomorphismType: IsomorphismTypeCategory L == CycleIsomorphismType; local cycleOrder(): SeriesOrder == 1 :: SeriesOrder; egsCycle(ao: I): Generator Q == generate { import from Z, Q; yield 0; for n:I in 1.. repeat yield inv(n :: Z); } generatingSeries: ExponentialGeneratingSeries == new(egsCycle, cycleOrder); ogsCycle(ao: I): Generator Z == generate {yield 0$Z; yield 1$Z}; isomorphismTypeGeneratingSeries: OrdinaryGeneratingSeries == { new(ogsCycle, cycleOrder); } cycleIndexSeries: CycleIndexSeries == new(cisCycle, cycleOrder); import from String; expression: SpeciesExpression == leaf("Cycle"); }
aldor
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/8188642503154069003-25px003.as using 
      AXIOM-XL compiler and options 
-O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/algebra
      Use the system command )set compiler args to change these 
      options.
#1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
"/var/zope2/var/LatexWiki/8188642503154069003-25px003.as", line 94: 
){
.^
[L94 C2] #2 (Warning) Suspicious juxtaposition.  Check for missing `;'.
Check indentation if you are using `#pile'.
   Compiling Lisp source code from file 
      ./8188642503154069003-25px003.lsp
   Issuing )library command for 8188642503154069003-25px003
   Reading /var/lib/zope/combinat/src/8188642503154069003-25px003.asy
   Cycle is now explicitly exposed in frame initial 
   Cycle will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/8188642503154069003-25px003
   LinearOrder is now explicitly exposed in frame initial 
   LinearOrder will be automatically loaded when needed from 
      /var/lib/zope/combinat/src/8188642503154069003-25px003

axiom
labels: SetSpecies ACINT := set [i::ACINT for i in 1..3]
LatexWiki Image(1)
Type: SetSpecies? ACInteger?
axiom
)set output tex off
axiom
)set output algebra on [structures(labels)$Cycle(ACINT)]$ACLIST(Cycle(ACINT)) (2) [[1,2,3],[1,2,2]]
Type: ACList? Cycle ACInteger?

axiom
I := ACMachineInteger (3) ACMachineInteger
Type: Domain
axiom
Z := ACInteger (4) ACInteger
Type: Domain
axiom
Q := ACFraction Z (5) ACFraction ACInteger
Type: Domain
axiom
V := CycleIndexVariable (6) CycleIndexVariable
Type: Domain
axiom
T := SparseIndexedPowerProduct(V, I) (7) SparseIndexedPowerProduct(CycleIndexVariable,ACMachineInteger)
Type: Domain
axiom
P := SparseDistributedPolynomial(Q, V, T) (8) SparseDistributedPolynomial(ACFraction ACInteger,CycleIndexVariable,SparseInd exedPowerProduct(CycleIndexVariable,ACMachineInteger))
Type: Domain
axiom
S := CycleIndexSeries;
Type: Domain
axiom
X := A(Z) (10) A ACInteger
Type: Domain
axiom
)show X A ACInteger is a domain constructor. Abbreviation for A is A This constructor is exposed in this frame. Issue )edit 5200085684951427974-25px002.as to see algebra source code for A ------------------------------- Operations -------------------------------- ?=? : (%,%) -> Boolean coerce : % -> OutputForm hash : % -> SingleInteger latex : % -> String ?~=? : (%,%) -> Boolean ?<<? : (OutputForm,%) -> OutputForm IsomorphismType : () -> IsomorphismTypeCategory ACInteger cycleIndexSeries : () -> CycleIndexSeries expression : () -> SpeciesExpression generatingSeries : () -> ExponentialGeneratingSeries isomorphismTypeGeneratingSeries : () -> OrdinaryGeneratingSeries structures : SetSpecies ACInteger -> Generator % labels: SetSpecies Z := set [i::Z for i in 1..3] (11) [1,2,3]
Type: SetSpecies? ACInteger?
axiom
)set output tex off
axiom
)set output algebra on [structures(labels)$X]$ACLIST(X) (12) [((1, "nil"), ((2, "nil"), ((3, "nil"), "nil"))), ((1, "nil"), ((3, "nil"), ((2, "nil"), "nil"))), ((1, "nil"), ((2, ((3, "nil"), "nil")), "nil")), ((1, "nil"), ((3, ((2, "nil"), "nil")), "nil")), ((2, "nil"), ((1, "nil"), ((3, "nil"), "nil"))), ((2, "nil"), ((3, "nil"), ((1, "nil"), "nil"))), ((2, "nil"), ((1, ((3, "nil"), "nil")), "nil")), ((2, "nil"), ((3, ((1, "nil"), "nil")), "nil")), ((1, ((2, "nil"), "nil")), ((3, "nil"), "nil")), ((2, ((1, "nil"), "nil")), ((3, "nil"), "nil")), ((3, "nil"), ((1, "nil"), ((2, "nil"), "nil"))), ((3, "nil"), ((2, "nil"), ((1, "nil"), "nil"))), ((3, "nil"), ((1, ((2, "nil"), "nil")), "nil")), ((3, "nil"), ((2, ((1, "nil"), "nil")), "nil")), ((1, ((3, "nil"), "nil")), ((2, "nil"), "nil")), ((3, ((1, "nil"), "nil")), ((2, "nil"), "nil")), ((2, ((3, "nil"), "nil")), ((1, "nil"), "nil")), ((3, ((2, "nil"), "nil")), ((1, "nil"), "nil")), ((1, ((2, "nil"), ((3, "nil"), "nil"))), "nil"), ((1, ((3, "nil"), ((2, "nil"), "nil"))), "nil"), ((1, ((2, ((3, "nil"), "nil")), "nil")), "nil"), ((1, ((3, ((2, "nil"), "nil")), "nil")), "nil"), ((2, ((1, "nil"), ((3, "nil"), "nil"))), "nil"), ((2, ((3, "nil"), ((1, "nil"), "nil"))), "nil"), ((2, ((1, ((3, "nil"), "nil")), "nil")), "nil"), ((2, ((3, ((1, "nil"), "nil")), "nil")), "nil"), ((3, ((1, "nil"), ((2, "nil"), "nil"))), "nil"), ((3, ((2, "nil"), ((1, "nil"), "nil"))), "nil"), ((3, ((1, ((2, "nil"), "nil")), "nil")), "nil"), ((3, ((2, ((1, "nil"), "nil")), "nil")), "nil")]
Type: ACList? A ACInteger?
axiom
)set output tex on
axiom
)set output algebra off

Let's count how many structures of a certain size exist. This is encoded in the generating series. Note that this is an exponential generating series.

axiom
es: ExponentialGeneratingSeries := generatingSeries()$X;
Type: ExponentialGeneratingSeries?
axiom
[coefficient(es, i) for i in 0..10]
LatexWiki Image(2)
Type: List ACFraction? ACInteger?
axiom
[count(es, i) for i in 0..10]
LatexWiki Image(3)
Type: List ACInteger?

AldorCombinat? can also count the number of isomorphism types of structues. That is encoded in the isomorphim type series.

axiom
os: OrdinaryGeneratingSeries := isomorphismTypeGeneratingSeries()$X;
Type: OrdinaryGeneratingSeries?
axiom
[coefficient(os, i) for i in 0..10]
LatexWiki Image(4)
Type: List ACInteger?
axiom
[count(os, i) for i in 0..10]
LatexWiki Image(5)
Type: List ACInteger?
axiom
cs: S := cycleIndexSeries()$X;
Type: CycleIndexSeries?

The output of the next command apparently causes a "Proxy Error" on the mathaction server. This can be avoided by changing the output from LaTeX? to ASCII mode:

axiom
)set output tex off
axiom
)set output algebra on coeffs3: ACList P := [coefficient(cs, i) for i in 0..5] (20) [(1)*1, (1)*x1^1, (2)*x1^2, (5)*x1^3, (14)*x1^4, (42)*x1^5]
Type: ACList? SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
)set output tex on
axiom
)set output algebra off

P is the polynomial domain in infinitely many variables with rational coefficients.

axiom
p: P := 1$P
LatexWiki Image(6)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
v: V := 3::I::V
LatexWiki Image(7)
Type: CycleIndexVariable?
axiom
t: T := power(v,2) * power(5::I::V,3)
LatexWiki Image(8)
Type: SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?)
axiom
t2: T := power(v,3) * power(1::I::V,2)
LatexWiki Image(9)
Type: SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?)
axiom
p := t :: P + 3*t2
LatexWiki Image(10)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))

Let's do some more advanced stuff with Aldor-Combinat . See the functorial composition testpage for more details.

Here we compute the cycle index series of simple graphs.

axiom
e: S := cycleIndexSeries() $ SetSpecies(Z);
Type: CycleIndexSeries?
axiom
e2: S := term(coefficient(e, 2), 2);
Type: CycleIndexSeries?
axiom
h: S := functorialCompose(e * e, e2 * e);
Type: CycleIndexSeries?
axiom
coefficient(h, 0)
LatexWiki Image(11)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
coefficient(h, 1)
LatexWiki Image(12)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
coefficient(h, 2)
LatexWiki Image(13)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
coefficient(h, 3)
LatexWiki Image(14)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
coefficient(h, 4)
LatexWiki Image(15)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))
axiom
coefficient(h, 5)
LatexWiki Image(16)
Type: SparseDistributedPolynomial?(ACFraction? ACInteger?,CycleIndexVariable?,SparseIndexedPowerProduct?(CycleIndexVariable?,ACMachineInteger?))