Macaulay2 » Documentation
Packages » SLPexpressions :: SLPexpressions
next | previous | forward | backward | up | index | toc

SLPexpressions -- Straight Line Programs and expressions for evaluation circuits

Description

Many polynomials can be stored and evaluated efficiently when represented as a straight line program (SLP), also known as an algebraic circuit. By contrast, elements of a PolynomialRing in Macaulay2 are necessarily represented in "expanded" form, e.g. via a monomial basis.

This package provides basic types and methods for constructing and evaluating SLPs.

Here is a simple example illustrating an advantage of SLP representations.

i1 : declareVariable x

o1 = x

o1 : InputGate
i2 : f = x + 1

o2 = (x + 1)

o2 : SumGate
i3 : n = 12;
i4 : for i from 1 to n do f = f*f -- f = (x+1)^(2^n)
i5 : slp = makeInterpretedSLProgram({x},{f})

o5 = InterpretedSLProgram{cache => CacheTable{}               }
                          "constant positions" => {-2}
                          "constants" => | 1 |
                          "number of inputs" => 1
                          "number of outputs" => 1
                          RawSLProgram => SLProgram (
                                            consts+vars: 2
                                            noninput nodes: 13
                                            output nodes: 1
                                            )

                          "variable positions" => {-1}

o5 : InterpretedSLProgram
i6 : time A = evaluate(slp,matrix{{1}});
 -- used 5.36e-05s (cpu); 0.000210412s (thread); 0s (gc)

              1       1
o6 : Matrix ZZ  <-- ZZ
i7 : ZZ[y];
i8 : time B = sub((y+1)^(2^n),{y=>1})
 -- used 4.7282s (cpu); 3.71764s (thread); 0s (gc)

o8 = 104438888141315250669175271071662438257996424904738378038423348328395390
     797155745684882681193499755834089010671443926283798757343818579360726323
     608785136527794595697654370999834036159013438371831442807001185594622637
     631883939771274567233468434458661749680790870580370407128404874011860911
     446797778359802900668693897688178778594690563019026094059957945343282346
     930302669644305902501597239986771421554169383555988529148631823791443449
     673408781187263949647510018904134900841706167509366833385055103297208826
     955076998361636941193301521379682583718809183365675122131849284636812555
     022599830041234478486259567449219461702380650591324561082573183538008760
     862210283427019769820231316901767800667519548507992163641937028537512478
     401490715913545998279051339961155179427110683113409058427288427979155484
     978295432353451706522326906139490598769300212296339568778287894844061600
     741294567491982305057164237715481632138063104590291613692670834285644073
     044789997190178146576347322385026725305989979599609079946920177462481771
     844986745565925017832907047311943316555080756822184657174637329688491281
     952031745700244092661691087414838507841192980452298185733897764810312608
     590300130241346718972667321649151113160292078173803343609024380470834040
     3154190336
i9 : A == B

o9 = true

See also

Authors

Version

This documentation describes version 1.21 of SLPexpressions.

Citation

If you have used this package in your research, please cite it as follows:

@misc{SLPexpressionsSource,
  title = {{SLPexpressions: straight line programs and algebraic circuits. Version~1.21}},
  author = {Anton Leykin and Timothy Duff and Justin Chen and Mike Stillman},
  howpublished = {A \emph{Macaulay2} package available at
    "http://people.math.gatech.edu/~aleykin3/NAG4M2"}
}

Exports

For the programmer

The object SLPexpressions is a package, defined in SLPexpressions.m2, with auxiliary files in SLPexpressions/.


The source of this document is in SLPexpressions/doc.m2:29:0.