Ask Your Question

How to express boolean polynomials by special form

asked 2021-01-07 14:34:52 +0200

Laura gravatar image

updated 2021-01-07 17:45:09 +0200

slelievre gravatar image

If I have boolean polynomials like

x_1 * x_2 + x_1*x_3* x_5 + x_3 + x_7*x_2

then given a variable x_1, how can I represent it as

x_1 * (x_2 + x_3*x_5) + (x_3 + x_7*x_2)

using Sage?

In general, I want to find a way to represent a form of a * x_1 + c, where a is the linear combination of multiples of x_1 and c is the rest polynomial.

edit retag flag offensive close merge delete


Welcome to Ask Sage! Thank you for your question!

slelievre gravatar imageslelievre ( 2021-01-07 18:05:19 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2021-01-07 18:04:55 +0200

slelievre gravatar image

There is a dedicated method for that for polynomials other than boolean in Sage.

Sadly it is not available for boolean polynomials, for a silly reason: they lack a dict method that would return a dictionary whose keys would be monomials and values would be coefficients.

I opened Sage Trac ticket 31198 for that.

The workaround is to write a small function to achieve that.

def as_poly(p, z):
    Print `p` as a polynomial in `z`
    a = p / z
    c = p - a*z
    print(f'({a})*{z} + ({c})')


sage: P = BooleanPolynomialRing(8, 'x')
sage: x = P.gens()
sage: p = x[1] * x[2] + x[1] * x[3] * x[5] + x[3] + x[7] * x[2]
sage: p
x1*x2 + x1*x3*x5 + x2*x7 + x3
sage: as_poly(p, x[1])
(x2 + x3*x5)*x1 + (x2*x7 + x3)
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2021-01-07 14:33:39 +0200

Seen: 24 times

Last updated: Jan 07