Opened 5 years ago

Closed 4 years ago

# Simplifications in calculus on manifolds with derivatives of symbolic functions

Reported by: Owned by: egourgoulhon major sage-duplicate/invalid/wontfix geometry manifold calculus mmancini, rllozes, tscrim Eric Gourgoulhon Travis Scrimshaw N/A public/manifolds/better_simplifications-24199 6eb6bdefa0cae2a02e421f2e62713d22643e01ba

### Description

The function `sage.manifolds.utilities.simplify_sqrt_real`, which is involved in calculus on manifolds (see here), does not simplify sqrt's as soon as the expression contains some derivative of a symbolic function:

```sage: from sage.manifolds.utilities import simplify_sqrt_real
sage: f = function('f')
sage: assume(x<1)
sage: simplify_sqrt_real(sqrt(x^2-2*x+1))  # OK
-x + 1
sage: simplify_sqrt_real(sqrt(x^2-2*x+1) * diff(f(x), x))  # nothing done
sqrt(x^2 - 2*x + 1)*diff(f(x), x)
```

The same limitation holds for derivatives denoted by `D[...]` instead of `diff`:

```sage: y = var('y'); s = sqrt(x^2-2*x+1) * diff(f(x), x).subs(x=y^2); s
sqrt(x^2 - 2*x + 1)*D[0](f)(y^2)
sage: simplify_sqrt_real(s)  # nothing done
sqrt(x^2 - 2*x + 1)*D[0](f)(y^2)
```

Similarly, the function `sage.manifolds.utilities.simplify_abs_trig` does not perform any simplification when a derivative is present:

```sage: from sage.manifolds.utilities import simplify_abs_trig
sage: assume(x>0); assumptions()
[x < 1, x > 0]
sage: simplify_abs_trig(abs(sin(x)))  # OK
sin(x)
sage: simplify_abs_trig(abs(sin(x)) * diff(f(x), x))  # nothing done
abs(sin(x))*diff(f(x), x)
```

The code introduced in this ticket repairs this. We have now, with the same assumptions as above:

```sage: simplify_sqrt_real(sqrt(x^2-2*x+1) * diff(f(x), x))
-(x - 1)*diff(f(x), x)
sage: simplify_sqrt_real(s)
-(x - 1)*D[0](f)(y^2)
sage: simplify_abs_trig(abs(sin(x)) * diff(f(x), x))
sin(x)*diff(f(x), x)
```

In addition, `simplify_abs_trig` is now capable to treat `abs(cos(...))`:

```sage: simplify_abs_trig(abs(cos(x))) # recall that 0 < x < 1 < pi/2
cos(x)
sage: simplify_abs_trig(abs(cos(x+2)))
-cos(x + 2)
sage: simplify_abs_trig(abs(cos(x+2)) * diff(f(x), x))
-cos(x + 2)*diff(f(x), x)
```

### comment:1 Changed 5 years ago by egourgoulhon

• Branch set to public/manifolds/better_simplifications-24199
• Cc mmancini rllozes tscrim added
• Commit set to 6eb6bdefa0cae2a02e421f2e62713d22643e01ba
• Status changed from new to needs_review

New commits:

 ​6eb6bde `Improve simplifications in calculus on manifolds when derivatives of symbolic functions are involved`

### comment:2 follow-up: ↓ 4 Changed 5 years ago by tscrim

LGTM.

As a possible improvement for another ticket, instead of string manipulations, you might want to consider contacting, e.g., Ralf (rws) to see if there is a better way by directly manipulating the expression tree. Or if there is an easy way to fix some of these problems upstream.

### comment:3 Changed 5 years ago by tscrim

• Reviewers set to Travis Scrimshaw
• Status changed from needs_review to positive_review

### comment:4 in reply to: ↑ 2 ; follow-up: ↓ 5 Changed 5 years ago by egourgoulhon

As a possible improvement for another ticket, instead of string manipulations, you might want to consider contacting, e.g., Ralf (rws) to see if there is a better way by directly manipulating the expression tree. Or if there is an easy way to fix some of these problems upstream.

Thanks for the suggestion. I agree that using the expression tree would be an improvement.

And thank you for the review!

### comment:5 in reply to: ↑ 4 Changed 5 years ago by egourgoulhon

As a possible improvement for another ticket, instead of string manipulations, you might want to consider contacting, e.g., Ralf (rws) to see if there is a better way by directly manipulating the expression tree. Or if there is an easy way to fix some of these problems upstream.

Thanks for the suggestion. I agree that using the expression tree would be an improvement.

Done in #24232

### comment:6 Changed 5 years ago by egourgoulhon

• Milestone changed from sage-8.1 to sage-duplicate/invalid/wontfix

This is superseded by #24232.

### comment:7 Changed 4 years ago by embray

• Resolution set to wontfix
• Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.