# subs: why it accepts one form but not the other?

Hello,

Consider the following expression

```
y=function("y")(x)
z=-3*diff(y,x)/y^4
```

I would like to replace diff(y,x)/y^4 by, say, 2/5

I tried,

```
z.subs(diff(y,x)/y^4==2/5).show()
```

But this didn't work (threw back at me the original expression)

I tried to replace y^4 by 5, and to do that I did

```
z.subs(y^4==5).show()
```

It didn't work. However,

```
z.subs(1/y^4==5).show()
```

worked!. I am confused!

If I tried to replace just y with 5^(1/4)

```
z.subs(y==(5)^(1/4)).show()
```

it worked! so it cannot replace y^4 with 5, but it can replace y with (5)^1/4.

To get what I want I finally did

```
z.subs(diff(y,x)==2).subs(1/y^4==5).show()
```

I got this by trial and error. Shouldn't the first one

```
z.subs(diff(y,x)/y^4==2/5).show()
```

have worked in the first place? What is the logic behind this that it didn't work?