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.
A common pattern in our Dafny predicates is to build up a definition recursively, then use an ensures to export its meaning under a more-powerful quantifier. For example, with receipts we recursively construct a sequence of values where each is related to the one before it by some predicate; users want to know this relation is true ∀ entry pairs in the receipt.
In Dafny, a single 'ensures' line expressing the fact acts as the proof (because it's the necessary inductive property to complete the proof) as well as broadcasting the result via trigger to anyone who mentions the definition name: exactly the automation we want. The absence of this feature has led to a bunch of tedium in porting Dafny specs into Verus.
Ultimately completing the feature requires:
return
statements inside spec fns to keep the implementation easy, but that's an unnecessary restriction