Refactoring, add Constrain function

Fixes #33
Fixes #32
Shouldn't `Edge` conform to `Multiplication`?