Ask Your Question
0

How to assume the sum of some variables is equal to a constant?

asked 2017-08-05 08:08:05 +0100

ensaba gravatar image

Suppose I have this expression:

$$\frac{a {\left(t_{1} + t_{2} + t_{3} - 1\right)}}{b} $$

This can be simplified to 0 if we assume $t_1 + t_2 + t_3 = 1$.

How can I accomplish this in Sage? I've tried:

var('t1', 't2', 't3', 'a', 'b')
expr1 = ((t1 + t2 + t3 - 1)*a)/b
expr1.full_simplify()

assume(t1 + t2 + t3 == 1)
expr1.full_simplify()

I expected the second call tofull_simplify() to return 0 but it returned the same result as the first call, which is $$\frac{a t_{1} + a t_{2} + a t_{3} - a}{b}$$

edit retag flag offensive close merge delete

Comments

Note that you can work ( in the sense of algebraic geometry) as follows:

sage: R.<t1,t2,t3,a,b> = PolynomialRing(QQ)
sage: Q = R.quotient( t1+t2+t3-1 ).fraction_field()
sage: expr1 = ((t1 + t2 + t3 - 1)*a)/b
sage: expr1
(t1*a + t2*a + t3*a - a)/b
sage: expr1.parent()
Fraction Field of Multivariate Polynomial Ring in t1, t2, t3, a, b over Rational Field
sage: Q( expr1 )
0

Working in the quotient ring modulo the "assumed relations" will always give the reduced expressions without contorsions.

dan_fulea gravatar imagedan_fulea ( 2017-08-05 12:31:56 +0100 )edit

Thanks for the suggestion. Do you have any idea why assume() didn't work?

ensaba gravatar imageensaba ( 2017-08-06 02:14:37 +0100 )edit
1

Asking for ?assume we see for instance in

   EXAMPLES:

   Assumptions are typically used to ensure certain relations are
   evaluated as true that are not true in general.

that the command is not designed to work with simplifications hand in hand, but rather with special, unstructured conditions that make an integral, a square root, etc. be defined, or to have evaluations of special functions like sin and cos. To give an unrelated example where we would also "expect more", let us consider...

sage: var('k'); assume( k, 'integer' );
sage: cos( k*pi ) == (-1)^k
cos(pi*k) == (-1)^k
sage: bool( cos( k*pi ) == (-1)^k )
True

We have to insist to get the whole information.

In your case just insist to get the information: bool( expr1 == 0 ) .

dan_fulea gravatar imagedan_fulea ( 2017-08-06 15:19:04 +0100 )edit

1 Answer

Sort by ยป oldest newest most voted
1

answered 2017-08-05 09:38:02 +0100

ndomes gravatar image
var('t1', 't2', 't3', 'a', 'b')
expr1 = ((t1 + t2 + t3 - 1)*a)/b
equ = t1 + t2 + t3 == 1
expr1.subs(solve(equ,t1))
edit flag offensive delete link more

Comments

Any idea why assume() didn't work?

ensaba gravatar imageensaba ( 2017-08-06 02:13:58 +0100 )edit

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: 2017-08-05 08:08:05 +0100

Seen: 426 times

Last updated: Aug 05 '17