propagate constructiveness upward

todo: use from add_eq