# Evaluating a BooleanPolynomial

When we cannot determine which variable will be determined by a constant, I use a list to store variables, but the BooleanPolynomialRing does not support change the BooleanPolynomial by variables in list.

It seems that it can only be changed by using the variable name; but when we encounter this situation, is there another way to solve this problem?

sage: from sage.crypto.boolean_function import BooleanFunction
sage: R = BooleanPolynomialRing(4, "a, b, c, d")

sage: R.inject_variables()
Defining a, b, c, d
sage: S = R.gens()
sage: print(S)
(a, b, c, d)

sage: f = a*b + b*c
sage: print(f(a=1))
b*c + b

sage: print(f(S=1))
File "<ipython-input-9-504c2572fec0>", line 1
print(f(S[Integer(0)]=Integer(1)))
^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

edit retag close merge delete

Sort by » oldest newest most voted You can use the substitute (or subs) method. I like using a Python dict as its argument:

sage: R.<a,b,c,d> = BooleanPolynomialRing()
sage: S = R.gens()
sage: f = a*b + b*c
sage: f.subs({a:1})
b*c + b
sage: f.subs({S:1})
b*c + b
sage: f.subs({S:1, S:a})
a*b + b

more

use f(*S) it can be solved

more