Both debuggers display user-defined constraints and application of constraint handling rules. In the Opium debugger, this information corresponds to additional ports of the debugger. The additional ports are:
* add: A new constraint is added to the constraint store.
* already_in: A constraint to be added was already present.
The ports related to application of rules are:
* try_rule: A rule is tried.
* delay_rule: The last tried rule cannot fire because the guard did not succeed.
* fire_rule: The last tried rule fires.
The ports related to labeling are: * try_label: A label_with declaration is checked.
* delay_label: The last label_with declaration delays because the guard did not succeed.
* fire_label: The last tried label_with declaration succeeds, so the clauses of the associated constraint will be used for built-in labeling.
When displayed, each constraint is labeled with a unique integer identifier. Each rule is labeled with its name as given in the chr source using the @ operator. If a rule does not have a name, it is displayed together with a unique integer identifier.
See the extension manual chapter on constraint handling rules for more information on the Opium scenario used for debugging.