A library for using PolyBoRi
in the SINGULAR interface, with
procedures that convert structures (polynomials, rings, ideals) in both
directions. Therefore, it is possible to compute boolean groebner basis
via boolean_std. Polynomials can be converted to zero-supressed decision
diagrams (zdd) and vice versa.
For usability it defines the PolyBoRi
types bideal
, bpoly
,
and bring
which are equivalent to Singular's ideal
, poly
,
and ring
, as well as bset
which corresponds to the type zdd
introduced here. In addition bvar(i)
constructs the Boolean variable corresponding
to var(i)
from current ring
;
For convenience, the corresponding types can be converted explicitly or implicitly
while assigning.
Also several SINGULAR operators were overloaded: bring
comes with nvars
,
bpoly
implements lead
, leadmonom
and leadcoef
.
Objects of this type may be added and multiplied, too.
Finally, bideal
yields std
and size
as well as addition and element access.
Hence, by using these types PolyBoRi
functionality
can be carried out seamlessly in SINGULAR:
> LIB "polybori.lib";
> ring r0=2,x(1..4),lp;
> def x=bvar; // enforce Boolean variables
> bpoly f1=x(1)+x(4);
> bpoly f2=x(1)+x(3)*x(1);
> bideal bI=list(f1,f2);
> std(bI);
_[1] = x(1) + x(4)
_[2] = x(3)*x(4) + x(4)