# Why won't Symbolics.jl simplify \`sqrt(1)\` to \`1\`?

**URL:** <https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921>\
**Category:** Modelling & Simulations\
**Created:** [August 6, 2021, 2:25am UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921 "2021-08-06T02:25:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Samuel\_Ainsworth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/samuel_ainsworth/32/15644_2.png) [@Samuel\_Ainsworth](https://discourse.julialang.org/u/Samuel_Ainsworth)\
**Post date:** [August 6, 2021, 2:25am UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921/1 "2021-08-06T02:25:58Z")

</div>

```julia
@variables x
sqrt(cos(x)^2 + sin(x)^2) |> simplify

```

gives me `sqrt(1)`. Why isn’t this reduced to simply `1`?

OTOH

```julia
sqrt(0*x+1) |> simplify

```

reduces to `1`, no problem.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [August 6, 2021, 3:03am UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921/2 "2021-08-06T03:03:20Z")

</div>

This is clearly a bug / missing feature so would be better to open as an Issue on GitHub

---

<div class="post-metadata">

**Author:** ![Samuel\_Ainsworth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/samuel_ainsworth/32/15644_2.png) [@Samuel\_Ainsworth](https://discourse.julialang.org/u/Samuel_Ainsworth)\
**Post date:** [August 6, 2021, 3:14am UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921/3 "2021-08-06T03:14:00Z")

</div>

Ok, created [https://github.com/JuliaSymbolics/Symbolics.jl/issues/337](https://github.com/JuliaSymbolics/Symbolics.jl/issues/337).

---

<div class="post-metadata">

**Author:** ![Bernard\_GODARD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bernard_godard/32/4155_2.png) [@Bernard\_GODARD](https://discourse.julialang.org/u/Bernard_GODARD)\
**Post date:** [August 6, 2021, 9:04am UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921/4 "2021-08-06T09:04:15Z")

</div>

> [@Samuel\_Ainsworth](#):
>
> `sqrt(0*x+1) |> simplify`

Note that simplify does nothing here:

```julia
julia> sqrt(0*x+1)
1.0

julia> sqrt(0*x+2) 
1.4142135623730951

```

However

```julia
julia> Symbolics.Term(sqrt,1) |> simplify
sqrt(1)

julia> using SymbolicUtils

julia> r = @rule sqrt(1) => 1
sqrt(1) => 1

julia> simplify(Symbolics.Term(sqrt, 1), RuleSet([r]))
1

julia> r2 = @rule cos(~x)^2+sin(~x)^2 => 1
cos(~x) ^ 2 + sin(~x) ^ 2 => 1

julia> simplify(sqrt(cos(x)^2 + sin(x)^2) , RuleSet([r,r2]))
1

```

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [August 6, 2021, 9:09am UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921/5 "2021-08-06T09:09:25Z")

</div>

I always thought the square root of 1 was -1 🤔

---

<div class="post-metadata">

**Author:** ![Samuel\_Ainsworth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/samuel_ainsworth/32/15644_2.png) [@Samuel\_Ainsworth](https://discourse.julialang.org/u/Samuel_Ainsworth)\
**Post date:** [August 6, 2021, 8:42pm UTC](https://discourse.julialang.org/t/why-wont-symbolics-jl-simplify-sqrt-1-to-1/65921/6 "2021-08-06T20:42:09Z")

</div>

> [@Bernard\_GODARD](#):
>
> Note that simplify does nothing here:
> 
> ```julia
> julia> sqrt(0*x+1)
> 1.0
> 
> ```

This isn’t quite true:

```julia
julia> @variables x
julia> sqrt(0*x+1) |> typeof
Num

```

It just gets `repr`d as `1.0`. OTOH

```julia
julia> sqrt(1) |> simplify |> typeof
Float64

```

Thanks for pointing out `simplify` with rule sets! Is there any way to `simplify` with all of the standard rules and then in addition some custom rules? AFAICT `simplify(..., RuleSet([r]))` only applies `r` and no other simplifications.
