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 explictely or implicitely
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)