summaryrefslogtreecommitdiff
path: root/Source/Dafny/Triggers
Commit message (Collapse)AuthorAge
* Implement {:nowarn}, clarify some messages, and add a few testsGravatar Clément Pit--Claudel2015-08-28
|
* Tiny cleanup in TriggersCollectorGravatar Clément Pit--Claudel2015-08-27
|
* Further relax the loop detection conditionsGravatar Clément Pit--Claudel2015-08-27
| | | | | Mismatches are now allowed up to expressions not involving any of the bound variables of the quantifier under inspection.
* Small fix: there is no loop in (forall x :: Q(x) && Q(0))Gravatar Clément Pit--Claudel2015-08-27
| | | | Again, spotted by Chris :)
* Improve the redundancy detection algorithm used while constructing sets of termsGravatar Clément Pit--Claudel2015-08-26
| | | | | | | | Based on an issue noted by Chris with redundancy removal resuls being dependent on the order of the terms. Interestingly, one of our tests already had an instance of that problem. Also fix the issue with nested quantifiers getting redundant triggers.
* s/loops with/may loop with/Gravatar Clément Pit--Claudel2015-08-23
|
* Make quantifier splitting a two step processGravatar Clément Pit--Claudel2015-08-23
| | | | This fixes a bug that affected Monad.dfy
* Shallow-copy quantifier attributes when splittingGravatar Clément Pit--Claudel2015-08-23
|
* Add a sanity check in QuantifiersCollectionGravatar Clément Pit--Claudel2015-08-23
|
* Improve error reporting for split quantifiersGravatar Clément Pit--Claudel2015-08-23
|
* Allow MultiSelectExpr as quantifier headsGravatar Clément Pit--Claudel2015-08-23
|
* Trivial code cleanupGravatar Clément Pit--Claudel2015-08-23
|
* Look at the full quantifier to find loops, not just the term.Gravatar Clément Pit--Claudel2015-08-22
|
* Make `old` a special case for trigger generation.Gravatar Clément Pit--Claudel2015-08-21
| | | | | | Old is particular, because in old(g(f(x))), the triggers are old(g(x)) and old(f(x)). This has a number of implications; see the new tests files for more information.
* Rephrase the message about triggers being rejected because they are too strongGravatar Clément Pit--Claudel2015-08-21
|
* Allow display expressions as trigger termsGravatar Clément Pit--Claudel2015-08-21
|
* Cleanup a number of FIXMEs that I had left in the codeGravatar Clément Pit--Claudel2015-08-20
|
* Implement the SelectTrigger method, removing redundant triggers.Gravatar Clément Pit--Claudel2015-08-20
| | | | | | | | | The idea is that we define an partial order on triggers (which may contain multiple terms), and find all the maximal elements. The algorithm as implemented is rather inefficient; in particular, is does not look at the structure of the graph of the relation (thus is does many redundant comparisons). See triggers/useless-triggers-are-removed.dfy for an example where such a filter is useful.
* Move indentation of error messages to the ConsoleErrorReporterGravatar Clément Pit--Claudel2015-08-20
| | | | This indentation is just needed by CLI-based clients
* Simplify error reporting in the trigger generator to get cleaner messagesGravatar Clément Pit--Claudel2015-08-20
|
* Allow users to disable quantifier splitting by with a {:split false} attributeGravatar Clément Pit--Claudel2015-08-20
|
* Print matches for triggers as they appear in the bufferGravatar Clément Pit--Claudel2015-08-19
| | | | | Triggers themselves, however, are printed exactly as used. For example, a term (x !in s) yields a trigger (x in s).
* Enable unicode output in the VS extensionGravatar Clément Pit--Claudel2015-08-19
|
* Collect ApplyExpr nodes when looking for trigger candidatesGravatar Clément Pit--Claudel2015-08-19
|
* Fix the equality test for literal expressionsGravatar Clément Pit--Claudel2015-08-19
| | | | (compare by value, not by reference to boxed value)
* Generate triggers for nested quantifiers as wellGravatar Clément Pit--Claudel2015-08-19
| | | | | | The new 'quantifiers' list keeps track of the quantifiers that have already been seen, so that they are not added both as a member of a collection and as a single quantifier.
* Slightly improve the condition used to filter out trigger setsGravatar Clément Pit--Claudel2015-08-18
|
* Use nested tokens in the quantifier splitterGravatar Clément Pit--Claudel2015-08-18
| | | | | This allows it to report the source of the error, giving better feedback to the user about which precondition to a function failed to hold, for example.
* Cleanup indentation of trigger warningsGravatar Clément Pit--Claudel2015-08-19
|
* Small cleanups, fixes, and refactoringsGravatar Clément Pit--Claudel2015-08-18
| | | | | In particular, start detecting loops between terms that don't look like each other at the Dafny level, such as {a[x]} and {x in a} (when a is a multiset)
* Use a nice warning symbol in some warning messagesGravatar Clément Pit--Claudel2015-08-18
| | | | | This is useful because trigger-related messages can contain quite a bit of information, especially if they include info about multiple split quantifiers.
* Start committing split quantifiersGravatar Clément Pit--Claudel2015-08-14
| | | | | | | | | This requires rewriting the parts of the AST that contain these quantifiers. We unfortunately don't have facilities to do such rewrites at the moment (and there are loops in the AST, so it would be hard to write such a facility). As a workaround, this commit introduces a field in quantifier expressions, SplitQuantifiers. Code that manipulate triggers is expected to look for this field, and ignore the other fields if that one is found.
* Implement self-loop detectionGravatar Clément Pit--Claudel2015-08-14
| | | | | | | | | | Implementing loop detection between multiple triggers is much harder, as it seems to require walking an exponentially sized graph. Self-loop detection is still a net gain compared to the current situation: we used to not detect loops in large quantifiers; not we break these apart, suppress the loops where we can in the smaller parts, and report the ones that we can't suppress. It could be that the broken-up quantifiers are mutually recursive, but these cases would have already led to a loop in the past.
* Draft out a more advanced version of trigger generationGravatar Clément Pit--Claudel2015-08-19
This new version will include a cleaner pipeline, and trigger splitting.