Ask Your Question

Revision history [back]

Consider a system of linear equations with an absolute value:

%display typeset 

var('x y a b')
f=[1+y-a*abs_symbolic(x)==x, b*x==y]; f

$\newcommand{\Bold}[1]{\mathbf{#1}}\left[-a {\left| x \right|} + y + 1 = x, b x = y\right]$

We attempt to solve the system assuming $x>0$ and then $x<0$:

assume(x>0)

solve(f, [x, y])

$$\newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[x = \frac{1}{a - b + 1}, y = \frac{b}{a - b + 1}\right]\right]$$

# to avoid conflict with the previous assumption (use `assumptions()` to list all current symbolic assumptions)
forget()
assume(x<0)

solve(f, [x, y])

$$ \newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[x = -\frac{1}{a + b - 1}, y = -\frac{b}{a + b - 1}\right]\right] $$

As you point out, there seems to be a bug if we do this straightforwardly:

forget()
solve(f, [x, y])

gives TypeError: cannot coerce arguments: no canonical coercion from <type 'list'> to Symbolic Ring.

Consider a system of linear equations with an absolute value:

%display typeset 

var('x y a b')
f=[1+y-a*abs_symbolic(x)==x, b*x==y]; f

$\newcommand{\Bold}[1]{\mathbf{#1}}\left[-a {\left| x \right|} + y + 1 = x, b x = y\right]$

We attempt to solve the system assuming $x>0$ and then $x<0$:

assume(x>0)

solve(f, [x, y])

$$\newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[x = \frac{1}{a - b + 1}, y = \frac{b}{a - b + 1}\right]\right]$$

# use `forget()` to avoid conflict with the previous assumption (use `assumptions()` to list see all current symbolic assumptions)
forget()
assume(x<0)

solve(f, [x, y])

$$ \newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[x = -\frac{1}{a + b - 1}, y = -\frac{b}{a + b - 1}\right]\right] $$

As you point out, there seems to be a bug if we do this straightforwardly:

forget()
solve(f, [x, y])

gives TypeError: cannot coerce arguments: no canonical coercion from <type 'list'> to Symbolic Ring.

Consider a system of linear equations with an absolute value:

%display typeset  
var('x y a b')
f=[1+y-a*abs_symbolic(x)==x, b*x==y]; f

$\newcommand{\Bold}[1]{\mathbf{#1}}\left[-a {\left| x \right|} + y + 1 = x, b x = y\right]$

We attempt to solve the system assuming $x>0$ and then $x<0$:

assume(x>0)

solve(f, [x, y])

$$\newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[x = \frac{1}{a - b + 1}, y = \frac{b}{a - b + 1}\right]\right]$$

# use `forget()` to avoid conflict with the previous assumption (use `assumptions()` to see all current symbolic assumptions)
forget()
assume(x<0)

solve(f, [x, y])

$$ \newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[x = -\frac{1}{a + b - 1}, y = -\frac{b}{a + b - 1}\right]\right] $$

As you point out, there seems to be a bug if we do this straightforwardly:

forget()
solve(f, [x, y])

gives TypeError: cannot coerce arguments: no canonical coercion from <type 'list'> to Symbolic Ring.