# Achieving Maximum Algebraic Simplification in Symbolic Computation

**URL:** <https://discourse.julialang.org/t/achieving-maximum-algebraic-simplification-in-symbolic-computation/127288>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [March 23, 2025, 7:58pm UTC](https://discourse.julialang.org/t/achieving-maximum-algebraic-simplification-in-symbolic-computation/127288 "2025-03-23T19:58:58Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![theo.bruelhart](https://avatars.discourse-cdn.com/v4/letter/t/5f9b8f/32.png) [@theo.bruelhart](https://discourse.julialang.org/u/theo.bruelhart)\
**Post date:** [March 23, 2025, 7:58pm UTC](https://discourse.julialang.org/t/achieving-maximum-algebraic-simplification-in-symbolic-computation/127288/1 "2025-03-23T19:58:58Z")

</div>

**Observation**  
The result of the mathematical operation (see code section) is not in its simplest algebraic form.

Obtained results: [(1//2)\*√(4y), (-1//2)\*√(4y)]  
Expected result: [√(y), -√(y)]

**Question**  
Does anyone have insight into why it is not expressed in its simplest or reduced form?  
Is there a method to achieve maximum algebraic simplification?

**Code**

```julia
using Pkg
Pkg.add("Symbolics"); using Symbolics
Pkg.add("Nemo"); using Nemo

@variables x, y
exp1 = x^2 ~ y
roots = symbolic_solve(exp1,x)
println(roots)

```

**Output**  
`SymbolicUtils.BasicSymbolic{Real}[(1//2)*√(4y), (-1//2)*√(4y)]`

**Environment**

- Linux thinkpad 6.1.0-32-amd64 #1 SMP PREEMPT\_DYNAMIC Debian 6.1.129-1 (2025-03-06) x86\_64 GNU/Linux
- julia version 1.11.3
- nemo.jl version v0.48.4
- symbolics.jl version v6.33.1

---

<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:** [March 24, 2025, 10:08am UTC](https://discourse.julialang.org/t/achieving-maximum-algebraic-simplification-in-symbolic-computation/127288/2 "2025-03-24T10:08:14Z")

</div>

The issue here is just that `simplify` seems to be missing rules for handling perfect squares:

```julia
using SymbolicUtils
@syms y
simplify.([(1//2)*√(4y), (-1//2)*√(4y)])

```

I’ll open an issue in Symbolics.jl asking for this, it would probably be a good thing to add.

> <https://github.com/JuliaSymbolics/Symbolics.jl/issues/1500>
>
> MWE:
> 
> \`\`\`julia
> using Symbolics
> @variables y
> simplify.(\[(1//2)\*√(4y), (-1//2)\*√(4…y)\])
> simplify\_fractions.(\[(1//2)\*√(4y), (-1//2)\*√(4y)\])
> \`\`\`
> 
> \`\`\`julia
> julia\> simplify.(\[(1//2)\*√(4y), (-1//2)\*√(4y)\])
> 2-element Vector{Num}:
> (1//2)\*sqrt(4y)
> (-1//2)\*sqrt(4y)
> 
> julia\> simplify\_fractions.(\[(1//2)\*√(4y), (-1//2)\*√(4y)\])
> 2-element Vector{Num}:
> (1//2)\*sqrt(4y)
> (-1//2)\*sqrt(4y)
> \`\`\`
> 
> I think step one is to make this \`√(4)\*√(y) \* 1//2\`, and then have it learn it can simplify perfect squares.

---

<div class="post-metadata">

**Author:** ![theo.bruelhart](https://avatars.discourse-cdn.com/v4/letter/t/5f9b8f/32.png) [@theo.bruelhart](https://discourse.julialang.org/u/theo.bruelhart)\
**Post date:** [March 24, 2025, 8:55pm UTC](https://discourse.julialang.org/t/achieving-maximum-algebraic-simplification-in-symbolic-computation/127288/3 "2025-03-24T20:55:54Z")

</div>

Appreciate your insight and thank you for having created an issue in Symbolics.jl
