Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

holding does not work as intended

Hello everyone, I am not a native speaker, so I am not too sure about how to express the problem I have, although I will certainly give my best to do so.

I was experimenting with sage a bit and wanted it to generate an overview of a specific simplification of specific root expressions, namely sqrt(a + sqrt(b)) == sqrt(c) + sqrt(d) this simplification is possible under certain restraints for integers a and b, but that is not the point here.

For that matter I wanted to create a list of Tuples containing the expression exactly as written above and the corresponding boolean.

I therefore defined a function like this:

def test_cases(a):
    bs_cs_ds = [\
        (SR(4*n*m), SR(n), SR(m))\
        for (n,m) in [(x, a-x)\
            for x in [1..floor(a/2)]]]
    expressions = [\
        SR(a).add(sqrt(SR(b),hold=True),hold=True).sqrt(hold=True)\
        == sqrt(SR(c), hold=True).add(sqrt(SR(d), hold=True), hold=True)\
            for b,c,d in bs_cs_ds]
    return [(expr, bool(expr)) for expr in expressions]

So in my opinion I hold the evaluations/simplification for all possible functions (add and sqrt). But for some reason sage will still try to simplify the expressions. For example the input

test_cases(4)[1]

returns (sqrt(4 + 4) == sqrt(2) + sqrt(2), True), instead of (sqrt(4 + sqrt(16)) == sqrt(2) + sqrt(2), True).

So I apparently do not understand how holding works. I was under the impression, that it stops the evaluation/simplification for the given function or expression?

tl;dr: SR(a).add(SR(sqrt(SR(b), hold=True)), hold=True).sqrt(hold=True) does not return the expression sqrt(a + sqrt(b)) (one without any simplifications) for integers a,b, as I would expect for my input. But instead simplifies the inner root by factoring out etc.

To formulate a question: Can somebody correct my code to result in the intended behavior, or at least explain why Sage does not behave as expected from my point of view?

click to hide/show revision 2
retagged

holding does not work as intended

Hello everyone, I am not a native speaker, so I am not too sure about how to express the problem I have, although I will certainly give my best to do so.

I was experimenting with sage a bit and wanted it to generate an overview of a specific simplification of specific root expressions, namely sqrt(a + sqrt(b)) == sqrt(c) + sqrt(d) this simplification is possible under certain restraints for integers a and b, but that is not the point here.

For that matter I wanted to create a list of Tuples containing the expression exactly as written above and the corresponding boolean.

I therefore defined a function like this:

def test_cases(a):
    bs_cs_ds = [\
        (SR(4*n*m), SR(n), SR(m))\
        for (n,m) in [(x, a-x)\
            for x in [1..floor(a/2)]]]
    expressions = [\
        SR(a).add(sqrt(SR(b),hold=True),hold=True).sqrt(hold=True)\
        == sqrt(SR(c), hold=True).add(sqrt(SR(d), hold=True), hold=True)\
            for b,c,d in bs_cs_ds]
    return [(expr, bool(expr)) for expr in expressions]

So in my opinion I hold the evaluations/simplification for all possible functions (add and sqrt). But for some reason sage will still try to simplify the expressions. For example the input

test_cases(4)[1]

returns (sqrt(4 + 4) == sqrt(2) + sqrt(2), True), instead of (sqrt(4 + sqrt(16)) == sqrt(2) + sqrt(2), True).

So I apparently do not understand how holding works. I was under the impression, that it stops the evaluation/simplification for the given function or expression?

tl;dr: SR(a).add(SR(sqrt(SR(b), hold=True)), hold=True).sqrt(hold=True) does not return the expression sqrt(a + sqrt(b)) (one without any simplifications) for integers a,b, as I would expect for my input. But instead simplifies the inner root by factoring out etc.

To formulate a question: Can somebody correct my code to result in the intended behavior, or at least explain why Sage does not behave as expected from my point of view?