A constraint describes relationships that must hold in the final assignment. It does not execute statements from top to bottom or designate the left side of == as an output.
Reason it through
- length == beats * 4 relates both variables. If either value is fixed, the other is constrained by the same equation.
- The order of constraint expressions does not change their logical intersection.
- condition -> rule activates the consequent only when the antecedent is true. It neither creates execution order nor implies the reverse relationship.
- If one field is purely derived and does not need to influence legality, calculating it in
post_randomize()can make intent clearer and reduce solver work.
