if given the following code:
(set-value! b 4 'user)
you will find that you can't get the value of a. Because in procedure multiplier, you only have (has-value? b) true, m1, m2 are not set, even they are the same, but multiplier doesn't know that.

Furthermore, let's imagine that there were some way for the underlying constraint to only have either m1 or m2 set, then squarer would calculate the wrong result (it would set either m1 or m2 to b/m* instead of just the other value. Also, squarer can calculate the value of a given only b (sqrt) which multiplier cannot do.

master

Furthermore, let's imagine that there were some way for the underlying constraint to only have either

m1orm2set, thensquarerwould calculate the wrong result (it would set eitherm1orm2tob/m*instead of just the other value. Also,squarercan calculate the value ofagiven onlyb(sqrt) whichmultipliercannot do.