Ask Your Question
1

Evaluating a `BooleanPolynomial`

asked 2022-02-23 03:06:36 +0200

minionsss gravatar image

updated 2022-02-23 14:45:19 +0200

slelievre gravatar image

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[0]=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 flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2022-02-23 17:44:47 +0200

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[0]:1})
b*c + b
sage: f.subs({S[0]:1, S[2]:a})
a*b + b
edit flag offensive delete link more
1

answered 2022-02-23 03:18:10 +0200

minionsss gravatar image

use f(*S) it can be solved

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

Stats

Asked: 2022-02-23 03:06:36 +0200

Seen: 42 times

Last updated: Feb 23