# Symbolics.jl: Simplify divisions assuming a variable is not zero

**URL:** <https://discourse.julialang.org/t/symbolics-jl-simplify-divisions-assuming-a-variable-is-not-zero/68406>\
**Category:** General Usage\
**Tags:** question, symbolics, symbolic-utils\
**Created:** [September 19, 2021, 11:49am UTC](https://discourse.julialang.org/t/symbolics-jl-simplify-divisions-assuming-a-variable-is-not-zero/68406 "2021-09-19T11:49:31Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ranocha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ranocha/32/35588_2.png) [@ranocha](https://discourse.julialang.org/u/ranocha)\
**Post date:** [September 19, 2021, 11:49am UTC](https://discourse.julialang.org/t/symbolics-jl-simplify-divisions-assuming-a-variable-is-not-zero/68406/1 "2021-09-19T11:49:31Z")

</div>

How can I use Symbolics.jl to simplify divisions assuming a variable is not zero?

For example, I would like to get `1` from

```julia
julia> using Symbolics

julia> @variables x
1-element Vector{Num}:
 x

julia> simplify(x / x) # How can this be simplified to 1 assuming that `x` is not zero?
x / x

```

For something as simple as the example above, I can use a custom rule such as

```julia
julia> div_rule = @rule ~x / ~x => one(~x)
~x / ~x => one(~x)

julia> simplify(x/ x, Rewriters.Prewalk(Rewriters.PassThrough(div_rule)))
1

```

However, if I have more complicated expressions, this doesn’t work anymore, e.g.

```julia
julia> @variables x y
2-element Vector{Num}:
 x
 y

julia> simplify(x * y/ x, Rewriters.Prewalk(Rewriters.PassThrough(div_rule)))
(x*y) / x

```

Something such as

```julia
julia> simplify(sin(y) * x/ x, Rewriters.Prewalk(Rewriters.Chain((
           @rule(~a1 * ~x * ~a2 / ~x => ~a1 * ~a2),
           @rule(~a1 * ~x / ~x => ~a1),
           @rule( ~x * ~a2 / ~x => ~a2),
           @rule( ~x / ~x => one(~x),
       )))))
sin(y)

```

seems to do the job, but it’s rather complicated and applies to all variables. Moreover, it doesn’t scale to more complicated expressions such as `(x + y) / x`.

1. How can this be generalized to all forms of divisions mixed with other operations?
2. Is there an easier way to achieve this?
3. How can I restrict the simplification to some specific variables?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [September 19, 2021, 12:08pm UTC](https://discourse.julialang.org/t/symbolics-jl-simplify-divisions-assuming-a-variable-is-not-zero/68406/2 "2021-09-19T12:08:13Z")

</div>

There’s `simplify_fractions`

---

<div class="post-metadata">

**Author:** ![ranocha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ranocha/32/35588_2.png) [@ranocha](https://discourse.julialang.org/u/ranocha)\
**Post date:** [September 19, 2021, 12:09pm UTC](https://discourse.julialang.org/t/symbolics-jl-simplify-divisions-assuming-a-variable-is-not-zero/68406/3 "2021-09-19T12:09:54Z")

</div>

Great, thanks!
