Prune broadcast functions based on their triggers #1175
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The old way of pruning broadcast functions was to keep all the broadcasts from a module if the module itself was reachable. This pull request introduces a more precise pruning policy that mostly replaces the old policy. In the new policy, a broadcast function is kept (not pruned) if any of its triggers are reachable. (If none of its triggers are reachable, then there would be no way to trigger the broadcast.)
There are a few exceptional cases that don't fall under this policy: arithmetic triggers, extensional equality triggers, and height triggers. For these, the old module-based policy is used. In the future, we could address these with other policies, such as type-based pruning.
The trigger-based policy relies on broadcast functions having explicit triggers. Therefore, this pull request adds a warning for any broadcast function that does not provide explicit triggers.