The assign-such-that statement and let-such-that expression (alternatively known as the bored-smiley constructs) involve a proof obligation that has an existential quantifier in it. Auto-triggers (that is, `/autoTriggers:1`) does not compute any triggers for this quantifier, but it should.
Note, because this existential quantifier is sometimes difficult to prove, Dafny attempts to generate some plausible witnesses. For illustration, consider a statement
```
x :| P(x);
```
where `x` is of type `int`. If Dafny finds a couple of plausible witnesses, call them `w0` and `w1`, then Dafny produces the following proof obligation:
```
assert P(w0) || P(w1) || (exists x :: P(x));
```
In cases where the quantifier does not have good triggers, witnesses can be especially useful.
Usually, if auto-triggers does not find a good trigger, it emits a warning. I'm suggesting that, for the such-that constructs, this warning is emitted only if auto-triggers does not find a good trigger AND Dafny does not find any plausible witnesses.
Rustan
Note, because this existential quantifier is sometimes difficult to prove, Dafny attempts to generate some plausible witnesses. For illustration, consider a statement
```
x :| P(x);
```
where `x` is of type `int`. If Dafny finds a couple of plausible witnesses, call them `w0` and `w1`, then Dafny produces the following proof obligation:
```
assert P(w0) || P(w1) || (exists x :: P(x));
```
In cases where the quantifier does not have good triggers, witnesses can be especially useful.
Usually, if auto-triggers does not find a good trigger, it emits a warning. I'm suggesting that, for the such-that constructs, this warning is emitted only if auto-triggers does not find a good trigger AND Dafny does not find any plausible witnesses.
Rustan