### What guarantees simplify()?

How to convert (n!/k!)*binomial(k,n-k) to factorials? From an answer of tmonteil in question 30394:

```
var('k,n')
expr = n.factorial()/k.factorial()*binomial(k,n-k)
expr.factorial_simplify()
factorial(n)/(factorial(2*k - n)*factorial(-k + n))
```

The new question is: what is the contract of simplify()
(or factorial_simplify())?

I think a simplification is only useful if it returns
an equivalent expression. Is this is guaranteed?

In our example: Take n=1 and k=0. expr is 0 in this case
but expr.factorial_simplify() is not defined (or gives an
ValueError if executed) because factorial(2*k-n) = factorial(-1).

So my question might be rephrased: Is this an accidental
bug or a systematic unreliability which renders simplify()
essentially useless?

Peter